【问题标题】:sklearn support vector machine is not learningsklearn 支持向量机不学习
【发布时间】:2017-05-17 01:08:51
【问题描述】:

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

我正在使用CIFAR-10 数据集。 10000 张图像,表示为 3072 uint8s。第一个1024是红色像素,第二个1024是绿色像素,thirst 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)

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

【问题讨论】:

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


    【解决方案1】:

    我不确定,但我认为您需要调整 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 的公开文档

    【讨论】:

      猜你喜欢
      • 2013-06-14
      • 2016-01-31
      • 2016-10-09
      • 2017-08-18
      • 2015-06-03
      • 2011-05-17
      • 2023-03-08
      相关资源
      最近更新 更多