sklearn支持向量机没有学习

时间:2017-01-03 01:01:40

标签: python machine-learning scikit-learn image-recognition

我正在尝试使用sklearn svm.SVC分类器对图像进行分类,但它没有学习,在训练后我得到0.1准确度(有10个等级,所以0.1准确性与随机猜测相同)

我正在使用CIFAR-10数据集。 10000个图像,表示为3072 uint8 s。前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)

有谁知道我的问题是什么,或者能指出我解决这个问题的资源?

1 个答案:

答案 0 :(得分: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是有关scikit-learn

tuning the hyper-parameters的公开文件