在MATLAB中,SVM(Support Vector Machine,支持向量机)的可视化可以使用plot函数和svmtrain函数来实现。具体步骤如下:
1. 生成随机数据
使用randn函数生成两类随机数据,每类数据有100个样本,数据维度为2。
```matlab
rng(1); % 设置随机数种子,使结果可重复
X1 = randn(100,2)+1;
X2 = randn(100,2)-1;
```
2. 绘制散点图
使用plot函数绘制两类数据的散点图。其中,X1和X2是两个100×2的矩阵,第一列是x轴坐标,第二列是y轴坐标。'o'表示绘制圆圈形的点,'MarkerFaceColor'和'MarkerEdgeColor'分别表示点的填充颜色和边框颜色。
```matlab
figure;
hold on;
plot(X1(:,1),X1(:,2),'o','MarkerFaceColor','g','MarkerEdgeColor','g');
plot(X2(:,1),X2(:,2),'o','MarkerFaceColor','r','MarkerEdgeColor','r');
```
3. 训练SVM模型
使用svmtrain函数训练SVM模型。其中,X和Y是训练数据和标签,'-t 0'表示使用线性核函数。svmtrain函数返回的model结构体包含了训练后的模型参数。
```matlab
X = [X1;X2];
Y = [ones(size(X1,1),1);-1*ones(size(X2,1),1)];
model = svmtrain(Y,X,'-t 0');
```
4. 绘制SVM分割超平面和支持向量
使用plot函数绘制SVM分割超平面和支持向量。其中,model.SVs是支持向量的坐标,model.sv_coef是支持向量的系数。w和b是分割超平面的权重和偏置。
```matlab
w = model.SVs'*model.sv_coef;
b = -model.rho;
xp = linspace(min(X(:,1)),max(X(:,1)),100);
yp = (-w(1)*xp-b)/w(2);
plot(xp,yp,'k');
plot(xp,yp+1/w(2),'k--');
plot(xp,yp-1/w(2),'k--');
plot(model.SVs(:,1),model.SVs(:,2),'o','MarkerFaceColor','b','MarkerEdgeColor','b');
```
完整代码如下:
```matlab
rng(1);
X1 = randn(100,2)+1;
X2 = randn(100,2)-1;
figure;
hold on;
plot(X1(:,1),X1(:,2),'o','MarkerFaceColor','g','MarkerEdgeColor','g');
plot(X2(:,1),X2(:,2),'o','MarkerFaceColor','r','MarkerEdgeColor','r');
X = [X1;X2];
Y = [ones(size(X1,1),1);-1*ones(size(X2,1),1)];
model = svmtrain(Y,X,'-t 0');
w = model.SVs'*model.sv_coef;
b = -model.rho;
xp = linspace(min(X(:,1)),max(X(:,1)),100);
yp = (-w(1)*xp-b)/w(2);
plot(xp,yp,'k');
plot(xp,yp+1/w(2),'k--');
plot(xp,yp-1/w(2),'k--');
plot(model.SVs(:,1),model.SVs(:,2),'o','MarkerFaceColor','b','MarkerEdgeColor','b');
```