【问题标题】:How to decide the range for the hyperparameter space in SVM tuning? (MATLAB)如何确定 SVM 调优中超参数空间的范围? (MATLAB)
【发布时间】:2018-12-17 11:52:22
【问题描述】:

我正在使用 for 循环调整 SVM 以在超参数的空间范围内进行搜索。学习到的svm模型包含以下字段

   SVMModel: [1×1 ClassificationSVM]
          C: 2
FeaturesIdx: [4 6 8]
      Score: 0.0142

问题1) 'score' 字段的含义及其实用性是什么?

问题2)我正在调整BoxConstraint,C 值。假设特征的数量由变量featsize 表示。变量gridC 将包含搜索空间,它可以从任何值开始,例如 2^-5、2^-3 到 2^15 等。所以,gridC = 2.^(-5:2:15)。我不明白是否有办法选择范围?

【问题讨论】:

    标签: matlab machine-learning deep-learning svm hyperparameters


    【解决方案1】:

    1. score 已记录在 here 中,其中说:

    分类分数 对观测 x 进行分类的 SVM 分类分数是从 x 到决策边界的有符号距离,范围从 -∞ 到 +∞。 一个类的正分数表示 x 被预测为 那堂课。负分表示其他情况。

    在两类情况下,如果有 6 个观察值,并且预测函数给了我们一个名为 TestScore 的得分值,那么我们可以确定具体观察归属于哪个类:

    TestScore=[-0.4497    0.4497
               -0.2602    0.2602;
               -0.0746    0.0746;
                0.1070   -0.1070;
                0.2841   -0.2841;
                0.4566   -0.4566;];
    [~,Classes] = max(TestScore,[],2);
    

    在二分类中,我们也可以用find(TestScore > 0)来代替,很明显前三个观测值属于第二类,第4到第6个观测值属于第一类。

    在多类情况下,可能有多个分数 > 0,但代码 max(scores,[],2) 仍然有效。例如,我们可以使用下面的代码(来自here,一个名为 Find Multiple Class Boundaries Using Binary SVM 的示例)来确定预测 Samples 的类。

    for j = 1:numel(classes);
        [~,score] = predict(SVMModels{j},Samples);
        Scores(:,j) = score(:,2); % Second column contains positive-class scores
    end
    [~,maxScore] = max(Scores,[],2);
    

    那么maxScore将表示每个样本的预测类别。

    2. BoxConstraint 表示 SVM 模型中的 C,因此我们可以在不同的超参数下训练 SVM,并通过以下方式选择最好的一个:

    gridC = 2.^(-5:2:15);
    for ii=1:length(gridC)
    SVModel = fitcsvm(data3,theclass,'KernelFunction','rbf',...
        'BoxConstraint',gridC(ii),'ClassNames',[-1,1]);
    %if (%some constraints were meet) 
    %  %save the current SVModel
    %end
    end
    

    注意:实现此功能的另一种方法是使用libsvm,这是一个快速且易于使用的 SVM 工具箱,具有 MATLAB 接口。

    【讨论】:

    • 感谢您提供如此简单的解释。但是,我在两件事上很少见。你能澄清这2点吗? (1) 分数似乎是一个值矩阵,其中列数等于特征数,行数等于示例数。但在代码中,score 是一个标量值。 Matlab如何给出标量值尚不清楚。
    • (2) 在研究论文中,我们是否在未见数据上使用调整学习器报告分类结果?我的意思是,在完成第 2 点的计算后,我们得到了最终的学习模型。我们在这个学习模型上运行整个训练+交叉验证集。该集合与 kfold 交叉验证中使用的相同。之后,我们在一个测试集上进行预测,该测试集理想情况下应该是从未在学习过程中使用过的测试集。
    • (1)注意,矩阵得分的列数等于类数,而不是特征。所以如果分数是一个标量值,你的 MATLAB 已经做了一个“一类学习”。 (2)在大多数论文中,我们不使用“分数”来预测未知的观测值,CV 集的模型分类的准确性更有说服力。 @SrishtiM
    猜你喜欢
    • 1970-01-01
    • 2020-11-17
    • 2015-07-12
    • 2019-02-26
    • 2021-09-29
    • 1970-01-01
    • 2020-10-26
    • 2021-11-10
    • 1970-01-01
    相关资源
    最近更新 更多