机器学习之支持向量机(Support Vector Machines)

支持向量机(Support Vector Machines, SVM)是一种二分类模型。其基本模型是定义在特征空间上的间隔最大化的线性分类器,通过引入核技巧的方式,可以实现非线性分类。支持向量机的学习策略就是间隔最大化。

间隔最大化的直观解释是:对训练数据集找到几何间隔最大的超平面意味着以充分大的确信度对训练数据进行分类。也就是说,不仅将正负实例分开,而且最难分的实例点(离超平面最近的点)也有足够大的确信度将他们分开。

下面我们就由简如繁地来认识一下支持向量机。

一、线性可分支持向量机

假设给定一个特征空间上的训练数据集

                                  D=\left \{ (x_1,y_1),(x_2,y_2),...,(x_m,y_m) \right \},{\ \ }y_i\epsilon \left \{ +1, -1 \right \}

假设该数据集是线性可分的。分类学习最基本的想法就是基于训练数据集D在特征空间(样本空间)上找到一个划分超平面,将不同类别的样本分开。划分超平面对应于方程w^Tx+b=0,它由法向量w=(w_1;w_2;...;w_d)和截距b决定,法向量决定的划分超平面的方向,二截距b则决定了超平面与原点的距离。

线性可分支持向量机利用间隔最大化求最优划分超平面。如上图,对于给定的数据集,可以找到很多的划分超平面,但不难看出图中重黑的超平面才是间隔最大化的划分超平面。

线性可分支持向量机的定义为:给定线性可分训练数据集,通过间隔最大化或等价地求解相应的凸二次规划问题学习得到的划分超平面为w^Tx+b=0,以及的相应的决策函数为f(x)=sign(w^Tx+b),称为线性可分支持向量机。

支持向量机的学习策略是间隔最大化。那么说的是什么间隔呢?

函数间隔与几何间隔

            

在上图中,A,B,C三点表示三个实例,均在划分超平面的正类一侧,A离划分超平面较远,如预测为正类,就比较确信预测是正确的;点C离距离超平面较近,如预测为正类就没有那么确信。一般来说,一个点离划分超平面的远近可以表示为分类预测的确信程度。在划分超平面w^Tx+b=0确定的情况下,|w^Tx+b| 能够相对地表示点x距离超平面的远近。而w^Tx+b的符号与类标记y是否相同能够表示分类是否正确。所以可以用y(w^Tx+b)来表示分类的正确性及确信度,这就是函数间隔的概念。

函数间隔的定义:对于给定的训练数据集D和超平面(w,b),定义超平面关于点(x_i,y_i)的函数间隔为

                                                      \hat{\gamma _i}=y_i(w^Tx_i+b)

定义超平面(w,b)关于训练数据集D的函数间隔为超平面(w,b)关于D中所有样本点(x_i,y_i)的函数间隔最小的值,即

                                                                  \hat{\gamma }=\underset{i=1,2,..,m}{min}\hat{\gamma }_i

函数间隔可以表示分类正确性与确信度,但是只要成比例地改变w和b,那么函数间隔也会以相同的比例改变,而划分超平面却没有改变。所以函数间隔不适用在间隔最大化中。所以我们对划分超平面的法向量w加某些条件,如规范化,使得间隔是确定的,这时函数间隔成为几何间隔(geometric margin)

几何间隔的定义:对于给定的训练数据集D和超平面(w,b),定义超平面关于点(x_i,y_i)的几何间隔为

                                                       \gamma _i=y_i(\frac{w}{||w||} \cdot x_i+ \frac{b}{||w||})

定义超平面(w,b)关于训练数据集D的几何间隔为超平面(w,b)关于D中所有样本点(x_i,y_i)的几何间隔最小的值,即

                                                       \gamma =\underset{i=1,2,...,m}{min}\gamma _i

由函数间隔和几何间隔的定义可知,他们有着如下的关系:

                                                       \gamma _i=\frac{\hat{\gamma _i}}{||w||}

                                                       \gamma =\frac{\hat{\gamma }}{||w||}

