SVM 支持向量机(3) SMO算法小结

7 篇文章 0 订阅
4 篇文章 0 订阅

SMO算法 (Sequential Minimal Optimization)

基本原理: 优化目标函数 Ψ(α⃗ ) 时, 每一次迭代的时候固定其中的大部分乘子 (αi) , 只优化其中两个, 这样优化问题变成求解一个二次型最小值问题, 选择第一个乘子的时候并不是随机选择的, 而是选择违反KKT条件的乘子. 关于推导网上多资料比较多, 下面只给出算法和一些细节.

先给出KKT条件中的互补松驰条件

αi=0yig(x⃗ i)1(1)

0<αi<Cyig(x⃗ i)=1(2)

αi=Cyig(x⃗ i)1(yig(x⃗ i)=1ξi)(3)

g(x⃗ )=jαjK(x⃗ j,x⃗ )+b

注意到 1=yiyi , 把这个式子代入(1)~(3), 移项得KKT条件另一种形式

αi=0yiEi0(4)

0<αi<CyiEi=0(5)

αi=CyiEi0(6)

Ei=g(x⃗ i)yi

可以看出当 αi0 的时候, Ei 表示 g(x) xi 的预测值与真实值的误差.

现在进入算法, 可能有些简化

  1. 取初始值 α⃗ =0⃗  , 这里比较重要, 由KKT条件之互补松驰条件可知, αi=0 所对应的样本点都是在界内的, 在边界上的支持向量只占了很少一部分, 对于分类问题这意味着绝大部分 αi 是等于0的. 这样只需要找出少量的 αi 进行调整即可.

  2. 在一定精度 ε 内查找那些违反KKT条件的样本, 综合(4)~(5)就是

    αi<CbutyiEi<0ε

    αi>0butyiEi>0+ε

    其中优先选择 0<αi<C 样本点, 如果这些样本点都满足KKT条件, 则遍历整个样本, 是不是通常第一步都是要遍历样本的.

  3. 假设找到了第一个乘子 α1 , 现在选择 α2 , 为了使得 |E1E2| 比较大, E1 为正, 就取最小的 E2 所对应的 α2 , 若 E1 为负, 就取最大的 E2 所对应的 α2 , 即 max|E1E2| . 某些神奇的情况下??( Ei 都不知道等于几或者全为0??), 那就先遍历 0<αi<C 的样本点, 不行再遍历全部样本, 再不行重新选 αi .

    之后根据无约束求极值的方法可得(相关推导网上书上都有很多, 注意这里的 αold2 是凑出来的)

    αnew,unclipped2=αold2+y2(E1E2)η

    η=K11+K222K12s.t. η>0

    然后对 α2 裁剪, 让其满足不等式约束. 先计算边界值:

    L=max(0,αold2αold1),H=min(C,C+αold2αold1)if  y1y2

    L=max(0,αold2+αold1C),H=min(C,αold2+αold1)if  y1=y2

    之后更新 α2 :

    αnew2=Hαnew,unclipped2Lαnew,unclipped2>HLαnew,unclipped2Hαnew,unclipped2<L

    然后更新 α1 :
    αnew1=αold1+y1y2(αold2αnew2)

    这里要注意一下 η 恰好是目标函数 Ψ(α2) 的二阶导数, η>0 意味抛物线开口向上, 能取最小值, 这样就用上面的公式算, 如果 η=0 , 目标函数是条直线, η<0 开口向下, 这两种情况最小值都是在边界上取到, 要算一下左边和右边的 Ψ 值, 哪边的小就取哪边的 α1, α2 , 具体参见 Platt的论文.

  4. 用间隔边界上的样本更新阀值 b :

    bnew1=E1y1K11(αnew1αold1)y2K21(αnew2α2old)+bold

    bnew2=E2y1K12(αnew1αold1)y2K22(αnew2α2old)+bold

    如果 αi(i=1,2) 有一个在界内 (0<αi<C) , 则 bnew=bnewi , 否则取 bnew=(bnew1+bnew2)/2 (实际上这里取 bnew1 bnew2 之间的数都行).

  5. 更新下 Ei 值:

    Ei=SyiαiK(x⃗ i,x⃗ j)+bnewyi

    S 是支持向量的集合, 就是那些0<αiC所对应的样本点.

  6. 若所有样本满足KKT条件, 则停止迭代

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值