python - sklearn支持向量机不学习

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

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

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

有谁知道我的问题可能是什么,或者可以为我提供解决此问题的资源吗?

最佳答案

我不确定,但我认为你需要调整 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-learn 中

关于python - sklearn支持向量机不学习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41435083/

相关文章:

python - SKL学习如​​何获取 LinearSVC 分类器的决策概率

python - 除了在 Python 中,编写 try 的最佳方法是什么?

python - sys.getsizeof(list) 返回小于其元素之和的值

machine-learning - 微调Caffe深度学习检查失败: error == cudaSuccess out of memory

algorithm - 训练强大的级联分类器时要考虑的建议?

python - 缩放不能真正代表火车数据的测试数据

python - iPython timeit - 仅时间部分操作

Python - 简单的 for 循环未按预期工作(使用请求模块)

machine-learning - keras 模型 fit_generator ValueError : Error when checking model target: expected cropping2d_4 to have 4 dimensions, 但得到形状为 (32, 1) 的数组

python - 生成PCA加载矩阵时如何将pandas dataframe列设置为索引