首页 > 解决方案 > 具有 Matlab fitcsvm 的一类和一个特征的 SVM 给出了过度拟合的结果

问题描述

我试图以最简单的方式使用 SVM,对目标类别(1 类)进行分类,其值范围大于某些值,低于其他非目标(0 类)。然而,我拟合的模型太复杂了,而不是给我两个支持向量,导致类别之间的分离很差。我认为该模型的维度太多,因此严重过度拟合。我尝试更改“KernelScale”,但事实并非如此。你知道我怎样才能让模型更简单吗?

n0 = normrnd(0,1,300,1);
n1 = normrnd(1,1,300,1);
n2 = normrnd(2,1,300,1);

val = [n0;n1;n2];
lbl = [zeros(300,1);ones(300,1);zeros(300,1)];

d = fitcsvm(val, cellstr(str(lbl))','KernelScale', 'auto','KernelFunction','gaussian');
pred = ismember(d.predict(val),'1');
figure;
plot([1:300,601:900],val([1:300,601:900]),'.b')
hold on;
plot(301:600,val(301:600),'.r')
plot(find(pred),val(pred),'og')
legend('class 0','class 1','predicted class 1','location','southeast')

在此处输入图像描述

标签: matlabsvm

解决方案


推荐阅读