在训练SVM分类器时的奇怪行为

时间:2016-08-14 09:07:47

标签: machine-learning svm

我正在搜索用于训练我的SVM分类器的C(成本参数)的最佳值。这是我的代码:

clear all; close all; clc

% Load training features and labels
[y, x] = libsvmread('training_data.train'); %the training dataset is named training_data.train


cost=[2^-7,2^-5,2^-3,2^-1,2^1,2^3,2^5,2^7,2^9,2^11,2^13,2^15];
accuracy=zeros(1,length(cost)); %This array will store the accuracy values corresponding to each element in the cost array

for i = 1:length(cost)
  opt = sprintf('-c %i -v 3',cost(i));
  accuracy(i)=svmtrain(y,x,opt);
end

accuracy

我正在使用LIBSVM库。当我运行这个程序时,精度数组中填充了非常奇怪的值: 这是输出:

第1至8栏:

67.335 93.696 91.404 92.550 93.696 93.553 93.553 93.553

第9至12栏:

93.553 93.553 93.553 93.553

这意味着我在2 ^ -5上获得最高的交叉验证准确度。我应该在C的最高值上获得最高准确度吗? (据我所知,这是错误分类的惩罚因素)。这种行为是期望的吗? (我正在建立一个使用UCI ML数据库进行乳腺癌鉴定的分类器)。

1 个答案:

答案 0 :(得分:1)

  

我应该在C的最高值上获得最高准确度吗? (据我所知,这是错误分类的惩罚因素)。

不,不能保证,因为SVM成本不是基于准确性的,它使用特定的代理功能,其功能大致与准确性相似,但您可以预期会有很多随机波动。一般来说,你应该期望高C值高,但不一定是最高值。

  

这种行为是否符合预期? (我正在建立一个使用UCI ML数据库进行乳腺癌鉴定的分类器。)

是的,这是可能的结果。