我正在调优支持向量机,使用for循环在超参数的空间范围内搜索。学习到的svm
模型包含以下字段
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)
。我不明白是否有办法选择范围?
发布于 2018-07-10 05:57:49
1. score
在这里中有记载,其中说:
分类得分支持向量机分类观测x的分类分数是从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)
仍在验证。例如,我们可以使用下面的代码(来自这里,一个名为“使用二进制支持向量机查找多类边界”的示例)来确定预测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
在支持向量机模型中表示C
,因此我们可以在不同的超参数中训练SVMs,并通过以下方式选择最佳参数:
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的接口。
https://stackoverflow.com/questions/51251595
复制相似问题