支持向量机用于解决分类问题。与感知器(PLA)相比,支持向量机不仅试图找到一个能够完美分割数据的高维平面(hyperplane),而且还希望这个平面能够尽量地胖,即平面与最近的数据点之间的距离尽可能地要大。
给人的直观感觉是:分类平面离最近的数据点越远,越能容仍误差,因而鲁棒性越好。
1. 令
是分类平面的法向量
2. 分类器对每个数据点的所属类别的判断方法为: 3. 要完美地完成分类任务即等价于要:4. 每个数据点到分类平面的距离为:
定义支持向量机问题如下:
因为通过对 进行同等的放缩对限制条件并无影响,不妨令 ,
即可对上面问题进行简化:
依旧可以通过放缩对限制条件进行放松,同时将问题中的最大化专为最小化,获得了支持向量机的标准形式:
下面举个例子,在matlab中,利用cvx求解一个支持向量机,有四个数据点:
现要求解满足条件的支持向量机,代码如下:
y = [-1 -1 1 1];
x = [0 2 2 3
0 2 0 0];
cvx_begin
variables w(2) b;
minimize (1/2*w'*w);
subject to
y.*(w'*x + b) >= 1;
cvx_end
求解后获得
支持向量机的标准形式包含的是一个二次的目标函数和线性的限制条件,是一个二次规划问题,可以通过二次规划求解。
等价的二次规划问题形式如下:
其中,目标中:
限制条件为:
下面仍然用cvx来求解上面例子中问题的二次规划形式,同时,我们对
进行一个非线性的变换:
x = [1 0 0 -1 0 0 -2;
0 1 -1 0 2 -2 0];
y = [-1 -1 -1 1 1 1 1]';
z = [x(2,:).^2-2*x(1,:)+3; x(1,:).^2 - 2*x(2,:)-3];
Q = [0 0 0;
0 1 1;
0 1 1];
p = [0 0 0]';
for i = 1:7
A(i,:) = y(i).*[1 z(:,i)'];
end;
c = [1 1 1 1 1 1 1]';
cvx_begin
variable u(3);
minimize (1/2*u'*Q*u+p'*u);
subject to
A*u >= c;
cvx_end
求解得到:
即: