转载

支持向量机(Support Vector Machine)Part I

支持向量机用于解决分类问题。与感知器(PLA)相比,支持向量机不仅试图找到一个能够完美分割数据的高维平面(hyperplane),而且还希望这个平面能够尽量地胖,即平面与最近的数据点之间的距离尽可能地要大。

支持向量机(Support Vector Machine)Part I

给人的直观感觉是:分类平面离最近的数据点越远,越能容仍误差,因而鲁棒性越好。

1. 令 支持向量机(Support Vector Machine)Part I

是分类平面的法向量

2. 分类器对每个数据点的所属类别的判断方法为: 支持向量机(Support Vector Machine)Part I 3. 要完美地完成分类任务即等价于要: 支持向量机(Support Vector Machine)Part I

4. 每个数据点到分类平面的距离为:

支持向量机(Support Vector Machine)Part I

定义支持向量机问题如下:

支持向量机(Support Vector Machine)Part I

支持向量机(Support Vector Machine)Part I 支持向量机(Support Vector Machine)Part I 因为通过对 支持向量机(Support Vector Machine)Part I 进行同等的放缩对限制条件并无影响,不妨令 支持向量机(Support Vector Machine)Part I

即可对上面问题进行简化:

支持向量机(Support Vector Machine)Part I

支持向量机(Support Vector Machine)Part I

依旧可以通过放缩对限制条件进行放松,同时将问题中的最大化专为最小化,获得了支持向量机的标准形式:

支持向量机(Support Vector Machine)Part I

支持向量机(Support Vector Machine)Part I

下面举个例子,在matlab中,利用cvx求解一个支持向量机,有四个数据点:

支持向量机(Support Vector Machine)Part I

支持向量机(Support Vector Machine)Part I 支持向量机(Support Vector Machine)Part I 支持向量机(Support Vector Machine)Part I 现要求解满足条件的支持向量机,代码如下:


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

求解后获得

支持向量机(Support Vector Machine)Part I

支持向量机的标准形式包含的是一个二次的目标函数和线性的限制条件,是一个二次规划问题,可以通过二次规划求解。

等价的二次规划问题形式如下:

支持向量机(Support Vector Machine)Part I

支持向量机(Support Vector Machine)Part I

支持向量机(Support Vector Machine)Part I

其中,目标中:

支持向量机(Support Vector Machine)Part I

支持向量机(Support Vector Machine)Part I 支持向量机(Support Vector Machine)Part I 限制条件为:

支持向量机(Support Vector Machine)Part I 支持向量机(Support Vector Machine)Part I

支持向量机(Support Vector Machine)Part I

下面仍然用cvx来求解上面例子中问题的二次规划形式,同时,我们对 支持向量机(Support Vector Machine)Part I

进行一个非线性的变换:


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

求解得到:

支持向量机(Support Vector Machine)Part I

即:

正文到此结束
Loading...