First
由于博客公式的限制我還沒有找到在合適的簡書內(nèi)給公式編號的方案,大家可以在我個(gè)人的博客中看帶公式編號的這篇文章,點(diǎn)這里。SVM算法大概是,學(xué)到現(xiàn)在最難的算法了,牽扯了拉格朗日的細(xì)節(jié)問題,這些問題在學(xué)高數(shù)做題的時(shí)候都沒有深入思考過。
SVM的優(yōu)點(diǎn)和缺點(diǎn)
- 優(yōu)點(diǎn):泛化錯(cuò)誤率低,計(jì)算開銷不大,結(jié)果易解釋
- 缺點(diǎn):對參數(shù)調(diào)節(jié)和核函數(shù)的選擇敏感,原始分類器不加修改僅適用于處理二類問題。
- 數(shù)據(jù)類型:數(shù)值型和標(biāo)稱型數(shù)據(jù)。
SVM算法原理
首先我們都知道,為了劃分二維的數(shù)據(jù)需要一根線,劃分三維數(shù)據(jù)需要一個(gè)面。這里線是一維,面是二維,同理繼續(xù)推出對N維的數(shù)據(jù)需要使用N-1維的對象進(jìn)行分割,線性回歸和SVM本質(zhì)都是通過找這個(gè)超平面來達(dá)到分類的效果。
具體的來說SVM是在優(yōu)化線性回歸中的模型。在線性回歸中只需要考慮有一個(gè)分割超平面能進(jìn)行分類即可,而SVM則想找出所有能分類的分割超平面中最優(yōu)的超平面,即所有點(diǎn)都到分割超平面的距離最大,而支持向量指的就是離超平面最近的那些點(diǎn)。
超平面的公式為公式2.1。所以點(diǎn)A到分割超平面的距離為公式2.2。這里我們?yōu)榱朔奖阌?jì)算引入類別標(biāo)簽為-1和+1。所以保證所有的最小間隔的點(diǎn)最大化的公式為公式2.3。
注1:-1和+1是為了保證預(yù)測正確的時(shí)候,都是一個(gè)很大的正值。
注2:的含義是,得到w和b使得后面式子取最大值
顯然我們不能直接求解上面的式子。需要化簡下它。由于公式2.1在正確預(yù)測時(shí),同的乘積大于1。所以我們可以拆分公式2.3為公式2.4,約束條件為公式2.5。
注:這里的約束條件公式2.5中,要對每一個(gè)式子前都要加系數(shù),即拉格朗日數(shù)乘子。
對為了方便求導(dǎo)計(jì)算在公式2.4前加上這個(gè)系數(shù)。之后使用拉格朗日乘子法得到公式2.6,并進(jìn)行計(jì)算。根據(jù)KKT條件中的偏導(dǎo)數(shù)等于0得到公式2.7和公式2.8。
祝:這里需要注意的是拉格朗日數(shù)乘子的正負(fù)號,這個(gè)同不等式的符號有關(guān)
將公式2.7,公式2.8代入公式2.6化簡,再根據(jù)對偶問題得到最終公式2.9,根據(jù)KKT,其約束條件為公式2.10。
注1:KKT條件在SMO算法中統(tǒng)一進(jìn)行講解。
注2:b是由公式2.8消掉的。
注3:在拉格朗日乘子法應(yīng)用在這里,我們可以把,寫作
,所以原式可以寫作
,根據(jù)對偶問題,就可以變成
,這也是能把公式2.7和公式2.8代入公式2.6的原因,也是公式2.9種是
的原因。具體證明在KKT中的附上的博客中。
注:這里是兩者向量積的運(yùn)算,是從
得到的。
這么看來我們算出了就能算出超平面,所以SVM的工作就是算出這些
,而SMO算法就是求
的典型算法。
對SVM引入線性不可分
由于數(shù)據(jù)都不那么干凈,所以我們不應(yīng)該假設(shè)數(shù)據(jù)能夠100%的線性可分。我們通過對判定的公式,公式2.5,引入松弛變量,得到其引入了松弛因子的形式,如下公式3.1。
同時(shí)對于目標(biāo)函數(shù)公式2.4也需要調(diào)整,我們將引入目標(biāo)函數(shù)并對其設(shè)置權(quán)值,得到公式3.2,也因此其約束條件變?yōu)楣?.1,公式3.2。
故拉格朗日函數(shù)為如下公式3.3,其中
,
為拉格朗日數(shù)乘子。
和之前的操作一樣,對其進(jìn)行求偏導(dǎo)操作后,類似的得到了相同的公式2.7,公式2.8,不同的是這里對的求到后對
有了限制,得到了公式3.4,由于
所以有
的取值范圍
。
注:注意這里的取值,之后SMO會(huì)用
最終目標(biāo)函數(shù)還是同之前推到的相同,即公式2.9,約束條件中只有的取值變?yōu)榱耍?img class="math-inline" src="https://math.jianshu.com/math?formula=0%20%5Cleq%20%5Calpha_i%20%5Cleq%20C" alt="0 \leq \alpha_i \leq C" mathimg="1">。這樣有了目標(biāo)函數(shù)了以后,之后可以根據(jù)梯度下降算法求得最終的
SMO(Sequential Minimal Optimization)
KKT條件
求 極值的時(shí)候我們這里討論三種情況。
沒有約束條件:
有一個(gè)等式
的約束條件:
使用拉格朗日乘子法(Lagrange Multiplier),也就是我們在高數(shù)中求極值常用的。設(shè)置一個(gè)拉格朗日系數(shù),得到如下公式,之后對
和
用求導(dǎo)的方式求極值即可。
-
含有不等式的約束條件:
當(dāng)約束條件中有不等式時(shí),就需要用到KKT條件。同樣地,把所有的不等式約束、等式約束
和目標(biāo)函數(shù)
全部寫為一個(gè)式子如下公式。
KKT條件是說最優(yōu)值必須滿足以下條件:-
對
,
,
求導(dǎo)為零。
-
。
-
。
其中第三個(gè)式子非常有趣,因?yàn)?img class="math-inline" src="https://math.jianshu.com/math?formula=g(x)%5Cleq" alt="g(x)\leq" mathimg="1"> 0 ,如果要滿足這個(gè)等式,必須有或者
。這是SVM的很多重要性質(zhì)的來源。同時(shí)
也可以寫作
,這個(gè)則是SMO求解中的一個(gè)關(guān)鍵性質(zhì)。詳細(xì)的論述參考這篇博客。
-
SMO算法細(xì)節(jié)
SMO算法綜述
由于原來直接通過梯度下降進(jìn)行求解速度太慢,所以1996年,John Platt依靠KKT的特性,將大優(yōu)化問題變成了多個(gè)小優(yōu)化問題來求解,成為了SVM中最常用的求解思路。
其思路如下:
- Loop:
- 選取一對
,
作為變量,其余看為常數(shù)
- 如果這對
滿足以下兩個(gè)條件,使用梯度下降算法改變他們的值。
- 兩者都在間隔邊界外
- 兩者都沒有在進(jìn)行過區(qū)間化處理,或者不在邊界上
- 當(dāng)滿足了KKT條件,即
和
。
注:這里可以這么理解,從之前的公式中我們可以大致理解為是每一個(gè)樣本的權(quán)值,我們這些操作可以理解為通過操作
把所有的樣本點(diǎn)盡量的放在間隔邊界上。
- 選取一對
算法推導(dǎo)
我們接下來要做的是,通過類似梯度下降的方式來求的最優(yōu)的值。正如上一節(jié)所說的,SMO的本質(zhì)是大優(yōu)化問題畫小優(yōu)化問題。所以從目標(biāo)函數(shù)公式2.9中,隨意取出兩個(gè)
,為了表達(dá)方便,不妨直接取
和
,同時(shí)對公式2.9前加負(fù)號取反之后,化簡如下式4.1,其中
代表
。
由于我們已經(jīng)把不是和
的參數(shù)看作常量,所以在進(jìn)行求偏導(dǎo)進(jìn)行梯度下降算法的時(shí)候就不需要考慮公式4.1中第二行的式子。通過這個(gè)式子中約束條件的等式就可以得到僅含
的式子,對其進(jìn)行梯度下降算法,得到如下公式4.2:
這時(shí)候我們已經(jīng)找到了兩個(gè)的的新值了,不過我們不能確定這兩個(gè)新值是否還滿足KKT條件。所以我們根據(jù)KKT條件中
的取值,設(shè)置了L和H來防止新值不滿足KKT,即
,其中L,H的公式如下公式4.3和公式4.4得到:
LH的細(xì)節(jié)推到,在這個(gè)博客中詳細(xì)的說明了LH是怎么推出來的。