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为没有更新前的旧值。

  • 相关阅读:
    27 Spring Cloud Feign整合Hystrix实现容错处理
    26 Spring Cloud使用Hystrix实现容错处理
    25 Spring Cloud Hystrix缓存与合并请求
    24 Spring Cloud Hystrix资源隔离策略(线程、信号量)
    23 Spring Cloud Hystrix(熔断器)介绍及使用
    22 Spring Cloud Feign的自定义配置及使用
    21 Spring Cloud使用Feign调用服务接口
    20 Spring Cloud Ribbon配置详解
    19 Spring Cloud Ribbon自定义负载均衡策略
    18 Spring Cloud Ribbon负载均衡策略介绍
  • 原文地址:https://www.cnblogs.com/lunge-blog/p/11625110.html
Copyright © 2011-2022 走看看