如果超平面的参数w和b成比例改变时,超平面不变,函数间隔按相同比例改变,而几何间隔不变。

间隔最大化

支持向量机学习的基本想法是求解能够正确划分训练数据集并且几何间隔最大的划分超平面。在线性可分支持向量机中的间隔最大化又称为硬间隔最大化。

间隔最大化的直观解释就是:对训练数据集找到几何间隔最大的超平面意味着以充分大的确信度对训练数据进行分类。也就是说,不仅将正负实例分开,而且对最难分的实例点(离超平面最近的点)也有足够大的确信度将他们分开。

求一个几何间隔最大的分离超平面,即最大间隔超平面。具体的,可以转化为下面的约束最优化问题:

                                                       \underset{w,b}{max} {\ \ \gamma }

                                                       s.t. {\ \ }y_i(\frac{w^Tx_i+b}{||w||})\geq \gamma {\ \ , \ \ i=1,2,...,m}

也就是希望最大化超平面(w,b)关于训练数据集D的几何间隔\gamma,约束条件的意思是超平面(w,b)关于每个训练样本的几何间隔都要大于或等于\gamma

由函数间隔与几何间隔的关系,可以将问题改写成

                                                       \underset{w,b}{max} {\ \ \frac{\hat{\gamma }}{||w||}}

                                                       s.t. {\ \ }y_i(w^Tx_i+b)\geq \hat{\gamma} {\ \ , \ \ i=1,2,...,m}

又因为函数间隔的取值不影响最优化问题,因为函数间隔的大小不影响几何间隔的大小,而我们的目的是几何间隔最大化。所以为方便计算令函数间隔\hat{\gamma }=1,并带入上式中,发现最大化\frac{1}{||w||}与最小化\frac {1}{2}||w||^2是等价的,于是优化问题可以转化成如下:

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

                                                       s.t. {\ \ }y_i(w^Tx_i+b)-1\geq 0 {\ \ , \ \ i=1,2,...,m}

这就是支持向量机(Support Vector Machines, SVM)的基本型。

支持向量与间隔边界

在线性可分的情况下,训练数据集的样本点中与划分超平面距离最近的样本点的实例称为支持向量(support vector),支持向量是使上述优化问题的约束条件中等号成立的点,即

                                                       y_i(w^Tx_i+b)-1 = 0

             

上图中,使用圆圈圈起来的点就是支持向量,而两个不同类别的支持向量到达划分超平面的距离之和为\frac{2}{||w||},称为间隔,而支持向量所在的超平面,也就是距离划分超平面的为\frac{1}{||w||}的两边的超平面称为间隔边界

在决定划分超平面时只有支持向量机起作用,而其他实例点并不起作用。支持向量的个数一般很少,所以支持向量机由很少“重要的”训练样本确定。

学习的对偶算法

对于上面我们的优化问题(几何间隔最大):

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

                                                       s.t. {\ \ }y_i(w^Tx_i+b)-1\geq 0 {\ \ , \ \ i=1,2,...,m}

是一个凸二次优化问题,可以直接使用现成的优化计算包来计算。但却可以使用更加高效的方法:应用拉格朗日对偶性,通过求解对偶问题得到原始问题的最优解。

转化为对偶问题的优点:

  1. 对偶问题往往更容易求解
  2. 自然的引入核函数,进而推广到非线性分类问题。

首先,构建拉格朗日函数(Lagrange function)。也就是对每一个约束条件不等式引进拉格朗日乘子

                                                        \alpha _i\geq 0,\ \ i=1,2,...,m

则该优化问题的拉格朗日函数为(不等式两边:减去大于号那边,加上小于号那边)

                                                        L(w,b,\alpha )=\frac{1}{2}||w||^2-\sum_{i=1}^{m}\alpha _iy_i(w^Tx_i+b)+\sum_{i=1}^{m}\alpha _i

其中\alpha=(\alpha _1,\alpha _2,...,\alpha _m)^T为拉格朗日乘子向量。

根据拉格朗日对偶性,原始问题的对偶问题是极大极小问题:

                                                        \underset{\alpha }{max} \ \underset{w,b}{min} {\ L(w,b,\alpha )}

