LibSVM 预测精度

Posted

技术标签:

【中文标题】LibSVM 预测精度【英文标题】:LibSVM prediction accuracy 【发布时间】:2015-11-26 04:51:07 【问题描述】:

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

我只能访问 MATLAB 2011b。当我尝试使用不同的 Cgamma 值运行 LibSVM 包中包含的示例数据文件(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 ', Cj];
        g_train_inputs    = ['-g ', gi];
        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】:

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

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

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

在 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 中(这似乎不是情况下,当您发布观察结果时,同样的问题出现独立于正在审查的特定数据集)。

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

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

【讨论】:

以上是关于LibSVM 预测精度的主要内容,如果未能解决你的问题,请参考以下文章

如何使用libsvm进行回归预测

如何使用libsvm进行回归预测

Libsvm - 预测结果为 NULL

libsvm 可以将预测结果作为有符号距离返回吗?

LibSVM 预测不工作

使用 LIBSVM 预测用户的真实性