支持向量机(一)——完全线性可分

     最初学习、理解支持向量机时,有点费劲,参考了一些不错的书籍和博客,这里推荐一下:

  1. http://blog.pluskid.org/?page_id=683
  2. https://www.cnblogs.com/pinard/p/6097604.html
  3. 李航老师的《统计学习方法》

1.支持向量机简介

       支持向量机(Support Vector Machine,SVM)是一种二类分器,只支持两种类别的分类,不过在一些场合下可以将多个SVM串联起来,达到多分类的目的,下面先从二维情况入手,说明一下SVM如何实现分类。

       观察下面这张XOY平面上的图

                                                                    

                                                                                                     图 1

       蓝色的数据点属于类A,绿色的数据点属于类B,中间有一条红色直线将两类数据点分隔开,那么在XOY平面上可以得到这条直线的方程w^{T}x+b=0,构建SVM模型的过程就是计算参数w,b、得到这条直线(针对二维的情况而言,多维情况下就是超平面)的过程。分类时,将待分类数据x_{0}代入到函数f(x)=w^{T}x+b中,若结果大于0则为类B,小于0则为类A

2.构建支持向量机

      2.1 支持向量

      从图1中就可以看到,能将类A、类B包含的数据点完全分开的直线实际上有无数条(如红色虚线)

                                                            

                                                                                             图 2

        那么SVM中需要的、要确定的是哪一条呢?SVM的分类方式是计算f(x_{0})=w^{T}x_{0}+b,如果结果为正/负,那么结果越大/小,我们就越相信为x_{0}点属于类B/A,这个概念理解起来比较直观(数学上的证明我也不了解),从几何上看,就是数据点离直线越远,我们越相信其分类的确定性。在图2中,如果直线靠近蓝色点、远离绿色点(直线L1),那么当我们将一个点分类为类A时,会觉得分类结果不那么靠谱,尤其是最靠近直线的数据点,其分类结果最值得怀疑,分类为类B的情况也是如此,如何处理这种情况?找一条直线,让其离类A、类B的点一样远,当然,肯定不是离训练集中所有的数据点一样远,而是离直线距离最近的点的距离,如果我们对这样的点的分类结果也有信心,那么对所有的点的分类结果就更有信心。在下文中,不加强调的话,所说的距离指的就是离直线距离最近的点的距离,具体到图3中就是点x_{1}和点x_{2}(针对直线L1)。

                                              

                                                                                                     图 3

        在图3中,当采用直线L1作为分类直线时,点x_{1}和点x_{2}离L1最近,当采用直线L2作为分类直线时,点x_{3}和点x_{4}离L2最近,由此可以看到,是训练集中的数据点决定了分类直线的位置,由于训练集中的数据是有限的,因此一定可以找到这样一条直线:

  • 到类A、类B距离相等
  • 在满足上面一条条件的直线中,到类A、类B距离最大

       构建SVM时需要的直线就是满足这样条件的一条直线,我们确定这样一条直线并不依靠训练集中的所有数据,而是离直线距离最近的点,这些点和原点间形成了一个个向量,称之为支持向量,建模完成后,需要存储的信息就是支持向量的信息。

2.2 寻找最优分类边界

       在2.1节中我们已经明白了SVM建模的目标,数据点代入函数  f(x)=w^{T}x+b的计算结果可以表示距离,这个距离称为函数距离,等倍数缩放参数wb时函数距离会改变,但是实际的分类边界超平面w^{T}x+b=0并不会变化,因此 “使函数距离最大化” 作为优化目标并不合适。我们可以采用几何距离,也即是数据点到分类超平面的距离,这里以3维空间中的平面为例,假设某一平面为

                                                                             w^{T}x+b=0