所以,为了得到问题的解,需要先求L(w,b,\alpha )对w,b的极小,再求对\alpha的极大。

(1)求L(w,b,\alpha )对w,b的极小

因为极小值的导数为0,所以我们一般在求解极小值时,先求导,再令导数为0。即将拉格朗日函数L(w,b,\alpha )分别对w,b求偏导数并令其等于0。

由 \frac{\partial x^TA}{\partial x}=A得,

                 \frac{\partial L(w,b,\alpha )}{\partial w}=\frac{\partial (\frac{1}{2}||w||^2-\sum_{i=1}^{m}\alpha _iy_i(w^Tx_i+b)+\sum_{i=1}^{m}\alpha _i)}{\partial w}=w-\sum_{i=1}^{m}\alpha _iy_ix_i

                 \frac{\partial L(w,b,\alpha )}{\partial b}=\frac{\partial (\frac{1}{2}||w||^2-\sum_{i=1}^{m}\alpha _iy_i(w^Tx_i+b)+\sum_{i=1}^{m}\alpha _i)}{\partial b}=-\sum _{i=1}^{m}\alpha _iy_i

所以,令导数为0有:

                w-\sum_{i=1}^{m}\alpha _iy_ix_i=0\ \ ===>{\ \ w=\sum_{i=1}^{m}\alpha _iy_ix_i}

                -\sum _{i=1}^{m}\alpha _iy_i=0 {\ \ }===> {\ \ }\sum _{i=1}^{m}\alpha _iy_i=0

将上面对w,b求导并令其为0得到的结果带回L(w,b,\alpha ),即可得到第一的极小值,结果为:

                L(w,b,\alpha )=\frac{1}{2}||w||^2-\sum_{i=1}^{m}\alpha _iy_i(w^Tx_i+b)+\sum_{i=1}^{m}\alpha _i

                L(w,b,\alpha )=\frac{1}{2}w^Tw-\sum_{i=1}^{m}\alpha _iy_iw^Tx_i-\sum_{i=1}^{m}\alpha _iy_ib+\sum_{i=1}^{m}\alpha _i

                L(w,b,\alpha )=\frac{1}{2}w^T\sum_{i=1}^{m}\alpha _iy_ix_i-\sum_{i=1}^{m}\alpha _iy_iw^Tx_i-\sum_{i=1}^{m}\alpha _iy_ib+\sum_{i=1}^{m}\alpha _i

               L(w,b,\alpha )=-\frac{1}{2}w^T\sum_{i=1}^{m}\alpha _iy_ix_i-b\sum_{i=1}^{m}\alpha _iy_i+\sum_{i=1}^{m}\alpha _i

               L(w,b,\alpha )=-\frac{1}{2}(\sum_{i=1}^{m}\alpha _iy_ix_i)^T\sum_{i=1}^{m}\alpha _iy_ix_i-b\sum_{i=1}^{m}\alpha _iy_i+\sum_{i=1}^{m}\alpha _i

              注:因为\alpha _iy_i都是实数,不是向量,所以其转置运算结果为自身。

              L(w,b,\alpha )=-\frac{1}{2}\sum_{i=1}^{m}\alpha _iy_ix_i^T\sum_{i=1}^{m}\alpha _iy_ix_i-b\sum_{i=1}^{m}\alpha _iy_i+\sum_{i=1}^{m}\alpha _i

             L(w,b,\alpha )=-\frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m}\alpha _i\alpha _jy_iy_jx_i^Tx_j-b\sum_{i=1}^{m}\alpha _iy_i+\sum_{i=1}^{m}\alpha _i

因为\sum _{i=1}^{m}\alpha _iy_i=0,所以

            \underset{w,b}{min}\ L(w,b,\alpha )=-\frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m}\alpha _i\alpha _jy_iy_jx_i^Tx_j+\sum_{i=1}^{m}\alpha _i

