【问题标题】:LibSVM prediction accuracyLibSVM 预测精度
【发布时间】: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 ', 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

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2017-09-05
      • 2017-07-08
      • 2015-01-07
      • 2020-09-29
      • 2013-02-21
      • 2011-05-31
      • 2014-06-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多