已知3个正例点,2个负例点,用SVM学习算法,求最大间隔分离超平面和分类决策函数,并在图上画出分离超平面、间隔边界及支持向量,用matlab程序实现该过程
时间: 2024-11-09 19:31:33 浏览: 112
在使用支持向量机(Support Vector Machine, SVM)进行二分类问题时,给定三个正例点和两个负例点,目标是找到一个最大的间隔超平面,使得两类样本点到此超平面的距离最大化,即最小化分类错误。SVM通过构造拉格朗日乘数法优化模型,找出最优的支持向量。
以下是基本步骤:
1. **数据准备**:将特征和标签整理成Matlab可以处理的数据结构,如`[X, Y]`,其中`X`是特征矩阵,`Y`是对应的类别标签(1表示正例,-1表示负例)。
2. **选择核函数**:SVM支持多种核函数(如线性、多项式、径向基函数等),根据问题特性选择合适的核。线性核适用于这种简单的二维情况。
3. **构建模型**:使用Matlab的`fitcsvm`函数,传入训练数据和核函数类型,如`model = fitcsvm(X,Y,'KernelFunction','linear')`。
4. **预测和决策函数**:`predict`函数用于对新的输入数据进行分类。决策函数形式通常是`sign(decision_function(model,Xnew))`,它给出新样本的预测类别。
5. **绘制图形**:`plotDecisionBoundary`函数可以辅助可视化决策边界。首先计算间隔边界,然后使用`scatter`函数标记支持向量和其它样本点,`decision Boundary`则由间隔公式决定。
```matlab
function plotsvm(x,y,model)
% 函数名:plotsvm
% 输入:x (特征),y (类别标签),model (训练好的SVM模型)
% 计算间隔边界
supportVectors = model.SupportVectors;
alpha = model.Alpha;
A = [ones(size(supportVectors,1),1) supportVectors]; % 向量化
b = -y * alpha * ones(1,size(supportVectors,1)); % 线性偏置
w = A'\sum(alpha.*y.*supportVectors);
sigma = w(2); % 间隔大小
% 决策函数
df = @(x) predict(model,x) - sign(w'*x + b);
% 绘制决策边界
xx = linspace(min(x(:,1)),max(x(:,1)));
yy = df([xx; ones(size(xx,1),1)*mean(x(:,2)))));
hold on
plot(x(y == 1,1), x(y == 1,2),'o', 'MarkerFaceColor','g'); % 正例
plot(x(y == -1,1), x(y == -1,2),'o', 'MarkerFaceColor','r'); % 负例
hold off
grid on
xlabel('特征1')
ylabel('特征2')
title('SVM Decision Boundary and Support Vectors')
plot([0, 0], [-sigma*sigma, sigma*sigma],'k--') % 间隔边界
plot([0, 0], [-w(1)/w(2), -w(1)/w(2)], 'k') % 最大间隔超平面
plot(supportVectors(:,1), supportVectors(:,2), 'ko', 'MarkerSize', 8); % 支持向量
end
```
阅读全文