zoukankan      html  css  js  c++  java
  • SVC之SMO算法理解

    SMO算法论文链接:https://www.microsoft.com/en-us/research/publication/sequential-minimal-optimization-a-fast-algorithm-for-training-support-vector-machines/

    在SVC中,假设划分超平面f(x)为:

     我们的目标为找到一个这样的超平面f(x):对于正例y=1,有wtx+b>=1;对于反例y=-1,有wtx+b<=-1。并使得间隔最大化。

    其中,wtx+b=1或-1的样本为支持向量。

    间隔定义为:

     

     目标为最大化间隔,即最小化:minw,b ||w||2/2。条件为yi(wtxi+b)>=1.

    使用拉格朗日乘数法,转为为对偶问题:

    对w和b求导并设为0,得到:

     代入L中,得到目标为:

                     

    也即

                     ...................(1)

    约束条件为ai>=0及

     KKT条件为:

    注意到ai和yi(f(xi)-1)必有一个为0,当ai不为0时,才对L有影响,此时另一个为0,起作用的都是间隔边界处的支持向量,即解为稀疏性的

    下面进入到SMO算法细节,即如何更新这些ai

    其思路是:由于存在以下约束,每次选择2个变量ai和aj,固定其他变量,这样可以用ai表示aj,代入前面的(1)式子中求出ai,再求出aj

                                          ...........(2)

     当使用“软间隔”时,优化目标为:

     其中ξ为松弛变量,典型值取为0.001,表示样本偏离间隔多少依然算做正或反例,C为偏离造成损失的权重(线性0.05,RBF取1),C越大,样本处于间隔内造成的损失越大,无穷大时退回到原始“硬间隔”问题。

     转化为对偶问题,(1)式优化形式不变,约束从ai>=0变为0<=ai<=C。KKT条件(以下通过原始KKT条件和约束推导而来)可以描述为:

    可以看到, 我们在考虑一个样本是否违反KKT条件时,只有当ai=C时,才需要用到松弛变量。

    当我们选定了需要更新的2个ai和aj,因为约束(2)存在,则有:

                     ....................(3)

     因为y只取1和-1,则上式只有以下2种情况:即首先约束范围在一个矩形区域内,然后由上式约束在一条直线上。

     假设先更新a2,再更新a1。a2的定义域下界设为L,上界设为H,则有:

     设置以下2个中间变量:

     这里经过很长的一段推导(将(1)式转化为只含有a2,求出a2后,使用以上2个中间变量代入),可以得到a2的更新值为:

     记住,以上只针对η>0时成立(因为η为目标函数(1)式关于a2的二次项系数),再考虑到a2的定义域,a2的真实更新值可能需要截断:

     当η≤0时,目标函数要么为一次函数(η=0),要么为开口向下的二次函数,则最小值必在边界(L或H处)取得。此时比较L和H处的函数值即可知a2的更新值。论文给出以下结论:

    a1的更新由公式(3)确定(式(3)对于新、旧值都成立):

     注意上式中的a1,a2为没有更新前的旧值。

  • 相关阅读:
    AN BD FD DD CD UT CT TT IT ST UAT OP
    log4j
    重构代码
    with as sql的优化
    svn locked,并且无法clean up 的解决方法
    去掉Eclipse中没用的workspace
    getHibernateTemplate()的get方法
    Java反射
    windows 右键新建html文档
    fiddler 针对单个接口打断点
  • 原文地址:https://www.cnblogs.com/lunge-blog/p/11625110.html
Copyright © 2011-2022 走看看