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 接口。