SVM非线性可分二分类 matlab代码
时间: 2023-07-05 19:09:35 浏览: 54
以下是一个简单的SVM非线性可分二分类的matlab代码示例:
```matlab
% 生成数据
rng(1);
X = randn(100,2);
Y = 2*(sum(X.^2,2) < 1) - 1;
% 训练SVM模型
svmmodel = fitcsvm(X,Y,'KernelFunction','rbf','BoxConstraint',1);
% 绘制分类边界和支持向量
figure;
h = 0.02;
[x1,x2] = meshgrid(min(X(:,1)):h:max(X(:,1)), min(X(:,2)):h:max(X(:,2)));
xgrid = [x1(:),x2(:)];
[~,scores] = predict(svmmodel,xgrid);
hold on
contour(x1,x2,reshape(scores(:,2),size(x1)),[0 0],'k');
gscatter(X(:,1),X(:,2),Y);
scatter(svmmodel.SupportVectors(:,1),svmmodel.SupportVectors(:,2),100,'k','filled');
legend('SVM边界','类别1','类别2','支持向量');
```
这段代码首先生成了一个二分类数据集,其中类别之间的边界是一个圆形。然后使用`fitcsvm`函数训练了一个SVM模型,其中`KernelFunction`参数指定为`rbf`表示使用径向基函数作为核函数,`BoxConstraint`参数用于控制正则化的强度。最后,使用`contour`函数绘制了SVM分类边界和支持向量。