我修改了LIBSVM为cv网格搜索提出的代码,以便对单类SVM执行网格搜索。因此,我需要搜索最佳的nu和gamma对,而不是搜索c。我将C值的范围更改为值0.5(默认为libsvm),0.6,7.0,0.8,0.9,因为nu需要取值(0,1)。 我得到的结果是,随着nu的增加,交叉验证的准确性提高,因此最终nu = 0.9是nu的最佳参数。当我尝试训练SVM而不执行交叉验证网格搜索时,就是这种情况,只需在(0.5,0.9)范围内更改nu。
然而,对于nu的所有参数,测试结果保持不变。我的问题是,nu值的变化是否会影响测试的准确性?
这是LIBSVM为网格搜索提出的代码。
codbestcv = 0;
for log2c = -1:3,
for log2g = -4:1,
cmd = ['-v 5 -c ', num2str(2^log2c), ' -g ', num2str(2^log2g)];
cv = svmtrain(heart_scale_label, heart_scale_inst, cmd);
if (cv >= bestcv),
bestcv = cv; bestc = 2^log2c; bestg = 2^log2g;
end
fprintf('%g %g %g (best c=%g, g=%g, rate=%g)\n', log2c, log2g, cv, bestc, bestg, bestcv);
ende that follows: