机器学习算法(五):支持向量机

支持向量机试图寻找一个超平面将二类样本分开,所以他的学习器是一个超平面

$$y = w^{T}x+b$$

满足条件的超平面可能有很多,在所有满足条件的超平面,我们试图寻找一个不只能将两个类别分开,而且与该类最近样本点的间隔要尽量大,作为我们的目标超平面。

首先我们可以假设有下面两个平行的超平面

$$w^{T}x+b = 1$$

$$w^{T}x+b = -1$$

这两个平面的距离为 $\frac{2}{||w||}$,于是我们拿这样两个平面去分隔样本。如果同时满足训练点被上述连两个平面分开,并且两个平面的距离尽量大,可以得到得到下面的一个优化问题,其中这里把求最大换成了求最小。

$$\min\limits_{w,b}\frac{1}{2}||w||^2$$

$$s.t. y_{i}(w^{T}x_{i} +b) >= 1, i = 1,2,..., m.$$

要求解这个问题,通过拉格朗日乘子法,为每个约束添加拉格朗日乘子$\alpha_{i} >= 0$,再根据拉格朗日对偶性,将原问题变为一个极大极小问题,如下:

$$\max\limits_{\alpha}\min\limits_{w,b}\frac{1}{2}||w||^2 + \sum\limits_{i=1}^{m} \alpha_{i}(1 - y_{i}(w^{T}x_{i} + b))$$

通过对w和b求偏导为0先求上面的极小问题,可以把w,和b消去,于是得到极大问题如下:

$$\max\limits_{\alpha}\sum\limits_{i=1}^{m} \alpha_{i} - \frac{1}{2}\sum\limits_{i=1}^{m}\sum\limits_{j=1}^{m} \alpha_{i}\alpha_{j}y_{i}y_{j}x_{i}^{T}x_{j}$$

$$s.t. \sum\limits_{i=1}^{m}\alpha_{i}y_{i} = 0$$

同时根据对偶理论,因为原始问题是不等式约束,我们的拉格朗日乘子需要满足下面的KKT公式,即下面的三个条件

$$\alpha_{i} >= 0 $$
$$ y_{i}f(x_{i}) - 1 >= 0 $$
$$\alpha_{i} (y_{i}f(x_{i}) - 1) = 0 $$
如果$y_{i}f(x_{i})=1$,称这种向量为支持向量,根据上面的条件,其对应的$\alpha_{i}$为0. 若求解出$\alpha_{i}$,可以求出相应的w和b,其中
$w = \sum\limits_{i=1}^{m}\alpha_{i}y_{i}x_{i}$, b则可以通过支持向量代入等式$y_{i}f(x_{i})=1$算出。
 

求解支持向量机最优解

最经典的是SMO算法,这里只介绍这个算法的过程。SMO算法属于迭代算法,即每次增加一个训练样本,更新模型的参数向量$\alpha$
因为$\sum\limits_{i=1}^{m}\alpha_{i}y_{i} = 0$,所以每次可以更新两个参数。选取两个参数$\alpha_{i}$和$\alpha_{j}$作为变量,其他$\alpha$固定,求出此时最优的$\alpha_{i}$和$\alpha_{j}$的更新,依次迭代。
 
 
 
 
 
 
 
posted @ 2018-06-26 14:22  何振华Jeanva  阅读(171)  评论(2编辑  收藏