(2)求\underset{w,b}{min}\ L(w,b,\alpha )\alpha的极大,即是对偶问题

                                     \underset{\alpha }{max} {\ }-\frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m}\alpha _i\alpha _jy_iy_jx_i^Tx_j+\sum_{i=1}^{m}\alpha _i

                                    s.t. {\ \ }\sum _{i=1}^{m}\alpha _iy_i=0

                                    \alpha _i\geq 0,{\ \ }i=1,2,...,m

也就是如下的求最小问题(人们习惯于求解最小问题):

                                    \underset{\alpha }{min} {\ }\frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m}\alpha _i\alpha _jy_iy_jx_i^Tx_j-\sum_{i=1}^{m}\alpha _i

                                    s.t. {\ \ }\sum _{i=1}^{m}\alpha _iy_i=0

                                    \alpha _i\geq 0,{\ \ }i=1,2,...,m

解出\alpha后,求出w,b即可得到分类模型:

                                   f(x)=sign(w^*^Tx+b^*)

其中w^*,b^*为解,w^*表达式如下:

                                  w^*=\sum _{i=1}^{m}\alpha _i^*y_ix_i

那么b^*如何求解呢?因为任意支持向量(x_s;y_s)都有y_s(w^*^Tx_s+b)=1,即

                                  y_s(\sum _{i\epsilon S}\alpha _i^*y_ix_i^Tx_s+b)=1

其中S=\left \{ i|\alpha _i> 0,i=1,2,...,m \right \}为所有支持向量的下标。可以选择支持向量并通过求解上式得到,但现实任务中常采用一种更鲁棒的做法:使用所有支持向量求解平均值

                                  b^*=\frac{1}{|S|}\sum _{s\epsilon S}(y_s-\sum _{i\epsilon S=1}\alpha _i^*y_i(x_i^Tx_s))

那么划分超平面可以表示为:

                                  \sum _{i=1}^{m}\alpha _i^*y_i(x_i^Tx)+b^*=0

从对偶问题解出的\alpha _i是拉格朗日乘子,其恰恰对应着样本点(x_i;y_i)。注意到原问题的约束条件:

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

                                  s.t. {\ \ }y_i(w^Tx_i+b)-1\geq 0 {\ \ , \ \ i=1,2,...,m}

中有不等式约束,所以上面的对偶方法过程需要满足KKT(Karush-Kuhn-Tucher)条件,即

                                  \alpha _i\geq 0

                                  y_i(w^Tx_i+b)-1\geq 0

                                  \alpha _i(y_i(w^Tx_i+b)-1)= 0

综上所述,对于给定的线性可分训练数据集,可以首先求对偶问题的解\alpha ^*,在求得w^*,b^*,从而得到划分超平面及分类决策函数。这种方法称为线性可分支持向量机的对偶学习算法,是线性可分支持向量机的基本学习方法。

在线性可分支持向量机中,由

                                  w^*=\sum _{i=1}^{m}\alpha _i^*y_ix_i

                                  b^*=\frac{1}{|S|}\sum _{s\epsilon S}(y_s-\sum _{i\epsilon S=1}\alpha _i^*y_i(x_i^Tx_s))

两式可知,w^*,b^*只依赖于训练数据中对应\alpha _i^*> 0的样本点(x_i;y_i),而其他样本点对w^*,b^*没有影响,所以训练数据集中\alpha _i^*> 0对应的样本点(x_i;y_i)为支持向量,即这些样本点在间隔边界上。

二、线性支持向量机

在上一小结的线性可分支持向量机中,我们假设给定的训练数据集是线性可分的,但往往很多数据是线性不可分的,此时,上面的线性可分支持向量的约束条件将不能满足。那么,如何才能够将它扩充到线性不可分的问题呢?这就需要修改硬间隔最大化,使其成为软件个最大化。

      

如上图,红色圈圈起来的点即为一些不满足约束条件:

                                  y_i(w^Tx_i+b)-1\geq 0 {\ \ , \ \ i=1,2,...,m}

的点,即这些点(x_i;y_i)不能满足函数间隔大于等于1的约束条件。为了解决这个问题,可以对每个样本点(x_i;y_i)引进一个松弛变量\xi _i\geq 0,使得函数间隔加上松弛变量后大于等于1.如此,则约束条件变为:

                                  y_i(w^Tx_i+b)\geq 1-\xi _i