其中w=(a,b,c),为一向量,点P(x_{1},y_{1},z_{1})、 Q(x_{2},y_{2},z_{2})为该平面上的两点,则直线PQ所在向量为(x_{1}-x_{2},y_{1}-y_{2},z_{1}-z_{2}),可得

                               a(x_{1}-x_{2})+b(y_{1}-y_{2})+c(z_{1}-z_{2})=ax_{1}+by_{1}+cz_{1}-ax_{2}+by_{2}+cz_{2}=0

也即直线PQ上向量与w垂直,由于直线PQ是任意一条直线,因此w即为法向量

                                                            

      点x为待分类数据点,点x_{0}为点x在超平面上的投影点,它们之间的距离为\gamma,则可以得到以下等式

                                                                                x=x_{0}+\gamma \frac{w}{\left | \left | w \right | \right |}                                                         (1)

      由于点x_{0}在超平面上,因此w^{T}x_{0}+b=0,将上式代入,得到

                                                                         w^{T}(x-\gamma \frac{w}{\left \| w \right \|})+b=0

                                                                             \gamma=\frac{w^{T}x+b}{\left \| w \right \|}=\frac{f(x)}{\left \| w \right \|}                                                  (2)

       我们的目标就是是找到最大的 \gamma 。 实际上一个平面的法向量有两个方向,也就是说公式(1)、(2)中存在符号正负的问题,为了解决这个问题,可以采用如下方式:由于SVM是一个二分类模型,因此可以将满足f(x)>0的数据点的类别定为 1,满足f(x)<0的数据点的类别定为 -1,类别用 y 表示,然后计算 y\gamma 的值,这样就解决了正负的问题,因为\hat{\gamma }始终为正

                                                                                \hat{\gamma }=y\gamma =\frac{y(w^{T}x+b)}{\left \| w \right \|}                                            (3)

为什么要将类别 y 定为1、-1呢? 这还要从SVM建模的目标出发来理解,我们的目的是找到一个使几何距离最大的分类超平面,优化的目标是距离,类别 y 对优化结果是没有任何影响的,这从公式(2)就可以看出来,我们也可以不用类别 y、转而优化\hat{\gamma }^{2},结果是一样的,类别 y 取1、-1只是为了方便,当然也可以使类别 y 取2、-2,是一样的道理。

        经过以上的过程,寻找最优分类边界的目标就转化为了计算 \hat{\gamma } 的最大值,由于公式(3)中分子和分母项均可变,因此需要约束其中一项,由于w的原因,分子、分母是彼此制约的,约束\left \| w \right \|为某个值并不容易做到,而且容易做出错误的约束,因此一般约束y(w^{T}x+b)为某个固定的值,这里假设约束y(w^{T}x+b)=k,事实上支持向量上的数据点不能保证满足y(w^{T}x+b)=k,不过没关系,可以采用等倍数缩放参数wb的方式,保证y(w^{T}x+b)=k,超平面位置也不会变化,此时分母\left \| w \right \|也要乘以相应的系数,公式(3)变为以下形式

                                                                         \hat{\gamma }=\frac{y(w^{T}x+b)\times m}{\left \| w \right \|\times m}

式中 m为参数参数wb的缩放倍数,保证支持向量点满足y(w^{T}x+b)=k,这样分子就约束了,现在只需要优化\left \| w \right \|\times m以保证\hat{\gamma }最优,由于m为固定值,因此也只需要优化\left \| w \right \|.我们一般使 k取1,原因也是为了方便而已,不影响目标优化,这样一样最终的优化目标就是

                                                                    max \frac{1}{\left \| w \right \|},\: s.t. \: \: y_{i}(w^{T}x_{i}+b)\geq 1,i=1,...,n                            (4)

 

3.小结         

       第一篇的内容就先到这里,公式(4)的计算放到第二篇中说明。从本篇文章中,可以知道SVM建模的目标,以及如何将建模过程转变为几何与数值计算过程。                         

 

                

                                   

posted @ 2019-05-18 16:34  hgz_dm  阅读(345)  评论(0编辑  收藏  举报