%% 构建样本集并标记类别 X1 = [1 0]; X2 = [1 1]; X3 = [0 2]; X4 = [2 1]; X5 = [2 2]; X6 = [1 3]; X = [X1;X2;X3;X4;X5;X6]; Y = [-1,-1,-1,1,1,1]; %% 初始化参数 theta = [1 1 0]'; alpha = 0.05; %% 迭代计算,直到分界面不再变化 count = 0; while true count = count + 1; old_theta = theta; for i=1:length(X) if Y(i)*dot(theta,[1 X(i,:)])<1 theta = theta + alpha*Y(i)*[1 X(i,:)]'; end end if norm(theta-old_theta)<1e-5 % 终止条件 break; end end %% 计算分界面方程参数 w = theta(2:3); b = -theta(1); disp(['分界面方程为:w=[',num2str(w'),'] b=',num2str(b)]); 补充代码作图显示上述结果,并解释每一行代码的作用
时间: 2024-01-20 15:02:12 浏览: 153
第4章支持向量机12
以下是补充代码作图显示上述结果的代码:
```
% 绘制样本点
figure;
plot(X(Y==-1,1),X(Y==-1,2),'ro');
hold on;
plot(X(Y==1,1),X(Y==1,2),'bx');
% 绘制分界面
x1 = min(X(:,1)):0.1:max(X(:,1));
x2 = -(b + w(1)*x1)/w(2);
plot(x1,x2,'k-');
xlabel('X1');
ylabel('X2');
legend('Y=-1','Y=1','分界面');
```
代码解释:
- 第一行定义了样本集 X 和对应的类别标签 Y;
- 第三行初始化参数 theta 和学习率 alpha;
- 第五行开始迭代计算,每次迭代更新 theta;
- 第九行设置终止条件,当分界面参数不再变化时退出循环;
- 第十三行计算分界面方程参数 w 和 b;
- 第十四到二十三行绘制样本点和分界面,其中第十四行绘制 Y 为 -1 的样本点,第十五行绘制 Y 为 1 的样本点,第十八行计算并绘制分界面。
阅读全文