支持向量机matlab代码程序
时间: 2023-10-18 21:09:38 浏览: 73
支持向量机matlab代码程序-机器学习实战项目
以下是一个简单的支持向量机(SVM)的 MATLAB 程序:
```matlab
% 加载数据
data = load('data.txt');
X = data(:, 1:2);
y = data(:, 3);
% 绘制数据
plotData(X, y);
% 训练 SVM 模型
C = 1.0; % 正则化参数
model = svmTrain(X, y, C, @linearKernel);
% 绘制决策边界
visualizeBoundaryLinear(X, y, model);
% 定义线性核函数
function sim = linearKernel(x1, x2)
sim = x1' * x2;
end
% 绘制数据函数
function plotData(X, y)
% 找到正负样本的索引
pos = find(y==1);
neg = find(y==0);
% 绘制正负样本
plot(X(pos, 1), X(pos, 2), 'k+', 'LineWidth', 2, 'MarkerSize', 7);
hold on;
plot(X(neg, 1), X(neg, 2), 'ko', 'MarkerFaceColor', 'y', 'MarkerSize', 7);
hold off;
end
% 绘制线性决策边界函数
function visualizeBoundaryLinear(X, y, model)
% 绘制数据
plotData(X, y);
% 绘制决策边界
w = model.w;
b = model.b;
xp = linspace(min(X(:,1)), max(X(:,1)), 100);
yp = (-1/w(2)) * (w(1) * xp + b);
plot(xp, yp, '-b');
% 设置图形属性
xlim([min(X(:,1))-0.1, max(X(:,1))+0.1]);
ylim([min(X(:,2))-0.1, max(X(:,2))+0.1]);
legend('Positive', 'Negative', 'Decision boundary');
title('Linear SVM');
end
```
这个程序使用了线性核函数来训练一个二分类的 SVM 模型,并绘制了决策边界。注意,这个程序只适用于线性可分的数据集。如果数据集是线性不可分的,可以使用非线性核函数,如高斯核函数。
阅读全文