【学习笔记】SVM算法-松弛变量和最优化条件
2015-02-27 12:10
639 查看
关于支持向量机,大神July在《理解SVM的三层境界》中已经做了非常详细的讲解。博客链接如下:
http://blog.csdn.net/v_july_v/article/details/7624837
在这篇文章其实是一遍学习笔记,我将基于S.S.Keerthi等人的文章《Improvements to Platt’s SMO Algorithm for SVM Classifier Design》,给出含有松弛变量SVM的具体推导过程以及最优化条件。
min12||w||2s.t.yi(w⋅zi−b)≥1∀i=1,...,n
这里我们需要最大化超平面的距离2||w||,等价于最小化12||w||2. 其中yi∈{−1,1}表示点zi处于超平面的哪一边。
很多情况下我们无法构造能将数据分割的超平面。或者为了整体更好的结果,我们并不需要属于同一标签的点都严格处在超平面的同一边。此时我们就需要引入松弛变量ξi(≥0),它对应数据点zi允许偏离的functional margin量。如果ξi可以任意大的话,那么任何超平面都会符合条件。所以我们需要把ξi加入到目标函数中。
min12||w||2+C∑i=1nξis.t.yi(w⋅zi−b)≥1−ξi∀i=1,...,nξi≥0∀i=1,...,n
这个问题的Lagrangian函数是
L=12||w||2+C∑iξi+∑iαi[1−ξi−yi(w⋅zi−b)]−∑iπiξi
其中αi和πi是对应的Lagrangian算子,满足的KKT最优化条件是
▽wL=w−∑iαiyizi=0∂L∂b=∑iαiyi=0∂L∂ξi=C−αi−πi=0αi≥0αi[1−ξi−yi(w⋅zi−b)]=0πi≥0πiξi=0
我们定义w(α)=∑iαiyizi,通过把KKT条件带入目标函数我们可以得到
W(α)=12||w||2+C∑iξi+∑iαi[1−ξi−yi(w⋅zi−b)]−∑iπiξi=12w(α)⋅w(α)+∑i(C−αi−πi)ξi+∑iαi−∑iαiyiziw+∑iαiyib=12w(α)⋅w(α)+∑iαi−w(α)⋅w(α)=∑iαi−12w(α)⋅w(α)
根据Wolfe duality theory,αi可以通过对以下对偶问题求解得到
maxW(α)=∑iαi−12w(α)⋅w(α)s.t.0≤αi≤C,∑iαiyi=0
一旦αi得到,其他变量w,b,ξ和π都可以由之前的KKT条件计算得到。
L¯=12w(α)⋅w(α)−∑iαi−∑iδiαi+∑iμi(αi−C)−β∑iαiyi
我们定义
Fi=w(α)⋅zi−yi=∑jαjyjzj⋅zi−yi=∑jαjyjk(xi,xj)−yi
KKT条件为
∂L¯∂αi=w(α)yizi−1−δi+μi−βyi=[w(α)zi−β]⋅yi−y2i−δi+μi=[w(α)zi−yi−β]⋅yi−δi+μi=(Fi−β)⋅yi−δi+μi=0δi≥0δiαi=0μi≥0μi(αi−C)=0
这些条件可以总结成以下三种情况:
Case 1. αi=0
δi≥0,μi=0⇒(Fi−β)yi≥0
Case 2. 0<αi<C
δi=0,μi=0⇒(Fi−β)yi=0
Case 3. αi=C
δi=0,μi≥0⇒(Fi−β)yi≤0
我们定义以下几个指标集合I0={i:0<αi<C},I1={i:yi=1,αi=0},I2={i:yi=−1,αi=C},I3={yi=1,αi=C},I4={i:yi=−1,αi=0}。这些指标集的设置都取决于α的值。运用这些指标集,我们可以将上面三种情况重写成
β≤Fi∀i∈I0∪I1∪I2;β≥Fi∀i∈I0∪I3∪I4
定义
bup=min{Fi:i∈I0∪I1∪I2}blow=max{Fi:i∈I0∪I3∪I4}
由此我们可以得到最优化条件是
blow≤bup
从反面来说就是对所有指标对(i,j),下面的冲突情况不会出现:
i∈I0∪I3∪I4,j∈I0∪I1∪I2andFi>Fji∈I0∪I1∪I2,j∈I0∪I3∪I4andFi<Fj
但是在编程解决时,我们不可能精确到达最优,所以我们需要定义近似最优化条件。之前的最优化条件可以改写为
blow≤bup+2τ
冲突情况可以改写为
i∈I0∪I3∪I4,j∈I0∪I1∪I2andFi>Fj+2τi∈I0∪I1∪I2,j∈I0∪I3∪I4andFi<Fj−2τ
最后我们将最优化条件写为存在β使得:
(Fi−β)yi≥−τ,ifαi=0|(Fi−β)|≤τ,if0<αi<C(Fi−β)yi≤τ,ifαi=C
http://blog.csdn.net/v_july_v/article/details/7624837
在这篇文章其实是一遍学习笔记,我将基于S.S.Keerthi等人的文章《Improvements to Platt’s SMO Algorithm for SVM Classifier Design》,给出含有松弛变量SVM的具体推导过程以及最优化条件。
含有松弛变量的SVM模型
首先我们先回顾一下原始的SVM优化问题min12||w||2s.t.yi(w⋅zi−b)≥1∀i=1,...,n
这里我们需要最大化超平面的距离2||w||,等价于最小化12||w||2. 其中yi∈{−1,1}表示点zi处于超平面的哪一边。
很多情况下我们无法构造能将数据分割的超平面。或者为了整体更好的结果,我们并不需要属于同一标签的点都严格处在超平面的同一边。此时我们就需要引入松弛变量ξi(≥0),它对应数据点zi允许偏离的functional margin量。如果ξi可以任意大的话,那么任何超平面都会符合条件。所以我们需要把ξi加入到目标函数中。
min12||w||2+C∑i=1nξis.t.yi(w⋅zi−b)≥1−ξi∀i=1,...,nξi≥0∀i=1,...,n
这个问题的Lagrangian函数是
L=12||w||2+C∑iξi+∑iαi[1−ξi−yi(w⋅zi−b)]−∑iπiξi
其中αi和πi是对应的Lagrangian算子,满足的KKT最优化条件是
▽wL=w−∑iαiyizi=0∂L∂b=∑iαiyi=0∂L∂ξi=C−αi−πi=0αi≥0αi[1−ξi−yi(w⋅zi−b)]=0πi≥0πiξi=0
我们定义w(α)=∑iαiyizi,通过把KKT条件带入目标函数我们可以得到
W(α)=12||w||2+C∑iξi+∑iαi[1−ξi−yi(w⋅zi−b)]−∑iπiξi=12w(α)⋅w(α)+∑i(C−αi−πi)ξi+∑iαi−∑iαiyiziw+∑iαiyib=12w(α)⋅w(α)+∑iαi−w(α)⋅w(α)=∑iαi−12w(α)⋅w(α)
根据Wolfe duality theory,αi可以通过对以下对偶问题求解得到
maxW(α)=∑iαi−12w(α)⋅w(α)s.t.0≤αi≤C,∑iαiyi=0
一旦αi得到,其他变量w,b,ξ和π都可以由之前的KKT条件计算得到。
最优化条件
下面我们要研究这个对偶问题的最优化条件。它的Lagrangian函数为L¯=12w(α)⋅w(α)−∑iαi−∑iδiαi+∑iμi(αi−C)−β∑iαiyi
我们定义
Fi=w(α)⋅zi−yi=∑jαjyjzj⋅zi−yi=∑jαjyjk(xi,xj)−yi
KKT条件为
∂L¯∂αi=w(α)yizi−1−δi+μi−βyi=[w(α)zi−β]⋅yi−y2i−δi+μi=[w(α)zi−yi−β]⋅yi−δi+μi=(Fi−β)⋅yi−δi+μi=0δi≥0δiαi=0μi≥0μi(αi−C)=0
这些条件可以总结成以下三种情况:
Case 1. αi=0
δi≥0,μi=0⇒(Fi−β)yi≥0
Case 2. 0<αi<C
δi=0,μi=0⇒(Fi−β)yi=0
Case 3. αi=C
δi=0,μi≥0⇒(Fi−β)yi≤0
我们定义以下几个指标集合I0={i:0<αi<C},I1={i:yi=1,αi=0},I2={i:yi=−1,αi=C},I3={yi=1,αi=C},I4={i:yi=−1,αi=0}。这些指标集的设置都取决于α的值。运用这些指标集,我们可以将上面三种情况重写成
β≤Fi∀i∈I0∪I1∪I2;β≥Fi∀i∈I0∪I3∪I4
定义
bup=min{Fi:i∈I0∪I1∪I2}blow=max{Fi:i∈I0∪I3∪I4}
由此我们可以得到最优化条件是
blow≤bup
从反面来说就是对所有指标对(i,j),下面的冲突情况不会出现:
i∈I0∪I3∪I4,j∈I0∪I1∪I2andFi>Fji∈I0∪I1∪I2,j∈I0∪I3∪I4andFi<Fj
但是在编程解决时,我们不可能精确到达最优,所以我们需要定义近似最优化条件。之前的最优化条件可以改写为
blow≤bup+2τ
冲突情况可以改写为
i∈I0∪I3∪I4,j∈I0∪I1∪I2andFi>Fj+2τi∈I0∪I1∪I2,j∈I0∪I3∪I4andFi<Fj−2τ
最后我们将最优化条件写为存在β使得:
(Fi−β)yi≥−τ,ifαi=0|(Fi−β)|≤τ,if0<αi<C(Fi−β)yi≤τ,ifαi=C
相关文章推荐
- 学习笔记——Kaggle_Digit Recognizer (SVM算法 Python实现)
- 最大熵学习笔记(五)最优化算法
- [算法学习笔记] AVL树----带有平衡条件的二叉搜索树
- 【算法学习笔记】71.动态规划 双重条件 SJTU OJ 1124 我把助教团的平均智商拉低了
- 最大熵学习笔记(五)最优化算法
- 最大熵学习笔记(五)最优化算法
- 链栈实现算法 - Java 学习笔记(26)
- 孙鑫VC学习笔记:第十五讲 增加互斥条件实现线程同步
- 基础算法学习笔记(二)----动态规划
- 基础算法学习笔记(一)----回溯法
- 算法学习笔记之:找出所缺的整数
- 每天学习一点flash(35) 游戏设计笔记 (5) 跳跃算法笔记
- 090811c语言学习第五章笔记(类型变换,自定义函数,循环条件等)
- STL的内观排序(introsort)算法学习笔记
- 学习笔记:TimeSpan(时间片),以及各种时间差的算法
- SEO学习笔记:搜索引擎对作弊的判断条件
- Python 条件和循环学习笔记(一)
- SVM算法笔记一
- 挖掘闭合模式的高性能算法学习笔记——CFIST
- 算法导论学习笔记-1