Attempt at an artwork classifier using a bag of visual words model keeps predicting the same class

so that’s the class detected in most cases ?
can you show a few lines of the csv ?

i’d use a much larger dictionary (like 5000), and all train images for the clustering, you can afford (this is not nessecarily the train size for the SVM)

you also probably need to fine-tune the SVM params