首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何确定SVM调优中超参数空间的取值范围?(MATLAB)

如何确定SVM调优中超参数空间的取值范围?(MATLAB)
EN

Stack Overflow用户
提问于 2018-07-09 18:07:11
回答 1查看 313关注 0票数 0

我正在调优支持向量机,使用for循环在超参数的空间范围内搜索。学习到的svm模型包含以下字段

代码语言:javascript
运行
复制
   SVMModel: [1×1 ClassificationSVM]
          C: 2
FeaturesIdx: [4 6 8]
      Score: 0.0142

Question1)字段“分数”的含义及其效用是什么?

Question2),我正在调优BoxConstraint,C值。让我们用变量featsize来表示特性的数量。变量gridC将包含搜索空间,该空间可以从任何值(例如2^-5、2^-3、到2^15等)开始,因此,gridC = 2.^(-5:2:15)。我不明白是否有办法选择范围?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-10 05:57:49

1. score这里中有记载,其中说:

分类得分支持向量机分类观测x的分类分数是从x到决策边界的符号距离(从-∞到+∞)。一个类的正分数表示x被预测在该类中。负数表示相反。

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

代码语言:javascript
运行
复制
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)仍在验证。例如,我们可以使用下面的代码(来自这里,一个名为“使用二进制支持向量机查找多类边界”的示例)来确定预测Samples的类。

代码语言:javascript
运行
复制
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在支持向量机模型中表示C,因此我们可以在不同的超参数中训练SVMs,并通过以下方式选择最佳参数:

代码语言:javascript
运行
复制
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

注意:另一种实现方法是使用利布斯文,一个快速易用的支持向量机工具箱,它具有MATLAB的接口。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51251595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档