我正在使用for循环调整SVM,以在超参数空间的范围内进行搜索。所学习的from tkinter import *
# create canvas
root = Tk()
root.title("Aktieköp")
root.configure(background="white")
frame=Frame(root, width=1100, height=1000)
frame.grid(row=0, column=0)
canvas=Canvas(frame,bg="white",width=1100,height=1000)
# my photo
photo = PhotoImage(file="aktier.gif")
label0 = Label(frame, image = photo, bg="white"). grid(row=0, column=0)
# create scrollbar
scrollbar=Scrollbar(frame,orient=VERTICAL)
scrollbar.pack(side=RIGHT,fill=Y)
scrollbar.config(command=canvas.yview)
frame.config(width=1100,height=1000)
frame.config(yscrollcommand=scrollbar.set)
frame.pack(side=RIGHT,expand=True,fill=Y)
root.mainloop()
模型包含以下字段
svm
问题1)“得分”字段及其用途是什么意思?
问题2)我正在调整 SVMModel: [1×1 ClassificationSVM]
C: 2
FeaturesIdx: [4 6 8]
Score: 0.0142
的C值。令特征的数量由变量BoxConstraint
表示。变量featsize
将包含可以从任何值(例如2 ^ -5、2 ^ -3到2 ^ 15等)开始的搜索空间。因此,gridC
。我不明白是否有选择范围的方法?
答案 0 :(得分:0)
1。。score
已记录在here中,内容为:
分类分数 用于对观察值x进行分类的SVM分类分数是从x到决策边界的有符号距离,范围为-∞到+∞。 类别的正分数表示x预计在 那堂课负分数表示相反。
在两个类别的情况下,如果有六个观察值,并且预测函数为我们提供了一个名为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)
替代,很明显,前三个观察值属于第二类,而第四到第六个观察值属于第一类。
在多类情况下,可能会有多个得分> 0,但是代码max(scores,[],2)
仍然有效。例如,我们可以使用下面的代码(来自here,该示例称为“使用二进制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。。在SVM模型中BoxConstraint
表示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接口。