我有一些图像数据,我正在训练我的SVM分类器,我看到支持向量都是零。这是什么意思?

时间:2015-12-27 15:44:37

标签: python image-processing machine-learning svm

这是我正在使用的代码。

nfiles=40
i=0
y=[1]*20
y.extend([-1]*20)
traindata =np.zeros((40,1024));
for im in glob.glob("/home/name/Desktop/database/20trainset/*.png "):
    img = cv2.imread(im)
    img = im2double(img)
    img = rgb2gray(img)
    traindata[i] =img.reshape((1,1024))
    i+=1

clf = svm.SVC( kernel='rbf',C=0.05)
clf.fit(traindata,y)
print clf.support_vectors_

我要记录文件数量。

有什么不对吗?

1 个答案:

答案 0 :(得分:2)

这意味着使用您的参数,最佳SVM是什么都不做(构建一个简单地回答一个标签的简单模型)。

cl(x) = sign( SUM_i alpha_i y_i K(x_i, x) + b ) = sign( b ) = const.

是的,有些问题,因为您的模型根本不使用您的培训数据

原因是什么?为了使用RBF-SVM,您需要拟合两个超参数:gammaC,特别是C=0.05(可能)数量级太小而无法正常工作。另外 - 记住要对数据进行标准化,因为图像通常表示为像素强度值(0-255),而SVM对正态分布值更有效。 Gamma也必须仔细安装(scikit-learn中的默认值是1 / no。功能,因此它非常粗略地猜测一个好的值,很少是一个好的值)。

作为一个例子,参考libsvm website和一个图表,显示C和伽玛值与心脏数据集上获得的准确度的关系

enter image description here