zoukankan      html  css  js  c++  java
  • 支持向量机(一)——完全线性可分

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

    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 
ight | 
ight |}                                                         (1)

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

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

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

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

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

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

            经过以上的过程,寻找最优分类边界的目标就转化为了计算 hat{gamma } 的最大值,由于公式(3)中分子和分母项均可变,因此需要约束其中一项,由于w的原因,分子、分母是彼此制约的,约束left | w 
ight |为某个值并不容易做到,而且容易做出错误的约束,因此一般约束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 
ight |也要乘以相应的系数,公式(3)变为以下形式

                                                                             hat{gamma }=frac{y(w^{T}x+b)	imes m}{left | w 
ight |	imes m}

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

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

    3.小结         

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

                    

                                       

  • 相关阅读:
    Keil MDK5 硬件仿真之查看变量的值(内附变量值不随程序的运行而刷新的解决办法)
    15 Q点稳定的放大电路和基本共集放大电路
    13 H参数等效模型
    12 放大电路的分析方法
    文件处理
    基本数据类型及内置方法
    for循环及字符串操作
    while循环
    用户交互、运算符
    变量与基本数据类型
  • 原文地址:https://www.cnblogs.com/hgz-dm/p/10886202.html
Copyright © 2011-2022 走看看