LibSVM预测准确度

时间:2015-09-01 04:05:42

标签: machine-learning libsvm cross-validation hyperparameters forward-testing

我目前正在尝试在此处运行 LibSVM https://www.csie.ntu.edu.tw/~cjlin/libsvm

我只能访问MATLAB 2011b。当我尝试使用不同的 LibSVM C 值运行gamma包中包含的示例数据文件(heartscale)时获得相同的准确度结果。

这也适用于其他数据集。

我构建了一个 for 循环,并循环显示不同的Cgamma值,并且精度%不会改变。

我这样做是为了找到最好的Cgamma用于数据集(交叉验证),如文档“支持向量分类的实用指南”所示。上面的网站。

当我查看下面构建的accuracy_mat时,值都是相同的。甚至svmpredict的输出都是相同的。

我已多次阅读文档并查看了网站上的常见问题解答,并希望从SVM从业者那里获得相关信息。

[heart_scale_label, heart_scale_inst] = libsvmread( 'heartscale' );
C = { '2^-5','2^-3','2^-1'};
g = {'2^-15','2^-3','2^-1'};
accuracy_mat = zeros(  length( g ), length( c ) );
data_num     = length( heart_scale_inst(:,1) );
t            = zeros(  data_num, 1 );
for i = 1:length( g )
    for j = 1:length( C )
        c_train_inputs    = ['-c ', C{j}];
        g_train_inputs    = ['-g ', g{i}];
        c_and_g_inputs    = [c_train_inputs, g_train_inputs];
        model             = svmtrain(   heart_scale_label,          ...
                                        heart_scale_inst,           ...
                                        [c_and_g_inputs, '-b 1']    ...
                                        );
        [predict_label, ...
         accuracy,      ...
         prob_estimates]  = svmpredict( heart_scale_label,          ...
                                        heart_scale_inst,           ...
                                        model,                      ...
                                        '-b 1'                      ...
                                        );
        accuracy_mat(i,j) = max( accuracy );
     end
end

1 个答案:

答案 0 :(得分:0)

[C,gamma]超参数的初始范围将您锁定在角落

支持向量方法是非常强大的引擎。

尽管如此,人们可能仍然会通过糟糕的数据清理(正规化,NaN移除等)或通过发送命令来使用角落案例超参数C来破坏其强大的预测能力。 gamma

在SVM / SVC引擎投入努力工作之前,如果计划运行强力超参数空间搜索(GridSearchCV等),其中CPU / GPU可能很容易花费更多比起数百小时,一个简单的经验法则应该用于搜索空间的预验证。

Andreas Mueller has put that nicely通过“经验法则”首次扫描SVM rbf(虽然预扫描的想法一般有效,但不仅适用于rbf模型) “价值范围:

{'C': np.logspace(-3, 2, 6), 'gamma': np.logspace(-3, 2, 6)}

即。除非你非常确定(或被某些无法限制的禁止) 仅使用[ C, gamma ] - 搜索空间中预设的超低学习参数化值,您可以放宽范围,以便SVM学习者可以进一步远离已被锁定的观察角落的其他结果到目前为止。

C = { 0.001, 0.01, 0.1, 1.0, 10.0, 100.0 }
g = { 0.001, 0.01, 0.1, 1.0, 10.0, 100.0 }

如果你没有看到SVM学习者结果在这个超级参数的沙盒预测试环境中有任何演变,那么根本原因将隐藏在DataSET中(似乎不是在您发布观察结果的情况下,同样的问题出现在审查中的一个特定DataSET上。)

Nota bene:还可能会测试有关受过训练的模型的描述性统计值:

model_predictions_accuracy_mean(i,j) = mean( accuracy );
model_predictions_accuracy_var( i,j) = var(  accuracy );

accuracy_mat(                   i,j) = max(  accuracy ); %% MAX masks
                                                         %% quality-of-fit
                                                         %% & may "look" same
                                                         %%   for the whole range