zoukankan      html  css  js  c++  java
  • SVM支持向量机算法

        支持向量机(SVM)是另一类的学习系统,其众多的优点使得他成为最流行的算法之一。其不仅有扎实的理论基础,而且在许多应用领域比大多数其他算法更准确。

     1、线性支持向量机:可分情况

    根据公式(1)<w.x>+b=0,我们知道,w定义了垂直于超平面的方向 ,如上图,w被成为超平面的法向量,不改变法向量,可以通过变化b来平移超平面。

      因为支持向量机要最大化整理正例和负例的距离,我们找到这个距离2/||W||;支持向量机寻找具有最大边距的分割平面,也就是被称为最大边距超平面,把该平面做为最终的决策平面;

      上图 中,H是分类面,H1和H2是平行于H,且过离H最近的两类样本的直线,H1与H,H2与H之间的距离就是几何间隔。几何间隔与样本的误分次数间存在关系:

    其中的δ是样本集合到分类面的间隔,,即R是所有样本中向量长度最长的值。从上式可以看出,误分次数的上界由几何间隔决定。因此选择几何间隔来作为评价一个解优劣的指标,几何间隔越大的解,它的误差上界越小。因此最大化几何间隔成了我们训练阶段的目标。

     从d=|<w.xs>+b-1|/||w||=1/||W||式可知,几何间隔与||w||是成反比的,因此最大化几何间隔与最小化||w||等价。通常不是固定||w||的大小而寻求最大几何间隔,而是固定间隔(例如固定为1),寻找最小的||w||。

     此时变成一个最优化问题,若想寻找一个小||w||,就可以用下面的式子表示:

     

    但实际上对于这个目标,常常使用另一个完全等价的目标函数来代替,如下:

     

    如果直接来解这个求最小值问题,很容易看出当||w||=0的时候就得到了目标函数的最小值。反映在图2中,就是H1与H2两条直线间的距离无限大,这个时候,所有的样本点都位于H1和H2中间,而我们原本的意图是,H1右侧的被分为正类,H2左侧的被分为负类,位于两类中间的样本则拒绝分类。这样,所有样本点都进入了无法分类的灰色地带。造成这种结果的原因是在描述问题的时候只考虑了目标,而没有加入约束条件,于是可以添加约束条件:

     (n是总的样本数)

     

    于是可以将两类分类转化成数学形式,如下:

      

     在这个问题中,自变量就是w,而目标函数是w的二次函数,所有的约束条件都是w的线性函数,这种规划问题就是二次规划(Quadratic Programming,QP),由于它的可行域是一个凸集,因此它是一个凸二次规划。

          样本确定了w,用数学的语言描述,就是w可以表示为样本的某种组合:

                           

     式子中的是拉格朗日乘子,而是样本点,也是向量,n就是总样本点的个数。为了方便描述,以下开始严格区别数字与向量的乘积和向量间的乘积,我会用aw表示数字和向量的乘积,而用<w.x>表示向量的内积。因此公式(1)严格的形式应该是:

      

    w不仅跟样本点的位置有关,还跟样本的类别有关。因此用下面这个式子表示w:

     

     其中的ai就是第i个样本的标签,它等于1或者-1。其实以上式子的拉格朗日乘子中,只有很少的一部分不等于0,这部分不等于0的拉格朗日乘子后面所乘的样本点,其实都落在和上,也正是这部分样本唯一的确定了分类函数。这部分可以确定分类的样本点,就叫做支持向量。因此原来的g(x)表达式可以写为:

                 ,

     

       其中,

     

    上式可以变形为:

     

      此时消去了上式中的,问题从求变成了求。这样就简化了原问题的求解,以这样的形式描述问题以后,优化问题少了很大一部分不等式约束。

     SVM中的核函数

    根据模式识别理论,低维空间线性不可分的模式通过非线性映射到高维特征空间则可能实现线性可分,但是如果直接采用这种技术在高维空间进行分类或回归,则存在确定非线性映射函数的形式和参数、特征空间维数等问题,而最大的障碍则是在高维特征空间运算时存在的“维数灾难”。采用核函数技术可以有效地解决这样问题。

    如图3所示,当分类问题在低纬空间无法用线性分类方法解决时,可以通过将低纬空间的数据映射到高纬特征空间中,从而达到线性可分的目的。

     

    图3 低纬度向高纬度空间映射

    从低纬度向高纬度转化关键在于寻在一个函数,但对目前没有一个系统的方法。对映射过程推导如下:

       

    从上式可以得出,我们只关心高维空间里内积的值,而核函数就是接受低空间的输入,并计算出在高纬空间的内积值。,就是我们要找的核函数。如图4

     

    图4 在映射过程中的核函数

    于是上式,可以表示为。尽管给的问题是线性不可分的,但凡是要求内积的时候我们就选定的核函数来算。这样求出来的α再和你选定的核函数一组合,就可以得到线性分类器。但是任然存在以下两个问题:

    1.既然有很多的核函数,针对具体问题该怎么选择?

    2.如果使用核函数向高维空间映射后,问题仍然是线性不可分的,那怎么办?

    第一个问题:对核函数的选择,现在还缺乏指导原则!各种实验的观察结果的确表明,某些问题用某些核函数效果很好,用另一些就很差,但是一般来讲,径向基核函数是不会出太大偏差的一种,首选。

      对第二个问题的解决用了SVM中的另一个概念:松弛变量。

  • 相关阅读:
    程序员通过什么渠道接外包项目
    中小型软件项目开发一般流程建议
    DevExpress GridControl功能总结
    页面UI注意事项,你在乎吗?
    加密,解密
    本地化(国际化)
    AutoLayout(自动布局)
    UItableView与UICollectionView
    分享iOS开发常用(三方类库,工具,高仿APP,实用网站,技术干货)
    NSPredicate
  • 原文地址:https://www.cnblogs.com/sumuncle/p/5614079.html
Copyright © 2011-2022 走看看