svmmatlab代码
时间: 2023-07-09 20:34:05 浏览: 44
以下是一个简单的SVM Matlab代码示例:
首先,我们需要加载数据:
```matlab
load fisheriris
X = meas(:,3:4);
Y = (strcmp('virginica',species));
```
然后我们可以训练SVM模型:
```matlab
SVMModel = fitcsvm(X,Y,'KernelFunction','linear','Standardize',true);
```
这里使用线性核函数,并进行标准化处理。
接下来,我们可以使用训练好的模型进行预测:
```matlab
[label,score] = predict(SVMModel,X);
```
最后,我们可以将结果可视化:
```matlab
gscatter(X(:,1),X(:,2),Y)
hold on
h = svmplot(SVMModel);
title(sprintf('SVM Classification with \\bf%s\\rm Kernel',char(SVMModel.KernelFunction)))
legend({'Setosa','Non-Setosa','Support Vectors'},'Location','Best')
hold off
```
其中,svmplot 函数可以用来绘制SVM分类器的决策边界和支持向量。
完整代码如下:
```matlab
load fisheriris
X = meas(:,3:4);
Y = (strcmp('virginica',species));
SVMModel = fitcsvm(X,Y,'KernelFunction','linear','Standardize',true);
[label,score] = predict(SVMModel,X);
gscatter(X(:,1),X(:,2),Y)
hold on
h = svmplot(SVMModel);
title(sprintf('SVM Classification with \\bf%s\\rm Kernel',char(SVMModel.KernelFunction)))
legend({'Setosa','Non-Setosa','Support Vectors'},'Location','Best')
hold off
function h = svmplot(model)
w = model.Beta;
b = model.Bias;
if numel(w) > 2
error('svmplot only works for 2D models');
end
x = linspace(-1,1);
y = (-b - w(1)*x)/w(2);
h = plot(x,y,'k');
if model.KernelParameters.Scale
sv = model.SupportVectors;
if size(sv,2) > 2
error('svmplot only works for 2D models');
end
w = w*model.Sigma;
x = sv(:,1);
y = sv(:,2);
z = 1-b-w(1)*x-w(2)*y;
margin = 1./sqrt(sum(w.^2));
xlim = get(gca,'XLim');
ylim = get(gca,'YLim');
[X,Y] = meshgrid(linspace(xlim(1),xlim(2),100),linspace(ylim(1),ylim(2),100));
Z = reshape(1-b-w(1)*X(:)-w(2)*Y(:),size(X));
contour(X,Y,Z,[-margin,0,margin],'k');
plot(x,y,'ko','MarkerSize',10);
end
end
```