2017-01-03 70 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學習