这是我正在使用的代码。
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_
我要记录文件数量。
有什么不对吗?
答案 0 :(得分:2)
这意味着使用您的参数,最佳SVM是什么都不做(构建一个简单地回答一个标签的简单模型)。
cl(x) = sign( SUM_i alpha_i y_i K(x_i, x) + b ) = sign( b ) = const.
是的,有些问题,因为您的模型根本不使用您的培训数据。
原因是什么?为了使用RBF-SVM,您需要拟合两个超参数:gamma
和C
,特别是C=0.05
(可能)数量级太小而无法正常工作。另外 - 记住要对数据进行标准化,因为图像通常表示为像素强度值(0-255),而SVM对正态分布值更有效。 Gamma也必须仔细安装(scikit-learn中的默认值是1 / no。功能,因此它非常粗略地猜测一个好的值,很少是一个好的值)。
作为一个例子,参考libsvm website和一个图表,显示C和伽玛值与心脏数据集上获得的准确度的关系