MATLAB中的多类交叉验证LIBSVM

时间:2016-04-29 20:32:25

标签: matlab machine-learning svm libsvm cross-validation

我正在做一个多类SVM来解决问题。我有4个班级(1,2,3,4)。我也在尝试实现网格搜索方法,以找到C和gamma的最佳值。我改编的代码来自官方FAQ LIBSVM页面:http://www.csie.ntu.edu.tw/~cjlin/libsvm/faq.html#f803

代码中有一个类问题。我试图优化它以适应我的情况。我按照他们在这里写的建议:http://www.csie.ntu.edu.tw/~cjlin/libsvm/faq.html#f507

我试图找到每对两类的最佳参数(C和gamma)(一对一的方法)。我的代码如下:

%# Find best values for c and g using cross validation
bestcv                  = 0;
for k=1:numLabels
bestcv(k)                  = 0;

for log2c = -3:3,
for log2g = -5:4,
cmd                 = ['-v 10 -c ', num2str(2^log2c), ' -g ', num2str(2^log2g)];

cv                  = svmtrain(double(gridLabel==k), gridData, cmd);
if (cv >= bestcv(k)),
  bestcv(k)            = cv; 
  bestc(k)             = 2^log2c; 
  bestg(k)             = 2^log2g;
end


fprintf('%g %g %g (best c=%g, g=%g, rate=%g)\n', log2c, log2g, cv, bestc, bestg, bestcv);
end
end
end

然后,在找到最佳参数后,我为每对类(一个对所有类)训练具有不同参数的数据,如下面的代码所示:

model                   = cell(numLabels,1);
for k=1:numLabels
model{k}                = svmtrain(double(trainLabel==k), trainData, ['-c ', num2str(bestc(k)),' -g ', num2str(bestg(k)), ' -b 1']);
end

我的问题是:

  • 这是与多个类进行交叉验证的正确方法吗?
  • 如何在具有不同的交叉验证值后测量模型的整体性能?如果通过绘制成本函数,在我的情况下如何做到这一点?
  • 如何优化网格搜索方法以适应我的问题?

我期待着阅读你的意见。

0 个答案:

没有答案