支持向量机原理(一) 线性支持向量机

           支持向量机原理(一) 线性支持向量机html

    支持向量机原理(二) 线性支持向量机的软间隔最大化模型算法

    支持向量机原理(三)线性不可分支持向量机与核函数网络

    支持向量机原理(四)SMO算法原理机器学习

    支持向量机原理(五)线性支持回归函数

    支持向量机(Support Vecor Machine,如下简称SVM)虽然诞生只有短短的二十多年,可是自一诞生便因为它良好的分类性能席卷了机器学习领域,并紧紧压制了神经网络领域好多年。若是不考虑集成学习的算法,不考虑特定的训练数据集,在分类算法中的表现SVM说是排第一估计是没有什么异议的。post

    SVM是一个二元分类算法,线性分类和非线性分类都支持。通过演进,如今也能够支持多元分类,同时通过扩展,也能应用于回归问题。本系列文章就对SVM的原理作一个总结。本篇的重点是SVM用于线性分类时模型和损失函数优化的一个总结。性能

1. 回顾感知机模型

    在感知机原理小结中,咱们讲到了感知机的分类原理,感知机的模型就是尝试找到一条直线,可以把二元数据隔离开。放到三维空间或者更高维的空间,感知机的模型就是尝试找到一个超平面,可以把全部的二元类别隔离开。对于这个分离的超平面,咱们定义为$w^Tx + b = 0$,以下图。在超平面$w^Tx + b = 0$上方的咱们定义为$y=1$,在超平面$w^Tx + b = 0$下方的咱们定义为$y=-1$。能够看出知足这个条件的超平面并不止一个。那么咱们可能会尝试思考,这么多的能够分类的超平面,哪一个是最好的呢?或者说哪一个是泛化能力最强的呢?学习

 

    接着咱们看感知机模型的损失函数优化,它的思想是让全部误分类的点(定义为M)到超平面的距离和最小,即最小化下式:$$\sum\limits_{x_i \in M}- y^{(i)}(w^Tx^{(i)} +b)\big / ||w||_2$$优化

    当\(w和b\)成比例的增长,好比,当分子的\(w和b\)扩大N倍时,分母的L2范数也会扩大N倍。也就是说,分子和分母有固定的倍数关系。那么咱们能够固定分子或者分母为1,而后求另外一个即分子本身或者分母的倒数的最小化做为损失函数,这样能够简化咱们的损失函数。在感知机模型中,咱们采用的是保留分子,固定分母$||w||_2 = 1$,即最终感知机模型的损失函数为:$$\sum\limits_{x_i \in M}- y^{(i)}(w^Tx^{(i)} +b)$$htm

    若是咱们不是固定分母,改成固定分子,做为分类模型有没有改进呢?

    这些问题在咱们引入SVM后会详细解释。