同时,我们对每个松弛变量\xi_i,支付一个代价\xi _i。那么目标函数由原来的\frac{1}{2}||w||^2变成

                                 L = \frac{1}{2}||w||^2+C\sum _{i=1}^{m}\xi _i

其中C>0为惩罚参数,一般由应用问题决定,C值大时对误分类的惩罚增大,C值小时对误分类的惩罚减小,即对于同一个样本点(x_i;y_i)的松弛变量\xi _i,C值越大则目标函数(损失函数)的值越大,C值越小则目标函数的值越小。对于该最小化目标函数,包含两层含义:

  1. 使得\frac{1}{2}||w||^2尽量小,即间隔尽量大
  2. 使误分类点的个数尽量小,C为这两者的调和。

此时,我们可以像考虑线性可分支持向量机一样考虑线性支持向量机,相应的硬间隔最大化,称为软间隔最大化。

那么,我们的原始优化(学习)问题(硬间隔最大化):

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

                                                       s.t. {\ \ }y_i(w^Tx_i+b)-1\geq 0 {\ \ , \ \ i=1,2,...,m}

变成了软间隔最大化问题:

                                                       \underset{w,b,\xi }{min}\ \ \frac{1}{2}||w||^2+C\sum_{i=1}^{m}\xi _i

                                                       s.t. {\ \ }y_i(w^Tx_i+b)\geq 1 -\xi _i{\ \ , \ \ i=1,2,...,m}

                                                               \xi _i\geq 0,{\ \ }i=1,2,...,m

学习的对偶算法

对于硬间隔最大化的原始问题的对偶问题为:

                                    \underset{\alpha }{min} {\ }\frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m}\alpha _i\alpha _jy_iy_jx_i^Tx_j-\sum_{i=1}^{m}\alpha _i

                                    s.t. {\ \ }\sum _{i=1}^{m}\alpha _iy_i=0

                                            \alpha _i\geq 0,{\ \ }i=1,2,...,m

那么对于软间隔最大化的原始问题的对偶问题呢?其拉格朗日函数为:

                        L(w,b,\xi ,\alpha ,\mu )=\frac{1}{2}||w||^2+C\sum _{i=1}^{m}\xi _i-\sum _{i=1}^{m}\alpha _i(y_i(w^Tx_i+b)-1+\xi _i)-\sum _{i=1}^{m}\mu _i\xi _i

(1) 求L(w,b,\xi ,\alpha ,\mu )w,b,\xi的极小

w,b,\xi求导并令导数为0得

                                    \frac{\partial L(w,b,\xi ,\alpha ,\mu )}{\partial w}=w-\sum _{i=1}^{m}\alpha _iy_ix_i=0

                                    \frac{\partial L(w,b,\xi ,\alpha ,\mu )}{\partial b}=-\sum _{i=1}^{m}\alpha _iy_i=0

                                   \frac{\partial L(w,b,\xi ,\alpha ,\mu )}{\partial \xi _i}=C-\alpha _i-\mu_i=0

可以得到

                                    w=\sum _{i=1}^{m}\alpha _iy_ix_i

                                    \sum _{i=1}^{m}\alpha _iy_i=0

                                   C-\alpha _i-\mu_i=0

把上述结果带入L(w,b,\xi ,\alpha ,\mu )得到

                                  \underset{w,b,\xi}{min}{\ }L(w,b,\xi ,\alpha ,\mu )=-\frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m\alpha _i\alpha _jy_iy_jx_i^Tx_j+\sum_{i=1}^m\alpha _i

(2)求\underset{w,b,\xi}{min}{\ }L(w,b,\xi ,\alpha ,\mu )\alpha的极大并变号转成求极小,即得对偶问题

                              \underset{\alpha }{min}{\ \ }\frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m\alpha _i\alpha _jy_iy_jx_i^Tx_j-\sum_{i=1}^m\alpha _i

                              s.t. {\ \ \ }\sum _{i=1}^m\alpha _iy_i=0

                                         C-\alpha _i-\mu _i=0

                                         \alpha _i\geq 0

                                         \mu _i\geq 0 ,{\ \ }i=1,2,...,m

