2017-01-03 71 views
1

我试图用sklearnsvm.SVC分类器对图像进行分类,但它不是学习,训练后我得到了0.1的准确性(有10个类,所以0.1的准确性与随机猜测相同)sklearn支持向量机不学习

我使用CIFAR-10 datatset。被表示为3072 uint8小号10000倍的图像。第一个1024是红色像素,第二个1024是绿色像素,口渴1024是蓝色像素。

每个图像也有一个标签,这是一个数字0-9

这里是我的代码:

import numpy as np 
from sklearn import preprocessing, svm 
import pandas as pd 
import pickle 
from sklearn.externals import joblib 

train_data = pickle.load(open('data_batch_1','rb'), encoding='latin1') 
test_data = pickle.load(open('test_batch','rb'), encoding='latin1') 

X_train = np.array(train_data['data']) 
y_train = np.array(train_data['labels']) 
X_test = np.array(test_data['data']) 
y_test = np.array(test_data['labels']) 

clf = svm.SVC(verbose=True) 
clf.fit(X_train, y_train) 

accuracy = clf.score(X_test, y_test) 

joblib.dump(clf, 'Cifar-10-clf.pickle') 

print(accuracy) 

有谁知道我的问题可能是什么,或者可以点我的资源来解决这个?

回答

3

我不知道,但我认为你需要调整SVC的参数。

我测试了一些参数,然后学习我得到了一个0.318精度。

这里是代码:

# coding: utf-8 

import numpy as np 
from sklearn import preprocessing, svm 
import cPickle 

train_data = cPickle.load(open('data/data_batch_1', 'rb')) 
test_data = cPickle.load(open('data/test_batch', 'rb')) 

X_train = np.array(train_data['data']) 
y_train = np.array(train_data['labels']) 
X_test = np.array(test_data['data'][:1000]) 
y_test = np.array(test_data['labels'][:1000]) 

clf = svm.SVC(kernel='linear', C=10, gamma=0.01) 
clf.fit(X_train, y_train) 

accuracy = clf.score(X_test, y_test) 

print "Accuracy: ", accuracy 

,我建议grid search function自整定超参数。

This约为tuning the hyper-parameters公开文件中scikit学习