2. 函数间隔与几何间隔

    在正式介绍SVM的模型和损失函数以前,咱们还须要先了解下函数间隔和几何间隔的知识。

    在分离超平面固定为$w^Tx + b = 0$的时候,$|w^Tx + b |$表示点x到超平面的相对距离。经过观察$w^Tx + b $和y是否同号,咱们判断分类是否正确,这些知识咱们在感知机模型里都有讲到。这里咱们引入函数间隔的概念,定义函数间隔$\gamma^{'}$为:$$\gamma^{'} = y(w^Tx + b)$$

    能够看到,它就是感知机模型里面的误分类点到超平面距离的分子。对于训练集中m个样本点对应的m个函数间隔的最小值,就是整个训练集的函数间隔。

    函数间隔并不能正常反应点到超平面的距离,在感知机模型里咱们也提到,当分子成比例的增加时,分母也是成倍增加。为了统一度量,咱们须要对法向量$w$加上约束条件,这样咱们就获得了几何间隔$\gamma$,定义为:$$\gamma = \frac{y(w^Tx + b)}{||w||_2} =  \frac{\gamma^{'}}{||w||_2}$$

    几何间隔才是点到超平面的真正距离,感知机模型里用到的距离就是几何距离。

3. 支持向量

    在感知机模型中,咱们能够找到多个能够分类的超平面将数据分开,而且优化时但愿全部的点都被准确分类。可是实际上离超平面很远的点已经被正确分类,它对超平面的位置没有影响。咱们最关心是那些离超平面很近的点,这些点很容易被误分类。若是咱们可让离超平面比较近的点尽量的远离超平面,最大化几何间隔,那么咱们的分类效果会更好一些。SVM的思想起源正起于此。

    以下图所示,分离超平面为$w^Tx + b = 0$,若是全部的样本不光能够被超平面分开,还和超平面保持必定的函数距离(下图函数距离为1),那么这样的分类超平面是比感知机的分类超平面优的。能够证实,这样的超平面只有一个。和超平面平行的保持必定的函数距离的这两个超平面对应的向量,咱们定义为支持向量,以下图虚线所示。

    

     支持向量到超平面的距离为$1/||w||_2$,两个支持向量之间的距离为$2/||w||_2$。

4. SVM模型目标函数与优化

    SVM的模型是让全部点到超平面的距离大于必定的距离,也就是全部的分类点要在各自类别的支持向量两边。用数学式子表示为:$$max \;\; \gamma = \frac{y(w^Tx + b)}{||w||_2}  \;\; s.t \;\; y_i(w^Tx_i + b) = \gamma^{'(i)} \geq \gamma^{'} (i =1,2,...m)$$

    通常咱们都取函数间隔$\gamma^{'}$为1,这样咱们的优化函数定义为:$$max \;\; \frac{1}{||w||_2}  \;\; s.t \;\; y_i(w^Tx_i + b)  \geq 1 (i =1,2,...m)$$

    也就是说,咱们要在约束条件$y_i(w^Tx_i + b)  \geq 1 (i =1,2,...m)$下,最大化$\frac{1)}{||w||_2}$。能够看出,这个感知机的优化方式不一样,感知机是固定分母优化分子,而SVM是固定分子优化分母,同时加上了支持向量的限制。

    因为$\frac{1}{||w||_2}$的最大化等同于$\frac{1}{2}||w||_2^2$的最小化。这样SVM的优化函数等价于:$$min \;\; \frac{1}{2}||w||_2^2  \;\; s.t \;\; y_i(w^Tx_i + b)  \geq 1 (i =1,2,...m)$$

    因为目标函数$\frac{1}{2}||w||_2^2$是凸函数,同时约束条件不等式是仿射的,根据凸优化理论,咱们能够经过拉格朗日函数将咱们的优化目标转化为无约束的优化函数,这和最大熵模型原理小结中讲到了目标函数的优化方法同样。具体的,优化函数转化为:$$L(w,b,\alpha) = \frac{1}{2}||w||_2^2 - \sum\limits_{i=1}^{m}\alpha_i[y_i(w^Tx_i + b) - 1] \; 知足\alpha_i \geq 0$$

    因为引入了朗格朗日乘子,咱们的优化目标变成:$$\underbrace{min}_{w,b}\; \underbrace{max}_{\alpha_i \geq 0} L(w,b,\alpha)$$

    和最大熵模型同样的,咱们的这个优化函数知足KKT条件,也就是说,咱们能够经过拉格朗日对偶将咱们的优化问题转化为等价的对偶问题来求解。若是对凸优化和拉格朗日对偶不熟悉,建议阅读鲍德的《凸优化》。

    也就是说,如今咱们要求的是:$$\underbrace{max}_{\alpha_i \geq 0} \;\underbrace{min}_{w,b}\;  L(w,b,\alpha)$$

    从上式中,咱们能够先求优化函数对于$w和b$的极小值。接着再求拉格朗日乘子$\alpha$的极大值。

    首先咱们来求$L(w,b,\alpha)$基于$w和b$的极小值,即$\underbrace{min}_{w,b}\;  L(w,b,\alpha)$。这个极值咱们能够经过对$w和b$分别求偏导数获得:$$\frac{\partial L}{\partial w} = 0 \;\Rightarrow w = \sum\limits_{i=1}^{m}\alpha_iy_ix_i $$ $$\frac{\partial L}{\partial b} = 0 \;\Rightarrow \sum\limits_{i=1}^{m}\alpha_iy_i = 0$$

     从上两式子能够看出,咱们已经求得了$w和\alpha$的关系,只要咱们后面接着可以求出优化函数极大化对应的$\alpha$,就能够求出咱们的$w$了,至于b,因为上两式已经没有b,因此最后的b能够有多个。

    好了,既然咱们已经求出$w和\alpha$的关系,就能够带入优化函数$L(w,b,\alpha)$消去$w$了。咱们定义:$$\psi(\alpha) = \underbrace{min}_{w,b}\;  L(w,b,\alpha)$$

    如今咱们来看将$w$替换为$\alpha$的表达式之后的优化函数$\psi(\alpha)$的表达式:

 $$ \begin{align} \psi(\alpha) & =  \frac{1}{2}||w||_2^2 - \sum\limits_{i=1}^{m}\alpha_i[y_i(w^Tx_i + b) - 1] \\& = \frac{1}{2}w^Tw-\sum\limits_{i=1}^{m}\alpha_iy_iw^Tx_i - \sum\limits_{i=1}^{m}\alpha_iy_ib + \sum\limits_{i=1}^{m}\alpha_i \\& = \frac{1}{2}w^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i -\sum\limits_{i=1}^{m}\alpha_iy_iw^Tx_i - \sum\limits_{i=1}^{m}\alpha_iy_ib + \sum\limits_{i=1}^{m}\alpha_i \\& = \frac{1}{2}w^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i - w^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i - \sum\limits_{i=1}^{m}\alpha_iy_ib + \sum\limits_{i=1}^{m}\alpha_i  \\& = - \frac{1}{2}w^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i - \sum\limits_{i=1}^{m}\alpha_iy_ib + \sum\limits_{i=1}^{m}\alpha_i  \\& = - \frac{1}{2}w^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i - b\sum\limits_{i=1}^{m}\alpha_iy_i + \sum\limits_{i=1}^{m}\alpha_i \\& = -\frac{1}{2}(\sum\limits_{i=1}^{m}\alpha_iy_ix_i)^T(\sum\limits_{i=1}^{m}\alpha_iy_ix_i) - b\sum\limits_{i=1}^{m}\alpha_iy_i + \sum\limits_{i=1}^{m}\alpha_i  \\& = -\frac{1}{2}\sum\limits_{i=1}^{m}\alpha_iy_ix_i^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i - b\sum\limits_{i=1}^{m}\alpha_iy_i + \sum\limits_{i=1}^{m}\alpha_i \\& = -\frac{1}{2}\sum\limits_{i=1}^{m}\alpha_iy_ix_i^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i + \sum\limits_{i=1}^{m}\alpha_i \\& = -\frac{1}{2}\sum\limits_{i=1,j=1}^{m}\alpha_iy_ix_i^T\alpha_jy_jx_j + \sum\limits_{i=1}^{m}\alpha_i \\& = \sum\limits_{i=1}^{m}\alpha_i  - \frac{1}{2}\sum\limits_{i=1,j=1}^{m}\alpha_i\alpha_jy_iy_jx_i^Tx_j  \end{align}$$

    其中,(1)式到(2)式用到了范数的定义$||w||_2^2 =w^Tw$, (2)式到(3)式用到了上面的$w = \sum\limits_{i=1}^{m}\alpha_iy_ix_i$, (3)式到(4)式把和样本无关的$w^T$提早,(4)式到(5)式合并了同类项,(5)式到(6)式把和样本无关的$b$提早,(6)式到(7)式继续用到$w = \sum\limits_{i=1}^{m}\alpha_iy_ix_i$,(7)式到(8)式用到了向量的转置。因为常量的转置是其自己,全部只有向量$x_i$被转置,(8)式到(9)式用到了上面的$\sum\limits_{i=1}^{m}\alpha_iy_i = 0$,(9)式到(10)式使用了$(a+b+c+…)(a+b+c+…)=aa+ab+ac+ba+bb+bc+…$的乘法运算法则,(10)式到(11)式仅仅是位置的调整。

    从上面能够看出,经过对$w,b$极小化之后,咱们的优化函数$\psi(\alpha)$仅仅只有$\alpha$向量作参数。只要咱们可以极大化$\psi(\alpha)$,就能够求出此时对应的$\alpha$,进而求出$w,b$.

    对$\psi(\alpha)$求极大化的数学表达式以下:$$ \underbrace{max}_{\alpha} -\frac{1}{2}\sum\limits_{i=1}^{m}\sum\limits_{j=1}^{m}\alpha_i\alpha_jy_iy_j(x_i \bullet x_j) + \sum\limits_{i=1}^{m} \alpha_i $$ $$s.t. \; \sum\limits_{i=1}^{m}\alpha_iy_i = 0 $$ $$ \alpha_i \geq 0  \; i=1,2,...m $$

    能够去掉负号,即为等价的极小化问题以下:

$$\underbrace{min}_{\alpha} \frac{1}{2}\sum\limits_{i=1}^{m}\sum\limits_{j=1}^{m}\alpha_i\alpha_jy_iy_j(x_i \bullet x_j) -  \sum\limits_{i=1}^{m} \alpha_i $$ $$s.t. \; \sum\limits_{i=1}^{m}\alpha_iy_i = 0 $$ $$ \alpha_i \geq 0  \; i=1,2,...m $$

     只要咱们能够求出上式极小化时对应的$\alpha$向量就能够求出$w和b$了。具体怎么极小化上式获得对应的$\alpha$,通常须要用到SMO算法,这个算法比较复杂,咱们后面会专门来说。在这里,咱们假设经过SMO算法,咱们获得了对应的$\alpha$的值$\alpha^{*}$。

    那么咱们根据$w = \sum\limits_{i=1}^{m}\alpha_iy_ix_i$,能够求出对应的$w$的值$$w^{*} = \sum\limits_{i=1}^{m}\alpha_i^{*}y_ix_i$$

    求b则稍微麻烦一点。注意到,对于任意支持向量$(x_x, y_s)$,都有$$y_s(w^Tx_s+b) = y_s(\sum\limits_{i=1}^{m}\alpha_iy_ix_i^Tx_s+b) = 1 $$

    假设咱们有S个支持向量,则对应咱们求出S个$b^{*}$,理论上这些$b^{*}$均可以做为最终的结果, 可是咱们通常采用一种更健壮的办法,即求出全部支持向量所对应的$b_s^{*}$,而后将其平均值做为最后的结果。注意到对于严格线性可分的SVM,$b$的值是有惟一解的,也就是这里求出的全部$b^{*}$都是同样的,这里咱们仍然这么写是为了和后面加入软间隔后的SVM的算法描述一致。

    怎么获得支持向量呢?根据KKT条件中的对偶互补条件$\alpha_{i}^{*}(y_i(w^Tx_i + b) - 1) = 0$,若是$\alpha_i>0$则有$y_i(w^Tx_i + b) =1$ 即点在支持向量上,不然若是$\alpha_i=0$则有$y_i(w^Tx_i + b) \geq 1$,即样本在支持向量上或者已经被正确分类。

5. 线性可分SVM的算法过程

    这里咱们对线性可分SVM的算法过程作一个总结。

    输入是线性可分的m个样本${(x_1,y_1), (x_2,y_2), ..., (x_m,y_m),}$,其中x为n维特征向量。y为二元输出,值为1,或者-1.

    输出是分离超平面的参数$w^{*}和b^{*}$和分类决策函数。

    算法过程以下:

    1)构造约束优化问题$$\underbrace{min}_{\alpha} \frac{1}{2}\sum\limits_{i=1}^{m}\sum\limits_{j=1}^{m}\alpha_i\alpha_jy_iy_j(x_i \bullet x_j) -  \sum\limits_{i=1}^{m} \alpha_i $$ $$s.t. \; \sum\limits_{i=1}^{m}\alpha_iy_i = 0 $$ $$ \alpha_i \geq 0  \; i=1,2,...m $$

    2)用SMO算法求出上式最小时对应的$\alpha$向量的值$\alpha^{*}$向量.

    3) 计算$w^{*} = \sum\limits_{i=1}^{m}\alpha_i^{*}y_ix_i$

    4) 找出全部的S个支持向量,即知足$\alpha_s > 0对应的样本(x_s,y_s)$,经过 $y_s(\sum\limits_{i=1}^{m}\alpha_iy_ix_i^Tx_s+b) = 1$,计算出每一个支持向量$(x_x, y_s)$对应的$b_s^{*}$,计算出这些$b_s^{*} = y_s - \sum\limits_{i=1}^{m}\alpha_iy_ix_i^Tx_s$. 全部的$b_s^{*}$对应的平均值即为最终的$b^{*} = \frac{1}{S}\sum\limits_{i=1}^{S}b_s^{*}$

     这样最终的分类超平面为:$w^{*} \bullet x + b^{*} = 0 $,最终的分类决策函数为:$f(x) = sign(w^{*} \bullet x + b^{*})$

    

    线性可分SVM的学习方法对于非线性的数据集是没有办法使用的, 有时候不能线性可分的缘由是线性数据集里面多了少许的异常点,因为这些异常点致使了数据集不能线性可分, 那么怎么能够处理这些异常点使数据集依然能够用线性可分的思想呢? 咱们在下一节的线性SVM的软间隔最大化里继续讲。

 

(欢迎转载,转载请注明出处。欢迎沟通交流: liujianping-ok@163.com)