2012-03-30 34 views
3

我想为c-SVM分类选择参数c和gamma,使用 RBF(径向基函数)内核与libsvm \ tools \ grid.py,但我不知道它有多可能?我安装了libsvm和gnuplot和python,并运行python中的grid.py,但它有错误,并没有显示结果。我如何使用grid.py进行参数选择?

回答

12
%grid of parameters 
folds = 5; 
[C,gamma] = meshgrid(-5:2:15, -15:2:3); 
%# grid search, and cross-validation 
cv_acc = zeros(numel(C),1); 
d= 2; 
for i=1:numel(C) 
    cv_acc(i) = svmtrain(TrainLabel,TrainVec, ...   
     sprintf('-c %f -g %f -v %d -t %d', 2^C(i), 2^gamma(i), folds,d)); 
end 
%# pair (C,gamma) with best accuracy 
[~,idx] = max(cv_acc); 
%# contour plot of paramter selection 
contour(C, gamma, reshape(cv_acc,size(C))), colorbar 
hold on; 
text(C(idx), gamma(idx), sprintf('Acc = %.2f %%',cv_acc(idx)), ... 
    'HorizontalAlign','left', 'VerticalAlign','top') 
hold off 
xlabel('log_2(C)'), ylabel('log_2(\gamma)'), title('Cross-Validation Accuracy') 
%# now you can train you model using best_C and best_gamma 
best_C = 2^C(idx); best_gamma = 2^gamma(idx); %# ... 

此执行网格搜索,以及...但使用MATLAB ...不使用grid.py ...也许这有助于...

+0

对不起,我不明白功能svmtrain去的返回值。它应该是一个返回的模型。为什么你把它当作一个准确性和准确性呢?谢谢! – 2015-04-22 08:54:15

+0

@lakesh:在这里,对于这个网格搜索和选择参数,它需要将所有数据(训练和测试)作为输入提供给'svmtrain',还是有另一种方法来处理数据? – Amin 2017-08-09 13:43:53

6

你可以使用所提供的,而不是电网的MATLAB脚本.py常问问题

问:我怎样才能使用MATLAB接口进行参数选择? http://www.csie.ntu.edu.tw/~cjlin/libsvm/faq.html#f803

bestcv = 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); 
    end 
end