一、前言
在推导出SVM公式的基础上,就可以考虑动手实现了。SVM解决分类问题,这里用MATLAB来实现,具体就不多说了,所以首先给出两种标记不同的点,然后分别标记为+1,-1。先训练,再测试,最后画图展示出来。代码也是主演参考的别人的,有加上自己的理解注释。
二、流程及实现
1.流程图
2.大家对二次规划可能有点陌生,可以查看帮助文档或者百度,讲解得都很详细,下面是我简单记录一下,其实就是一一对应起来:
3.得到大致流程之后,下面直接贴代码,复制之后就可直接运行。
主函数代码如下:
- %------------主函数----------------
- clear all;
- close all;
- C = 10; %成本约束参数
- kertype = 'linear'; %线性核
- %①------数据准备
- n = 30;
- %randn('state',6); %指定状态,一般可以不用
- x1 = randn(2,n); %2行N列矩阵,元素服从正态分布
- y1 = ones(1,n); %1*N个1
- x2 = 4+randn(2,n); %2*N矩阵,元素服从正态分布且均值为5,测试高斯核可x2 = 3+randn(2,n);
- y2 = -ones(1,n); %1*N个-1
- figure; %创建一个用来显示图形输出的一个窗口对象
- plot(x1(1,:),x1(2,:),'bs',x2(1,:),x2(2,:),'k+'); %画图,两堆点
- axis([-3 8 -3 8]); %设置坐标轴范围