2

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

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

这也发生在其他数据集上。

我建立了一个for循环并循环通过不同的Cgamma和精度%的不改变。

我这样做是为了找到最好的C,并gamma按照上述网站上的文档“支持向量分类的实用指南”中的建议用于数据集(交叉验证)。

当我查看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
4

1 回答 1

0

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

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

尽管如此,人们仍然可能通过糟糕的数据清理(正则化、NaN 删除等)或通过发送使用极端情况超参数的命令或发送命令来破坏他们出色的预测C能力gamma

在 SVM/SVC 引擎投入大量工作之前,如果计划运行蛮力超参数空间搜索(GridSearchCV等),则 CPU/GPU 可能很容易花费数百小时以上,这是一个简单的规则of thumb 应该用于搜索空间的预验证。

Andreas Mueller在“经验法则”的值范围内很好地首次扫描 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( 似乎并非如此,因为您发布了观察,同样的问题出现独立于正在审查的一个特定数据集)。

注意事项:人们也可以测试有关训练模型的描述性统计值:

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
于 2015-09-01T06:30:58.023 回答