由约束条件可知\mu _i=C-\alpha _i,所以优化问题转化成

                              \underset{\alpha }{min}{\ \ }\frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m\alpha _i\alpha _jy_iy_jx_i^Tx_j-\sum_{i=1}^m\alpha _i

                              s.t. {\ \ \ }\sum _{i=1}^m\alpha _iy_i=0

                                         0\leq \alpha _i\leq C,{\ \ }i=1,2,...,m

支持向量

由前面我们知道\alpha ^*=(\alpha _1^*,\alpha _2^*,...,\alpha _m^*)^T中的对应于\alpha _i^*> 0的样本点(x_i;y_i)的实例x_i称为支持向量(软间隔的支持向量)。

上图中,划分超平面有实线给出,间隔边界由虚线表示,圆表示正,打叉表示负。软间隔的支持向量x_i或者在间隔边界上,或者在间隔边界与划分超平面之间,或者在划分超平面的另一侧。

\alpha _i(y_if(x_i)-1+\xi _i)=0可知,总有\alpha _i=0或者y_if(x_i)=1-\xi _i,当\alpha _i=0时,该样本点不会对f(x)有任何影响。

  1. \alpha _i^*<C,则\xi _i=0,支持向量x_i恰好落在间隔边界上;
  2. \alpha _i^*=C,0<\xi _i<1,则分类正确,支持向量x_i在间隔边界与划分超平面之间;
  3. \alpha _i^*=C,\xi _i=1,则支持向量x_i在划分超平面上;
  4. \alpha _i^*=C,\xi _i> 1,则支持向量x_i在划分超平面误分一侧。

三、非线性支持向量机

对解线性分类问题,线性分类支持向量机一种非常高效的方法。但是,又是分类问题是非线性的,这时可以使用非线性支持向量机。其主要特点是利用核技巧,把低维特征映射到到高维空间上,使得映射后在高维空间可以进行线性分类。

核技巧

用线性分类方法求解非线性分类问题分为两步:

  1. 首先使用一个变换将原空间的数据映射到新空间;
  2. 然后在新空间里用线性分类学习方法从训练数据中学习分类模型。

而核技巧就是属于这样的方法。下面来看个例子:

上图中左边图,无法使用直线(线性模型)将正负实例正确分开,却可以用一条椭圆曲线(非线性模型)将他们正确分开。而通过变换,把左图中椭圆换成右边的直线,将非线性分类问题转换成线性分类问题。

在支持向量机中应用核技巧,其基本想法就是通过一个非线性变换将输入空间对应于特征空间,使得在输入空间中的超曲面模型对应特征空间中的超平面模型,这样,分类问题的的学习任务通过在特征空间中求解线性支持向量机就可以完成。

核函数 

假设这样的函数:

                            K(x_i,x_j)=\left \langle \phi (x_i) ,\phi (x_j)\right \rangle =\phi (x_i)^T\phi (x_j)

x_ix_j在特征空间的内积等于他们在原始样本空间中通过K(\cdot ,\cdot )计算的结果。这样的K(\cdot ,\cdot )称为核函数(kernel function).其中\phi (x_i,x_j)为映射函数,\phi (x_i)^T\phi (x_j)与内积等同。

则原始的优化问题,我们可以将原优化问题(线性支持向量机)重写为如下:

                              \underset{\alpha }{min}{\ \ }\frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m\alpha _i\alpha _jy_iy_jK(x_i,x_j)-\sum_{i=1}^m\alpha _i

                              s.t. {\ \ \ }\sum _{i=1}^m\alpha _iy_i=0

                                         0\leq \alpha _i\leq C,{\ \ }i=1,2,...,m

四、序列最小最优化算法(SMO)

五、总结

六、参考 

1、《机器学习》 周志华 ---- 西瓜书

2、《统计学习方法》李航

3、《机器学习实战》李锐  译

猜你喜欢

转载自blog.csdn.net/perfect1t/article/details/83187057