July大神---SVM讲解
?? ? ? 支持向量機(jī)通俗導(dǎo)論(理解SVM的三層境界)
出處:結(jié)構(gòu)之法算法之道blog。
前言
? ? 動(dòng)筆寫這個(gè)支持向量機(jī)(support vector machine)是費(fèi)了不少勁和困難的,原因很簡(jiǎn)單,一者這個(gè)東西本身就并不好懂,要深入學(xué)習(xí)和研究下去需花費(fèi)不少時(shí)間和精力,二者這個(gè)東西也不好講清楚,盡管網(wǎng)上已經(jīng)有朋友寫得不錯(cuò)了(見(jiàn)文末參考鏈接),但在描述數(shù)學(xué)公式的時(shí)候還是顯得不夠。得益于同學(xué)白石的數(shù)學(xué)證明,我還是想嘗試寫一下,希望本文在兼顧通俗易懂的基礎(chǔ)上,真真正正能足以成為一篇完整概括和介紹支持向量機(jī)的導(dǎo)論性的文章。
? ? 本文在寫的過(guò)程中,參考了不少資料,包括《支持向量機(jī)導(dǎo)論》、《統(tǒng)計(jì)學(xué)習(xí)方法》及網(wǎng)友pluskid的支持向量機(jī)系列等等,于此,還是一篇學(xué)習(xí)筆記,只是加入了自己的理解和總結(jié),有任何不妥之處,還望海涵。全文宏觀上整體認(rèn)識(shí)支持向量機(jī)的概念和用處,微觀上深究部分定理的來(lái)龍去脈,證明及原理細(xì)節(jié),力保邏輯清晰 & 通俗易懂。
? ? 同時(shí),閱讀本文時(shí)建議大家盡量使用chrome等瀏覽器,如此公式才能更好的顯示,再者,閱讀時(shí)可拿張紙和筆出來(lái),把本文所有定理.公式都親自推導(dǎo)一遍或者直接打印下來(lái)(可直接打印網(wǎng)頁(yè)版或本文文末附的PDF,享受隨時(shí)隨地思考、演算的極致快感),在文稿上演算。
? ? Ok,還是那句原話,有任何問(wèn)題,歡迎任何人隨時(shí)不吝指正 & 賜教,感謝。
第一層、了解SVM
? ? 支持向量機(jī),因其英文名為support?vector?machine,故一般簡(jiǎn)稱SVM,通俗來(lái)講,它是一種二類分類模型,其基本模型定義為特征空間上的間隔最大的線性分類器,其學(xué)習(xí)策略便是間隔最大化,最終可轉(zhuǎn)化為一個(gè)凸二次規(guī)劃問(wèn)題的求解。
1.1、分類標(biāo)準(zhǔn)的起源:Logistic回歸
? ? 理解SVM,咱們必須先弄清楚一個(gè)概念:線性分類器。
? ? 給定一些數(shù)據(jù)點(diǎn),它們分別屬于兩個(gè)不同的類,現(xiàn)在要找到一個(gè)線性分類器把這些數(shù)據(jù)分成兩類。如果用x表示數(shù)據(jù)點(diǎn),用y表示類別(y可以取1或者-1,分別代表兩個(gè)不同的類),一個(gè)線性分類器的學(xué)習(xí)目標(biāo)便是要在n維的數(shù)據(jù)空間中找到一個(gè)超平面(hyper?plane),這個(gè)超平面的方程可以表示為(?wT中的T代表轉(zhuǎn)置):
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ??可能有讀者對(duì)類別取1或-1有疑問(wèn),事實(shí)上,這個(gè)1或-1的分類標(biāo)準(zhǔn)起源于logistic回歸。
? ??Logistic回歸目的是從特征學(xué)習(xí)出一個(gè)0/1分類模型,而這個(gè)模型是將特性的線性組合作為自變量,由于自變量的取值范圍是負(fù)無(wú)窮到正無(wú)窮。因此,使用logistic函數(shù)(或稱作sigmoid函數(shù))將自變量映射到(0,1)上,映射后的值被認(rèn)為是屬于y=1的概率。
? ? 假設(shè)函數(shù)
其中x是n維特征向量,函數(shù)g就是logistic函數(shù)。 而的圖像是
可以看到,將無(wú)窮映射到了(0,1)。 而假設(shè)函數(shù)就是特征屬于y=1的概率。
? ? 從而,當(dāng)我們要判別一個(gè)新來(lái)的特征屬于哪個(gè)類時(shí),只需求即可,若大于0.5就是y=1的類,反之屬于y=0類。
? ? 此外,只和有關(guān),>0,那么,而g(z)只是用來(lái)映射,真實(shí)的類別決定權(quán)還是在于。再者,當(dāng)時(shí),=1,反之=0。如果我們只從出發(fā),希望模型達(dá)到的目標(biāo)就是讓訓(xùn)練數(shù)據(jù)中y=1的特征,而是y=0的特征。Logistic回歸就是要學(xué)習(xí)得到,使得正例的特征遠(yuǎn)大于0,負(fù)例的特征遠(yuǎn)小于0,而且要在全部訓(xùn)練實(shí)例上達(dá)到這個(gè)目標(biāo)。
? ? 接下來(lái),嘗試把logistic回歸做個(gè)變形。首先,將使用的結(jié)果標(biāo)簽y?=?0和y?=?1替換為y?=?-1,y?=?1,然后將()中的替換為b,最后將后面的替換為(即)。如此,則有了。也就是說(shuō)除了y由y=0變?yōu)?/span>y=-1外,線性分類函數(shù)跟logistic回歸的形式化表示沒(méi)區(qū)別。
? ? 進(jìn)一步,可以將假設(shè)函數(shù)中的g(z)做一個(gè)簡(jiǎn)化,將其簡(jiǎn)單映射到y=-1和y=1上。映射關(guān)系如下:
1.2、線性分類的一個(gè)例子
? ? 下面舉個(gè)簡(jiǎn)單的例子,如下圖所示,現(xiàn)在有一個(gè)二維平面,平面上有兩種不同的數(shù)據(jù),分別用圈和叉表示。由于這些數(shù)據(jù)是線性可分的,所以可以用一條直線將這兩類數(shù)據(jù)分開(kāi),這條直線就相當(dāng)于一個(gè)超平面,超平面一邊的數(shù)據(jù)點(diǎn)所對(duì)應(yīng)的y全是?-1?,另一邊所對(duì)應(yīng)的y全是1。
? ? 這個(gè)超平面可以用分類函數(shù)表示,當(dāng)f(x)?等于0的時(shí)候,x便是位于超平面上的點(diǎn),而f(x)大于0的點(diǎn)對(duì)應(yīng)?y=1?的數(shù)據(jù)點(diǎn),f(x)小于0的點(diǎn)對(duì)應(yīng)y=-1的點(diǎn),如下圖所示:
? ??注:有的資料上定義特征到結(jié)果的輸出函數(shù),與這里定義的實(shí)質(zhì)是一樣的。為什么?因?yàn)闊o(wú)論是,還是,不影響最終優(yōu)化結(jié)果。下文你將看到,當(dāng)我們轉(zhuǎn)化到優(yōu)化的時(shí)候,為了求解方便,會(huì)把yf(x)令為1,即yf(x)是y(w^x + b),還是y(w^x - b),對(duì)我們要優(yōu)化的式子max1/||w||已無(wú)影響。?? ?(有一朋友飛狗來(lái)自Mare_Desiderii,看了上面的定義之后,問(wèn)道:請(qǐng)教一下SVM functional margin 為=y(wTx+b)=yf(x)中的Y是只取1和-1 嗎?y的唯一作用就是確保functional margin的非負(fù)性?真是這樣的么?當(dāng)然不是,詳情請(qǐng)見(jiàn)本文評(píng)論下第43樓)
? ??當(dāng)然,有些時(shí)候,或者說(shuō)大部分時(shí)候數(shù)據(jù)并不是線性可分的,這個(gè)時(shí)候滿足這樣條件的超平面就根本不存在(不過(guò)關(guān)于如何處理這樣的問(wèn)題我們后面會(huì)講),這里先從最簡(jiǎn)單的情形開(kāi)始推導(dǎo),就假設(shè)數(shù)據(jù)都是線性可分的,亦即這樣的超平面是存在的。? ? 換言之,在進(jìn)行分類的時(shí)候,遇到一個(gè)新的數(shù)據(jù)點(diǎn)x,將x代入f(x)?中,如果f(x)小于0則將x的類別賦為-1,如果f(x)大于0則將x的類別賦為1。
? ? 接下來(lái)的問(wèn)題是,如何確定這個(gè)超平面呢?從直觀上而言,這個(gè)超平面應(yīng)該是最適合分開(kāi)兩類數(shù)據(jù)的直線。而判定“最適合”的標(biāo)準(zhǔn)就是這條直線離直線兩邊的數(shù)據(jù)的間隔最大。所以,得尋找有著最大間隔的超平面。
1.3、函數(shù)間隔Functional margin與幾何間隔Geometrical margin?
? ??在超平面w*x+b=0確定的情況下,|w*x+b|能夠表示點(diǎn)x到距離超平面的遠(yuǎn)近,而通過(guò)觀察w*x+b的符號(hào)與類標(biāo)記y的符號(hào)是否一致可判斷分類是否正確,所以,可以用(y*(w*x+b))的正負(fù)性來(lái)判定或表示分類的正確性。于此,我們便引出了函數(shù)間隔(functional?margin)的概念。
? ? 定義函數(shù)間隔(用表示)為:
?
? ? 而超平面(w,b)關(guān)于T中所有樣本點(diǎn)(xi,yi)的函數(shù)間隔最小值(其中,x是特征,y是結(jié)果標(biāo)簽,i表示第i個(gè)樣本),便為超平面(w,?b)關(guān)于訓(xùn)練數(shù)據(jù)集T的函數(shù)間隔:
?? ??=?mini ?(i=1,...n)
? ??但這樣定義的函數(shù)間隔有問(wèn)題,即如果成比例的改變w和b(如將它們改成2w和2b),則函數(shù)間隔的值f(x)卻變成了原來(lái)的2倍(雖然此時(shí)超平面沒(méi)有改變),所以只有函數(shù)間隔還遠(yuǎn)遠(yuǎn)不夠。
? ? 事實(shí)上,我們可以對(duì)法向量w加些約束條件,從而引出真正定義點(diǎn)到超平面的距離--幾何間隔(geometrical?margin)的概念。
? ? 假定對(duì)于一個(gè)點(diǎn)?x?,令其垂直投影到超平面上的對(duì)應(yīng)點(diǎn)為?x0?,w?是垂直于超平面的一個(gè)向量,為樣本x到分類間隔的距離,如下圖所示:
? ? 有,其中||w||表示的是范數(shù)。
? ? 又由于?x0?是超平面上的點(diǎn),滿足?f(x0)=0?,代入超平面的方程即可算出:?
γ
(有的書上會(huì)寫成把||w|| 分開(kāi)相除的形式,如本文參考文獻(xiàn)及推薦閱讀條目11,其中,||w||為w的二階泛數(shù))
? 為了得到的絕對(duì)值,令乘上對(duì)應(yīng)的類別?y,即可得出幾何間隔(用表示)的定義:
? ? 從上述函數(shù)間隔和幾何間隔的定義可以看出:幾何間隔就是函數(shù)間隔除以||w||,而且函數(shù)間隔y*(wx+b)?=?y*f(x)實(shí)際上就是|f(x)|,只是人為定義的一個(gè)間隔度量,而幾何間隔|f(x)|/||w||才是直觀上的點(diǎn)到超平面的距離。
1.4、最大間隔分類器Maximum Margin Classifier的定義
? ? 對(duì)一個(gè)數(shù)據(jù)點(diǎn)進(jìn)行分類,當(dāng)超平面離數(shù)據(jù)點(diǎn)的“間隔”越大,分類的確信度(confidence)也越大。所以,為了使得分類的確信度盡量高,需要讓所選擇的超平面能夠最大化這個(gè)“間隔”值。這個(gè)間隔如下圖中的gap?/?2所示。
? ? 通過(guò)由前面的分析可知:函數(shù)間隔不適合用來(lái)最大化間隔值,因?yàn)樵诔矫婀潭ㄒ院?#xff0c;可以等比例地縮放w的長(zhǎng)度和b的值,這樣可以使得的值任意大,亦即函數(shù)間隔可以在超平面保持不變的情況下被取得任意大。但幾何間隔因?yàn)槌狭?#xff0c;使得在縮放w和b的時(shí)候幾何間隔的值是不會(huì)改變的,它只隨著超平面的變動(dòng)而變動(dòng),因此,這是更加合適的一個(gè)間隔。所以,這里要找的最大間隔分類超平面中的“間隔”指的是幾何間隔。
? ?于是最大間隔分類器(maximum?margin?classifier)的目標(biāo)函數(shù)可以定義為:
? ? 同時(shí)需滿足一些條件,根據(jù)間隔的定義,有
? ? 其中,s.t.,即subject?to的意思,它導(dǎo)出的是約束條件。
? ? 回顧下幾何間隔的定義可知:如果令函數(shù)間隔等于1(之所以令等于1,是為了方便推導(dǎo)和優(yōu)化,且這樣做對(duì)目標(biāo)函數(shù)的優(yōu)化沒(méi)有影響,至于為什么,請(qǐng)見(jiàn)本文評(píng)論下第42樓回復(fù)),則有?=?1?/?||w||且,從而上述目標(biāo)函數(shù)轉(zhuǎn)化成了
? ? 這個(gè)目標(biāo)函數(shù)便是在相應(yīng)的約束條件下,最大化這個(gè)1/||w||值,而1/||w||便是幾何間隔。 ??
? ? 如下圖所示,中間的實(shí)線便是尋找到的最優(yōu)超平面(Optimal Hyper Plane),其到兩條虛線的距離相等,這個(gè)距離便是幾何間隔,兩條虛線之間的距離等于2,而虛線上的點(diǎn)則是支持向量。由于這些支持向量剛好在邊界上,所以它們滿足(還記得我們把 functional margin 定為 1 了嗎?上節(jié)中:處于方便推導(dǎo)和優(yōu)化的目的,我們可以令=1),而對(duì)于所有不是支持向量的點(diǎn),則顯然有。
? ? OK,到此為止,算是了解到了SVM的第一層,對(duì)于那些只關(guān)心怎么用SVM的朋友便已足夠,不必再更進(jìn)一層深究其更深的原理。
第二層、深入SVM
2.1、從線性可分到線性不可分
2.1.1、從原始問(wèn)題到對(duì)偶問(wèn)題的求解
? ? 接著考慮之前得到的目標(biāo)函數(shù):
由于求的最大值相當(dāng)于求的最小值,所以上述目標(biāo)函數(shù)等價(jià)于(w由分母變成分子,從而也有原來(lái)的max問(wèn)題變?yōu)閙in問(wèn)題,很明顯,兩者問(wèn)題等價(jià)):
? ? 因?yàn)楝F(xiàn)在的目標(biāo)函數(shù)是二次的,約束條件是線性的,所以它是一個(gè)凸二次規(guī)劃問(wèn)題。這個(gè)問(wèn)題可以用現(xiàn)成的QP?(Quadratic?Programming)?優(yōu)化包進(jìn)行求解。一言以蔽之:在一定的約束條件下,目標(biāo)最優(yōu),損失最小。
? ? 此外,由于這個(gè)問(wèn)題的特殊結(jié)構(gòu),還可以通過(guò)拉格朗日對(duì)偶性(Lagrange Duality)變換到對(duì)偶變量?(dual?variable)?的優(yōu)化問(wèn)題,即通過(guò)求解與原問(wèn)題等價(jià)的對(duì)偶問(wèn)題(dual?problem)得到原始問(wèn)題的最優(yōu)解,這就是線性可分條件下支持向量機(jī)的對(duì)偶算法,這樣做的優(yōu)點(diǎn)在于:一者對(duì)偶問(wèn)題往往更容易求解;二者可以自然的引入核函數(shù),進(jìn)而推廣到非線性分類問(wèn)題。
? ? ?那什么是拉格朗日對(duì)偶性呢?簡(jiǎn)單來(lái)講,通過(guò)給每一個(gè)約束條件加上一個(gè)拉格朗日乘子(Lagrange?multiplier),定義拉格朗日函數(shù)(通過(guò)拉格朗日函數(shù)將約束條件融合到目標(biāo)函數(shù)里去,從而只用一個(gè)函數(shù)表達(dá)式便能清楚的表達(dá)出我們的問(wèn)題):
? ? 然后令
? ? 容易驗(yàn)證,當(dāng)某個(gè)約束條件不滿足時(shí),例如,那么顯然有(只要令即可)。而當(dāng)所有約束條件都滿足時(shí),則最優(yōu)值為,亦即最初要最小化的量。
? ? 因此,在要求約束條件得到滿足的情況下最小化,實(shí)際上等價(jià)于直接最小化(當(dāng)然,這里也有約束條件,就是≥0,i=1,…,n) ? ,因?yàn)槿绻s束條件沒(méi)有得到滿足,會(huì)等于無(wú)窮大,自然不會(huì)是我們所要求的最小值。
? ? 具體寫出來(lái),目標(biāo)函數(shù)變成了:
? ? 這里用表示這個(gè)問(wèn)題的最優(yōu)值,且和最初的問(wèn)題是等價(jià)的。如果直接求解,那么一上來(lái)便得面對(duì)w和b兩個(gè)參數(shù),而又是不等式約束,這個(gè)求解過(guò)程不好做。不妨把最小和最大的位置交換一下,變成:
? ? 交換以后的新問(wèn)題是原始問(wèn)題的對(duì)偶問(wèn)題,這個(gè)新問(wèn)題的最優(yōu)值用來(lái)表示。而且有≤,在滿足某些條件的情況下,這兩者相等,這個(gè)時(shí)候就可以通過(guò)求解對(duì)偶問(wèn)題來(lái)間接地求解原始問(wèn)題。
? ? 換言之,之所以從minmax的原始問(wèn)題,轉(zhuǎn)化為maxmin的對(duì)偶問(wèn)題,一者因?yàn)槭堑慕平?#xff0c;二者,轉(zhuǎn)化為對(duì)偶問(wèn)題后,更容易求解。
? ? 下面可以先求L?對(duì)w、b的極小,再求L?對(duì)的極大。
2.1.2、KKT條件
????上文中提到“≤在滿足某些條件的情況下,兩者等價(jià)”,這所謂的“滿足某些條件”就是要滿足KKT條件。
? ? 一般地,一個(gè)最優(yōu)化數(shù)學(xué)模型能夠表示成下列標(biāo)準(zhǔn)形式:
? ? 其中,f(x)是需要最小化的函數(shù),h(x)是等式約束,g(x)是不等式約束,p和q分別為等式約束和不等式約束的數(shù)量。
? ? 同時(shí),得明白以下兩點(diǎn):
- 凸優(yōu)化的概念:?為一凸集,??為一凸函數(shù)。凸優(yōu)化就是要找出一點(diǎn)??,使得每一??滿足??。
- KKT條件的意義:它是一個(gè)非線性規(guī)劃(Nonlinear Programming)問(wèn)題能有最優(yōu)化解法的必要和充分條件。
? ? 而KKT條件就是指上面最優(yōu)化數(shù)學(xué)模型的標(biāo)準(zhǔn)形式中的最小點(diǎn)?x*?必須滿足下面的條件:
? ? 經(jīng)過(guò)論證,我們這里的問(wèn)題是滿足?KKT?條件的(首先已經(jīng)滿足Slater?condition,再者f和gi也都是可微的,即L對(duì)w和b都可導(dǎo)),因此現(xiàn)在我們便轉(zhuǎn)化為求解第二個(gè)問(wèn)題。
? ? 也就是說(shuō),原始問(wèn)題通過(guò)滿足KKT條件,已經(jīng)轉(zhuǎn)化成了對(duì)偶問(wèn)題。而求解這個(gè)對(duì)偶學(xué)習(xí)問(wèn)題,分為3個(gè)步驟:首先要讓L(w,b,a)?關(guān)于?w?和?b?最小化,然后求對(duì)的極大,最后利用SMO算法求解對(duì)偶問(wèn)題中的拉格朗日乘子。
2.1.3、對(duì)偶問(wèn)題求解的3個(gè)步驟
? ??(1)、首先固定,要讓?L?關(guān)于?w?和?b?最小化,我們分別對(duì)w,b求偏導(dǎo)數(shù),即令??L/?w?和??L/?b?等于零(對(duì)w求導(dǎo)結(jié)果的解釋請(qǐng)看本文評(píng)論下第45樓回復(fù)):
? ? 將以上結(jié)果代入之前的L:?
? ? 得到:
? ? 提醒:有讀者可能會(huì)問(wèn)上述推導(dǎo)過(guò)程如何而來(lái)?說(shuō)實(shí)話,其具體推導(dǎo)過(guò)程是比較復(fù)雜的,如下圖所示:
? ? ? 最后,得到:
? ? 如 jerrylead所說(shuō):“倒數(shù)第4步”推導(dǎo)到“倒數(shù)第3步”使用了線性代數(shù)的轉(zhuǎn)置運(yùn)算,由于ai和yi都是實(shí)數(shù),因此轉(zhuǎn)置后與自身一樣。“倒數(shù)第3步”推導(dǎo)到“倒數(shù)第2步”使用了(a+b+c+…)(a+b+c+…)=aa+ab+ac+ba+bb+bc+…的乘法運(yùn)算法則。最后一步是上一步的順序調(diào)整。
L(
? ? 從上面的最后一個(gè)式子,我們可以看出,此時(shí)的拉格朗日函數(shù)只包含了一個(gè)變量,那就是(求出了便能求出w,和b,由此可見(jiàn),上文第1.2節(jié)提出來(lái)的核心問(wèn)題:分類函數(shù)也就可以輕而易舉的求出來(lái)了)。
? ??(2)、求對(duì)的極大,即是關(guān)于對(duì)偶問(wèn)題的最優(yōu)化問(wèn)題。經(jīng)過(guò)上面第一個(gè)步驟的求w和b,得到的拉格朗日函數(shù)式子已經(jīng)沒(méi)有了變量w,b,只有。從上面的式子得到:
? ? 這樣,求出了,根據(jù),即可求出w,然后通過(guò),即可求出b,最終得出分離超平面和分類決策函數(shù)。? ??(3)在求得L(w,?b,?a)?關(guān)于?w?和?b?最小化,以及對(duì)的極大之后,最后一步則可以利用SMO算法求解對(duì)偶問(wèn)題中的拉格朗日乘子。
上述式子要解決的是在參數(shù)上求最大值W的問(wèn)題,至于和都是已知數(shù)。要了解這個(gè)SMO算法是如何推導(dǎo)的,請(qǐng)?zhí)较挛牡?.5節(jié)、SMO算法。 到目前為止,我們的?SVM?還比較弱,只能處理線性的情況,下面我們將引入核函數(shù),進(jìn)而推廣到非線性分類問(wèn)題。2.1.5、線性不可分的情況
? ? OK,為過(guò)渡到下節(jié)2.2節(jié)所介紹的核函數(shù),讓我們?cè)賮?lái)看看上述推導(dǎo)過(guò)程中得到的一些有趣的形式。首先就是關(guān)于我們的 hyper plane ,對(duì)于一個(gè)數(shù)據(jù)點(diǎn)?x?進(jìn)行分類,實(shí)際上是通過(guò)把?x?帶入到算出結(jié)果然后根據(jù)其正負(fù)號(hào)來(lái)進(jìn)行類別劃分的。而前面的推導(dǎo)中我們得到?
? ? 因此分類函數(shù)為:
? ? 這里的形式的有趣之處在于,對(duì)于新點(diǎn)?x的預(yù)測(cè),只需要計(jì)算它與訓(xùn)練數(shù)據(jù)點(diǎn)的內(nèi)積即可(表示向量?jī)?nèi)積),這一點(diǎn)至關(guān)重要,是之后使用 Kernel 進(jìn)行非線性推廣的基本前提。此外,所謂 Supporting Vector 也在這里顯示出來(lái)——事實(shí)上,所有非Supporting Vector 所對(duì)應(yīng)的系數(shù)都是等于零的,因此對(duì)于新點(diǎn)的內(nèi)積計(jì)算實(shí)際上只要針對(duì)少量的“支持向量”而不是所有的訓(xùn)練數(shù)據(jù)即可。
? ? 為什么非支持向量對(duì)應(yīng)的等于零呢?直觀上來(lái)理解的話,就是這些“后方”的點(diǎn)——正如我們之前分析過(guò)的一樣,對(duì)超平面是沒(méi)有影響的,由于分類完全有超平面決定,所以這些無(wú)關(guān)的點(diǎn)并不會(huì)參與分類問(wèn)題的計(jì)算,因而也就不會(huì)產(chǎn)生任何影響了。
? ? 回憶一下我們2.1.1節(jié)中通過(guò) Lagrange multiplier得到的目標(biāo)函數(shù):
? ? ?注意到如果?xi?是支持向量的話,上式中紅顏色的部分是等于 0 的(因?yàn)橹С窒蛄康?functional margin 等于 1 ),而對(duì)于非支持向量來(lái)說(shuō),functional margin 會(huì)大于 1 ,因此紅顏色部分是大于零的,而又是非負(fù)的,為了滿足最大化,必須等于 0 。這也就是這些非Supporting Vector 的點(diǎn)的局限性。?
? ? 從1.5節(jié)到上述所有這些東西,便得到了一個(gè)maximum margin hyper plane classifier,這就是所謂的支持向量機(jī)(Support Vector Machine)。當(dāng)然,到目前為止,我們的 SVM 還比較弱,只能處理線性的情況,不過(guò),在得到了對(duì)偶dual 形式之后,通過(guò)?Kernel 推廣到非線性的情況就變成了一件非常容易的事情了(相信,你還記得本節(jié)開(kāi)頭所說(shuō)的:“通過(guò)求解對(duì)偶問(wèn)題得到最優(yōu)解,這就是線性可分條件下支持向量機(jī)的對(duì)偶算法,這樣做的優(yōu)點(diǎn)在于:一者對(duì)偶問(wèn)題往往更容易求解;二者可以自然的引入核函數(shù),進(jìn)而推廣到非線性分類問(wèn)題”)。
2.2、核函數(shù)Kernel
2.2.1、特征空間的隱式映射:核函數(shù)
? ? 咱們首先給出核函數(shù)的來(lái)頭:在上文中,我們已經(jīng)了解到了SVM處理線性可分的情況,而對(duì)于非線性的情況,SVM 的處理方法是選擇一個(gè)核函數(shù) κ(?,?) ,通過(guò)將數(shù)據(jù)映射到高維空間,來(lái)解決在原始空間中線性不可分的問(wèn)題。
? ? 此外,因?yàn)橛?xùn)練樣例一般是不會(huì)獨(dú)立出現(xiàn)的,它們總是以成對(duì)樣例的內(nèi)積形式出現(xiàn),而用對(duì)偶形式表示學(xué)習(xí)器的優(yōu)勢(shì)在為在該表示中可調(diào)參數(shù)的個(gè)數(shù)不依賴輸入屬性的個(gè)數(shù),通過(guò)使用恰當(dāng)?shù)暮撕瘮?shù)來(lái)替代內(nèi)積,可以隱式得將非線性的訓(xùn)練數(shù)據(jù)映射到高維空間,而不增加可調(diào)參數(shù)的個(gè)數(shù)(當(dāng)然,前提是核函數(shù)能夠計(jì)算對(duì)應(yīng)著兩個(gè)輸入特征向量的內(nèi)積)。
? ? 在線性不可分的情況下,支持向量機(jī)首先在低維空間中完成計(jì)算,然后通過(guò)核函數(shù)將輸入空間映射到高維特征空間,最終在高維特征空間中構(gòu)造出最優(yōu)分離超平面,從而把平面上本身不好分的非線性數(shù)據(jù)分開(kāi)。如圖7-7所示,一堆數(shù)據(jù)在二維空間無(wú)法劃分,從而映射到三維空間里劃分:
而在我們遇到核函數(shù)之前,如果用原始的方法,那么在用線性學(xué)習(xí)器學(xué)習(xí)一個(gè)非線性關(guān)系,需要選擇一個(gè)非線性特征集,并且將數(shù)據(jù)寫成新的表達(dá)形式,這等價(jià)于應(yīng)用一個(gè)固定的非線性映射,將數(shù)據(jù)映射到特征空間,在特征空間中使用線性學(xué)習(xí)器,因此,考慮的假設(shè)集是這種類型的函數(shù): 這里?:X->F是從輸入空間到某個(gè)特征空間的映射,這意味著建立非線性學(xué)習(xí)器分為兩步:
2.2.2、核函數(shù):如何處理非線性數(shù)據(jù)
? ? 來(lái)看個(gè)核函數(shù)的例子。如下圖所示的兩類數(shù)據(jù),分別分布為兩個(gè)圓圈的形狀,這樣的數(shù)據(jù)本身就是線性不可分的,此時(shí)咱們?cè)撊绾伟堰@兩類數(shù)據(jù)分開(kāi)呢(下文將會(huì)有一個(gè)相應(yīng)的三維空間圖)?
??
? ? 事實(shí)上,上圖所述的這個(gè)數(shù)據(jù)集,是用兩個(gè)半徑不同的圓圈加上了少量的噪音生成得到的,所以,一個(gè)理想的分界應(yīng)該是一個(gè)“圓圈”而不是一條線(超平面)。如果用?X1?和?X2?來(lái)表示這個(gè)二維平面的兩個(gè)坐標(biāo)的話,我們知道一條二次曲線(圓圈是二次曲線的一種特殊情況)的方程可以寫作這樣的形式:
? ? 注意上面的形式,如果我們構(gòu)造另外一個(gè)五維的空間,其中五個(gè)坐標(biāo)的值分別為?Z1=X1,?Z2=X21,?Z3=X2,?Z4=X22,?Z5=X1X2,那么顯然,上面的方程在新的坐標(biāo)系下可以寫作:
? ? 關(guān)于新的坐標(biāo)?Z?,這正是一個(gè) hyper plane 的方程!也就是說(shuō),如果我們做一個(gè)映射??:R2→R5?,將?X?按照上面的規(guī)則映射為?Z?,那么在新的空間中原來(lái)的數(shù)據(jù)將變成線性可分的,從而使用之前我們推導(dǎo)的線性分類算法就可以進(jìn)行處理了。這正是?Kernel?方法處理非線性問(wèn)題的基本思想。
? ? 再進(jìn)一步描述 Kernel 的細(xì)節(jié)之前,不妨再來(lái)看看這個(gè)例子映射過(guò)后的直觀例子。當(dāng)然,你我可能無(wú)法把 5 維空間畫出來(lái),不過(guò)由于我這里生成數(shù)據(jù)的時(shí)候就是用了特殊的情形,具體來(lái)說(shuō),我這里的超平面實(shí)際的方程是這個(gè)樣子(圓心在?X2?軸上的一個(gè)正圓):
? ? 因此我只需要把它映射到?Z1=X21,?Z2=X22,?Z3=X2?這樣一個(gè)三維空間中即可,下圖即是映射之后的結(jié)果,將坐標(biāo)軸經(jīng)過(guò)適當(dāng)?shù)男D(zhuǎn),就可以很明顯地看出,數(shù)據(jù)是可以通過(guò)一個(gè)平面來(lái)分開(kāi)的(pluskid:下面的gif 動(dòng)畫,先用 Matlab 畫出一張張圖片,再用 Imagemagick 拼貼成):
? ? 核函數(shù)相當(dāng)于把原來(lái)的分類函數(shù):
? ? 映射成:
? ? 而其中的可以通過(guò)求解如下 dual 問(wèn)題而得到的:
??? 這樣一來(lái)問(wèn)題就解決了嗎?似乎是的:拿到非線性數(shù)據(jù),就找一個(gè)映射??,然后一股腦把原來(lái)的數(shù)據(jù)映射到新空間中,再做線性 SVM 即可。不過(guò)事實(shí)上沒(méi)有這么簡(jiǎn)單!其實(shí)剛才的方法稍想一下就會(huì)發(fā)現(xiàn)有問(wèn)題:在最初的例子里,我們對(duì)一個(gè)二維空間做映射,選擇的新空間是原始空間的所有一階和二階的組合,得到了五個(gè)維度;如果原始空間是三維,那么我們會(huì)得到 19 維的新空間,這個(gè)數(shù)目是呈爆炸性增長(zhǎng)的,這給??的計(jì)算帶來(lái)了非常大的困難,而且如果遇到無(wú)窮維的情況,就根本無(wú)從計(jì)算了。所以就需要 Kernel 出馬了。
??? 不妨還是從最開(kāi)始的簡(jiǎn)單例子出發(fā),設(shè)兩個(gè)向量和,而即是到前面說(shuō)的五維空間的映射,因此映射過(guò)后的內(nèi)積為:
? ? ? ??(公式說(shuō)明:上面的這兩個(gè)推導(dǎo)過(guò)程中,所說(shuō)的前面的五維空間的映射,這里說(shuō)的前面便是文中2.2.1節(jié)的所述的映射方式,回顧下之前的映射規(guī)則,再看那第一個(gè)推導(dǎo),其實(shí)就是計(jì)算x1,x2各自的內(nèi)積,然后相乘相加即可,第二個(gè)推導(dǎo)則是直接平方,去掉括號(hào),也很容易推出來(lái))
? ? 另外,我們又注意到:
? ? ?二者有很多相似的地方,實(shí)際上,我們只要把某幾個(gè)維度線性縮放一下,然后再加上一個(gè)常數(shù)維度,具體來(lái)說(shuō),上面這個(gè)式子的計(jì)算結(jié)果實(shí)際上和映射
? ? ?之后的內(nèi)積的結(jié)果是相等的,那么區(qū)別在于什么地方呢?
? ? (公式說(shuō)明:上面之中,最后的兩個(gè)式子,第一個(gè)算式,是帶內(nèi)積的完全平方式,可以拆開(kāi),然后,通過(guò)湊一個(gè)得到,第二個(gè)算式,也是根據(jù)第一個(gè)算式湊出來(lái)的)
? ? 回憶剛才提到的映射的維度爆炸,在前一種方法已經(jīng)無(wú)法計(jì)算的情況下,后一種方法卻依舊能從容處理,甚至是無(wú)窮維度的情況也沒(méi)有問(wèn)題。
??? 我們把這里的計(jì)算兩個(gè)向量在隱式映射過(guò)后的空間中的內(nèi)積的函數(shù)叫做核函數(shù)?(Kernel Function) ,例如,在剛才的例子中,我們的核函數(shù)為:
? ??核函數(shù)能簡(jiǎn)化映射空間中的內(nèi)積運(yùn)算——?jiǎng)偤谩芭銮伞钡氖?#xff0c;在我們的?SVM 里需要計(jì)算的地方數(shù)據(jù)向量總是以內(nèi)積的形式出現(xiàn)的。對(duì)比剛才我們上面寫出來(lái)的式子,現(xiàn)在我們的分類函數(shù)為:
? ? 其中??由如下 dual 問(wèn)題計(jì)算而得:
? ? 這樣一來(lái)計(jì)算的問(wèn)題就算解決了,避開(kāi)了直接在高維空間中進(jìn)行計(jì)算,而結(jié)果卻是等價(jià)的!當(dāng)然,因?yàn)槲覀冞@里的例子非常簡(jiǎn)單,所以我可以手工構(gòu)造出對(duì)應(yīng)于的核函數(shù)出來(lái),如果對(duì)于任意一個(gè)映射,想要構(gòu)造出對(duì)應(yīng)的核函數(shù)就很困難了。
2.2.3、幾個(gè)核函數(shù)
? ? 通常人們會(huì)從一些常用的核函數(shù)中選擇(根據(jù)問(wèn)題和數(shù)據(jù)的不同,選擇不同的參數(shù),實(shí)際上就是得到了不同的核函數(shù)),例如:
- 多項(xiàng)式核,顯然剛才我們舉的例子是這里多項(xiàng)式核的一個(gè)特例(R = 1,d = 2)。雖然比較麻煩,而且沒(méi)有必要,不過(guò)這個(gè)核所對(duì)應(yīng)的映射實(shí)際上是可以寫出來(lái)的,該空間的維度是,其中??是原始空間的維度。
- 高斯核,這個(gè)核就是最開(kāi)始提到過(guò)的會(huì)將原始空間映射為無(wú)窮維空間的那個(gè)家伙。不過(guò),如果選得很大的話,高次特征上的權(quán)重實(shí)際上衰減得非常快,所以實(shí)際上(數(shù)值上近似一下)相當(dāng)于一個(gè)低維的子空間;反過(guò)來(lái),如果選得很小,則可以將任意的數(shù)據(jù)映射為線性可分——當(dāng)然,這并不一定是好事,因?yàn)殡S之而來(lái)的可能是非常嚴(yán)重的過(guò)擬合問(wèn)題。不過(guò),總的來(lái)說(shuō),通過(guò)調(diào)控參數(shù),高斯核實(shí)際上具有相當(dāng)高的靈活性,也是使用最廣泛的核函數(shù)之一。下圖所示的例子便是把低維線性不可分的數(shù)據(jù)通過(guò)高斯核函數(shù)映射到了高維空間:
- 線性核,這實(shí)際上就是原始空間中的內(nèi)積。這個(gè)核存在的主要目的是使得“映射后空間中的問(wèn)題”和“映射前空間中的問(wèn)題”兩者在形式上統(tǒng)一起來(lái)了(意思是說(shuō),咱們有的時(shí)候,寫代碼,或?qū)懝降臅r(shí)候,只要寫個(gè)模板或通用表達(dá)式,然后再代入不同的核,便可以了,于此,便在形式上統(tǒng)一了起來(lái),不用再分別寫一個(gè)線性的,和一個(gè)非線性的)。
2.2.4、核函數(shù)的本質(zhì)
上面說(shuō)了這么一大堆,讀者可能還是沒(méi)明白核函數(shù)到底是個(gè)什么東西?我再簡(jiǎn)要概括下,即以下三點(diǎn):? ? 最后引用這里的一個(gè)例子舉例說(shuō)明下核函數(shù)解決非線性問(wèn)題的直觀效果。
? ??假設(shè)現(xiàn)在你是一個(gè)農(nóng)場(chǎng)主,圈養(yǎng)了一批羊群,但為預(yù)防狼群襲擊羊群,你需要搭建一個(gè)籬笆來(lái)把羊群圍起來(lái)。但是籬笆應(yīng)該建在哪里呢?你很可能需要依據(jù)牛群和狼群的位置建立一個(gè)“分類器”,比較下圖這幾種不同的分類器,我們可以看到SVM完成了一個(gè)很完美的解決方案。
? ? 這個(gè)例子從側(cè)面簡(jiǎn)單說(shuō)明了SVM使用非線性分類器的優(yōu)勢(shì),而邏輯模式以及決策樹(shù)模式都是使用了直線方法。
? ? OK,不再做過(guò)多介紹了,對(duì)核函數(shù)有進(jìn)一步興趣的,還可以看看此文。2.3、使用松弛變量處理 outliers 方法
??? 在本文第一節(jié)最開(kāi)始討論支持向量機(jī)的時(shí)候,我們就假定,數(shù)據(jù)是線性可分的,亦即我們可以找到一個(gè)可行的超平面將數(shù)據(jù)完全分開(kāi)。后來(lái)為了處理非線性數(shù)據(jù),在上文2.2節(jié)使用 Kernel 方法對(duì)原來(lái)的線性 SVM 進(jìn)行了推廣,使得非線性的的情況也能處理。雖然通過(guò)映射??將原始數(shù)據(jù)映射到高維空間之后,能夠線性分隔的概率大大增加,但是對(duì)于某些情況還是很難處理。
? ? 例如可能并不是因?yàn)閿?shù)據(jù)本身是非線性結(jié)構(gòu)的,而只是因?yàn)閿?shù)據(jù)有噪音。對(duì)于這種偏離正常位置很遠(yuǎn)的數(shù)據(jù)點(diǎn),我們稱之為 outlier ,在我們?cè)瓉?lái)的 SVM 模型里,outlier 的存在有可能造成很大的影響,因?yàn)槌矫姹旧砭褪侵挥猩贁?shù)幾個(gè) support vector 組成的,如果這些 support vector 里又存在 outlier 的話,其影響就很大了。例如下圖:
??? 用黑圈圈起來(lái)的那個(gè)藍(lán)點(diǎn)是一個(gè) outlier ,它偏離了自己原本所應(yīng)該在的那個(gè)半空間,如果直接忽略掉它的話,原來(lái)的分隔超平面還是挺好的,但是由于這個(gè) outlier 的出現(xiàn),導(dǎo)致分隔超平面不得不被擠歪了,變成途中黑色虛線所示(這只是一個(gè)示意圖,并沒(méi)有嚴(yán)格計(jì)算精確坐標(biāo)),同時(shí) margin 也相應(yīng)變小了。當(dāng)然,更嚴(yán)重的情況是,如果這個(gè) outlier 再往右上移動(dòng)一些距離的話,我們將無(wú)法構(gòu)造出能將數(shù)據(jù)分開(kāi)的超平面來(lái)。
??? 為了處理這種情況,SVM 允許數(shù)據(jù)點(diǎn)在一定程度上偏離一下超平面。例如上圖中,黑色實(shí)線所對(duì)應(yīng)的距離,就是該 outlier 偏離的距離,如果把它移動(dòng)回來(lái),就剛好落在原來(lái)的超平面上,而不會(huì)使得超平面發(fā)生變形了。
? ? 插播下一位讀者@Copper_PKU的理解:“換言之,在有松弛的情況下outline點(diǎn)也屬于支持向量SV,同時(shí),對(duì)于不同的支持向量,拉格朗日參數(shù)的值也不同,如此篇論文《Large Scale Machine Learning》中的下圖所示:
? ??對(duì)于遠(yuǎn)離分類平面的點(diǎn)值為0;對(duì)于邊緣上的點(diǎn)值在[0, 1/L]之間,其中,L為訓(xùn)練數(shù)據(jù)集個(gè)數(shù),即數(shù)據(jù)集大小;對(duì)于outline數(shù)據(jù)和內(nèi)部的數(shù)據(jù)值為1/L。更多請(qǐng)參看本文文末參考條目第51條。”
? ? OK,繼續(xù)回到咱們的問(wèn)題。我們,原來(lái)的約束條件為:
??? 現(xiàn)在考慮到outlier問(wèn)題,約束條件變成了:
? ? 其中稱為松弛變量 (slack variable) ,對(duì)應(yīng)數(shù)據(jù)點(diǎn)允許偏離的 functional margin 的量。當(dāng)然,如果我們運(yùn)行任意大的話,那任意的超平面都是符合條件的了。所以,我們?cè)谠瓉?lái)的目標(biāo)函數(shù)后面加上一項(xiàng),使得這些的總和也要最小:
? ? 其中??是一個(gè)參數(shù),用于控制目標(biāo)函數(shù)中兩項(xiàng)(“尋找 margin 最大的超平面”和“保證數(shù)據(jù)點(diǎn)偏差量最小”)之間的權(quán)重。注意,其中??是需要優(yōu)化的變量(之一),而??是一個(gè)事先確定好的常量。完整地寫出來(lái)是這個(gè)樣子:
用之前的方法將限制或約束條件加入到目標(biāo)函數(shù)中,得到新的拉格朗日函數(shù),如下所示:? ? ?分析方法和前面一樣,轉(zhuǎn)換為另一個(gè)問(wèn)題之后,我們先讓針對(duì)、和最小化:
? ? ?將??帶回??并化簡(jiǎn),得到和原來(lái)一樣的目標(biāo)函數(shù):
? ? ?不過(guò),由于我們得到而又有(作為 Lagrange multiplier 的條件),因此有,所以整個(gè) dual 問(wèn)題現(xiàn)在寫作:
? ? 把前后的結(jié)果對(duì)比一下(錯(cuò)誤修正:圖中的Dual formulation中的Minimize應(yīng)為maxmize):
? ??可以看到唯一的區(qū)別就是現(xiàn)在 dual variable??多了一個(gè)上限??。而 Kernel 化的非線性形式也是一樣的,只要把換成即可。這樣一來(lái),一個(gè)完整的,可以處理線性和非線性并能容忍噪音和 outliers 的支持向量機(jī)才終于介紹完畢了。? ? 行文至此,可以做個(gè)小結(jié),不準(zhǔn)確的說(shuō),SVM它本質(zhì)上即是一個(gè)分類方法,用w^T+b定義分類函數(shù),于是求w、b,為尋最大間隔,引出1/2||w||^2,繼而引入拉格朗日因子,化為對(duì)拉格朗日乘子a的求解(求解過(guò)程中會(huì)涉及到一系列最優(yōu)化或凸二次規(guī)劃等問(wèn)題),如此,求w.b與求a等價(jià),而a的求解可以用一種快速學(xué)習(xí)算法SMO,至于核函數(shù),是為處理非線性情況,若直接映射到高維計(jì)算恐維度爆炸,故在低維計(jì)算,等效高維表現(xiàn)。
? ? OK,理解到這第二層,已經(jīng)能滿足絕大部分人一窺SVM原理的好奇心,然對(duì)于那些想在證明層面理解SVM的則還很不夠,但進(jìn)入第三層理解境界之前,你必須要有比較好的數(shù)理基礎(chǔ)和邏輯證明能力,不然你會(huì)跟我一樣,吃不少苦頭的。
第三層、證明SVM
? ? 說(shuō)實(shí)話,凡是涉及到要證明的東西.理論,便一般不是怎么好惹的東西。絕大部分時(shí)候,看懂一個(gè)東西不難,但證明一個(gè)東西則需要點(diǎn)數(shù)學(xué)功底,進(jìn)一步,證明一個(gè)東西也不是特別難,難的是從零開(kāi)始發(fā)明創(chuàng)造這個(gè)東西的時(shí)候,則顯艱難(因?yàn)槿魏螘r(shí)代,大部分人的研究所得都不過(guò)是基于前人的研究成果,前人所做的是開(kāi)創(chuàng)性工作,而這往往是最艱難最有價(jià)值的,他們被稱為真正的先驅(qū)。牛頓也曾說(shuō)過(guò),他不過(guò)是站在巨人的肩上。你,我則更是如此)。
? ? 正如陳希孺院士在他的著作《數(shù)理統(tǒng)計(jì)學(xué)簡(jiǎn)史》的第4章、最小二乘法中所講:在科研上諸多觀念的革新和突破是有著很多的不易的,或許某個(gè)定理在某個(gè)時(shí)期由某個(gè)人點(diǎn)破了,現(xiàn)在的我們看來(lái)一切都是理所當(dāng)然,但在一切沒(méi)有發(fā)現(xiàn)之前,可能許許多多的頂級(jí)學(xué)者畢其功于一役,耗盡一生,努力了幾十年最終也是無(wú)功而返。
? ? 話休絮煩,要證明一個(gè)東西先要弄清楚它的根基在哪,即構(gòu)成它的基礎(chǔ)是哪些理論。OK,以下內(nèi)容基本是上文中未講到的一些定理的證明,包括其背后的邏輯、來(lái)源背景等東西,還是讀書筆記。
本部分導(dǎo)述
- 3.1節(jié)線性學(xué)習(xí)器中,主要闡述感知機(jī)算法;
- 3.2節(jié)非線性學(xué)習(xí)器中,主要闡述mercer定理;
- 3.3節(jié)、損失函數(shù);
- 3.4節(jié)、最小二乘法;
- 3.5節(jié)、SMO算法;
- 3.6節(jié)、簡(jiǎn)略談?wù)凷VM的應(yīng)用;
3.1、線性學(xué)習(xí)器
3.1.1、感知機(jī)算法
這個(gè)感知機(jī)算法是1956年提出的,年代久遠(yuǎn),依然影響著當(dāng)今,當(dāng)然,可以肯定的是,此算法亦非最優(yōu),后續(xù)會(huì)有更詳盡闡述。不過(guò),有一點(diǎn),你必須清楚,這個(gè)算法是為了干嘛的:不斷的訓(xùn)練試錯(cuò)以期尋找一個(gè)合適的超平面(是的,就這么簡(jiǎn)單)。 下面,舉個(gè)例子。如下圖所示,憑我們的直覺(jué)可以看出,圖中的紅線是最優(yōu)超平面,藍(lán)線則是根據(jù)感知機(jī)算法在不斷的訓(xùn)練中,最終,若藍(lán)線能通過(guò)不斷的訓(xùn)練移動(dòng)到紅線位置上,則代表訓(xùn)練成功。 既然需要通過(guò)不斷的訓(xùn)練以讓藍(lán)線最終成為最優(yōu)分類超平面,那么,到底需要訓(xùn)練多少次呢?Novikoff定理告訴我們當(dāng)間隔是正的時(shí)候感知機(jī)算法會(huì)在有限次數(shù)的迭代中收斂,也就是說(shuō)Novikoff定理證明了感知機(jī)算法的收斂性,即能得到一個(gè)界,不至于無(wú)窮循環(huán)下去。- ?Novikoff定理:如果分類超平面存在, 僅需在序列上迭代幾次,在界為的錯(cuò)誤次數(shù)下就可以找到分類超平面,算法停止。
? ? 在給出幾何間隔的定義之前,咱們首先來(lái)看下,如上圖所示,對(duì)于一個(gè)點(diǎn)?x?,令其垂直投影到超平面上的對(duì)應(yīng)的為?x0?,由于?w?是垂直于超平面的一個(gè)向量,為樣本x到分類間隔的距離,我們有
”
然后后續(xù)怎么推導(dǎo)出最大分類間隔請(qǐng)回到本文第一、二部分,此處不重復(fù)板書。 同時(shí)有一點(diǎn)得注意:感知機(jī)算法雖然可以通過(guò)簡(jiǎn)單迭代對(duì)線性可分?jǐn)?shù)據(jù)生成正確分類的超平面,但不是最優(yōu)效果,那怎樣才能得到最優(yōu)效果呢,就是上文中第一部分所講的尋找最大分類間隔超平面。此外,Novikoff定理的證明請(qǐng)見(jiàn)這里。
3.2、非線性學(xué)習(xí)器
3.2.1、Mercer定理
? ??Mercer定理?:如果函數(shù)K是上的映射(也就是從兩個(gè)n維向量映射到實(shí)數(shù)域)。那么如果K是一個(gè)有效核函數(shù)(也稱為Mercer核函數(shù)),那么當(dāng)且僅當(dāng)對(duì)于訓(xùn)練樣例,其相應(yīng)的核函數(shù)矩陣是對(duì)稱半正定的。? ? ? 要理解這個(gè)Mercer定理,先要了解什么是半正定矩陣,要了解什么是半正定矩陣,先得知道什么是正定矩陣(矩陣?yán)碚摗安┐缶睢?#xff0c;我自己也未能徹底理清,等我理清了再續(xù)寫此節(jié),順便推薦我正在看的一本《矩陣分析與應(yīng)用》)。然后這里有一個(gè)此定理的證明,可以看下。 ? ? 正如@Copper_PKU所說(shuō):核函數(shù)在SVM的分類效果中起了重要的作用,最后這里有個(gè)tutorial可以看看。3.3、損失函數(shù)
? ? 在本文1.0節(jié)有這么一句話“支持向量機(jī)(SVM)是90年代中期發(fā)展起來(lái)的基于統(tǒng)計(jì)學(xué)習(xí)理論的一種機(jī)器學(xué)習(xí)方法,通過(guò)尋求結(jié)構(gòu)化風(fēng)險(xiǎn)最小來(lái)提高學(xué)習(xí)機(jī)泛化能力,實(shí)現(xiàn)經(jīng)驗(yàn)風(fēng)險(xiǎn)和置信范圍的最小化,從而達(dá)到在統(tǒng)計(jì)樣本量較少的情況下,亦能獲得良好統(tǒng)計(jì)規(guī)律的目的。”但初次看到的讀者可能并不了解什么是結(jié)構(gòu)化風(fēng)險(xiǎn),什么又是經(jīng)驗(yàn)風(fēng)險(xiǎn)。要了解這兩個(gè)所謂的“風(fēng)險(xiǎn)”,還得又從監(jiān)督學(xué)習(xí)說(shuō)起。
? ??監(jiān)督學(xué)習(xí)實(shí)際上就是一個(gè)經(jīng)驗(yàn)風(fēng)險(xiǎn)或者結(jié)構(gòu)風(fēng)險(xiǎn)函數(shù)的最優(yōu)化問(wèn)題。風(fēng)險(xiǎn)函數(shù)度量平均意義下模型預(yù)測(cè)的好壞,模型每一次預(yù)測(cè)的好壞用損失函數(shù)來(lái)度量。它從假設(shè)空間F中選擇模型f作為決策函數(shù),對(duì)于給定的輸入X,由f(X)給出相應(yīng)的輸出Y,這個(gè)輸出的預(yù)測(cè)值f(X)與真實(shí)值Y可能一致也可能不一致,用一個(gè)損失函數(shù)來(lái)度量預(yù)測(cè)錯(cuò)誤的程度。損失函數(shù)記為L(zhǎng)(Y, f(X))。
? ? 常用的損失函數(shù)有以下幾種(基本引用自《統(tǒng)計(jì)學(xué)習(xí)方法》):
? ? ??
? ? 如此,SVM有第二種理解,即最優(yōu)化+損失最小,或如@夏粉_百度所說(shuō)“可從損失函數(shù)和優(yōu)化算法角度看SVM,boosting,LR等算法,可能會(huì)有不同收獲”。
? ? OK,關(guān)于更多統(tǒng)計(jì)學(xué)習(xí)方法的問(wèn)題,請(qǐng)參看此文。
? ? 關(guān)于損失函數(shù),如下文讀者評(píng)論中所述:可以看看張潼的這篇《Statistical behavior and consistency of classification methods based on convex risk minimization》。各種算法中常用的損失函數(shù)基本都具有fisher一致性,優(yōu)化這些損失函數(shù)得到的分類器可以看作是后驗(yàn)概率的“代理”。此外,張潼還有另外一篇論文《Statistical analysis of some multi-category large margin classification methods》,在多分類情況下margin loss的分析,這兩篇對(duì)Boosting和SVM使用的損失函數(shù)分析的很透徹。
3.4、最小二乘法
3.4.1、什么是最小二乘法?
? ? 既然本節(jié)開(kāi)始之前提到了最小二乘法,那么下面引用《正態(tài)分布的前世今生》里的內(nèi)容稍微簡(jiǎn)單闡述下。
? ? 我們口頭中經(jīng)常說(shuō):一般來(lái)說(shuō),平均來(lái)說(shuō)。如平均來(lái)說(shuō),不吸煙的健康優(yōu)于吸煙者,之所以要加“平均”二字,是因?yàn)榉彩陆杂欣?#xff0c;總存在某個(gè)特別的人他吸煙但由于經(jīng)常鍛煉所以他的健康狀況可能會(huì)優(yōu)于他身邊不吸煙的朋友。而最小二乘法的一個(gè)最簡(jiǎn)單的例子便是算術(shù)平均。
? ??最小二乘法(又稱最小平方法)是一種數(shù)學(xué)優(yōu)化技術(shù)。它通過(guò)最小化誤差的平方和尋找數(shù)據(jù)的最佳函數(shù)匹配。利用最小二乘法可以簡(jiǎn)便地求得未知的數(shù)據(jù),并使得這些求得的數(shù)據(jù)與實(shí)際數(shù)據(jù)之間誤差的平方和為最小。用函數(shù)表示為:
? 使誤差「所謂誤差,當(dāng)然是觀察值與實(shí)際真實(shí)值的差量」平方和達(dá)到最小以尋求估計(jì)值的方法,就叫做最小二乘法,用最小二乘法得到的估計(jì),叫做最小二乘估計(jì)。當(dāng)然,取平方和作為目標(biāo)函數(shù)只是眾多可取的方法之一。
? ?最小二乘法的一般形式可表示為:
?? ?有效的最小二乘法是勒讓德在 1805 年發(fā)表的,基本思想就是認(rèn)為測(cè)量中有誤差,所以所有方程的累積誤差為
?? ?我們求解出導(dǎo)致累積誤差最小的參數(shù)即可:
? ? 勒讓德在論文中對(duì)最小二乘法的優(yōu)良性做了幾點(diǎn)說(shuō)明:
- ?最小二乘使得誤差平方和最小,并在各個(gè)方程的誤差之間建立了一種平衡,從而防止某一個(gè)極端誤差取得支配地位
- ?計(jì)算中只要求偏導(dǎo)后求解線性方程組,計(jì)算過(guò)程明確便捷
- 最小二乘可以導(dǎo)出算術(shù)平均值作為估計(jì)值
?? ?對(duì)于最后一點(diǎn),從統(tǒng)計(jì)學(xué)的角度來(lái)看是很重要的一個(gè)性質(zhì)。推理如下:假設(shè)真值為?θ,?x1,?,xn為n次測(cè)量值, 每次測(cè)量的誤差為ei=xi?θ,按最小二乘法,誤差累積為
?? ?求解?使達(dá)到最小,正好是算術(shù)平均。
?? ?由于算術(shù)平均是一個(gè)歷經(jīng)考驗(yàn)的方法,而以上的推理說(shuō)明,算術(shù)平均是最小二乘的一個(gè)特例,所以從另一個(gè)角度說(shuō)明了最小二乘方法的優(yōu)良性,使我們對(duì)最小二乘法更加有信心。
?? ?最小二乘法發(fā)表之后很快得到了大家的認(rèn)可接受,并迅速的在數(shù)據(jù)分析實(shí)踐中被廣泛使用。不過(guò)歷史上又有人把最小二乘法的發(fā)明歸功于高斯,這又是怎么一回事呢。高斯在1809年也發(fā)表了最小二乘法,并且聲稱自己已經(jīng)使用這個(gè)方法多年。高斯發(fā)明了小行星定位的數(shù)學(xué)方法,并在數(shù)據(jù)分析中使用最小二乘方法進(jìn)行計(jì)算,準(zhǔn)確的預(yù)測(cè)了谷神星的位置。
? ? 說(shuō)了這么多,貌似跟本文的主題SVM沒(méi)啥關(guān)系呀,別急,請(qǐng)讓我繼續(xù)闡述。本質(zhì)上說(shuō),最小二乘法即是一種參數(shù)估計(jì)方法,說(shuō)到參數(shù)估計(jì),咱們得從一元線性模型說(shuō)起。
3.4.2、最小二乘法的解法
什么是一元線性模型呢? 請(qǐng)?jiān)试S我引用這里的內(nèi)容,先來(lái)梳理下幾個(gè)基本概念:
- 監(jiān)督學(xué)習(xí)中,如果預(yù)測(cè)的變量是離散的,我們稱其為分類(如決策樹(shù),支持向量機(jī)等),如果預(yù)測(cè)的變量是連續(xù)的,我們稱其為回歸。
- 回歸分析中,如果只包括一個(gè)自變量和一個(gè)因變量,且二者的關(guān)系可用一條直線近似表示,這種回歸分析稱為一元線性回歸分析。
- 如果回歸分析中包括兩個(gè)或兩個(gè)以上的自變量,且因變量和自變量之間是線性關(guān)系,則稱為多元線性回歸分析。
- 對(duì)于二維空間線性是一條直線;對(duì)于三維空間線性是一個(gè)平面,對(duì)于多維空間線性是一個(gè)超平面... ??
其中ei為樣本(Xi,?Yi)的誤差。 接著,定義平方損失函數(shù)Q:
則通過(guò)Q最小確定這條直線,即確定,以為變量,把它們看作是Q的函數(shù),就變成了一個(gè)求極值的問(wèn)題,可以通過(guò)求導(dǎo)數(shù)得到。 求Q對(duì)兩個(gè)待估參數(shù)的偏導(dǎo)數(shù):
根據(jù)數(shù)學(xué)知識(shí)我們知道,函數(shù)的極值點(diǎn)為偏導(dǎo)為0的點(diǎn)。??? 解得:
這就是最小二乘法的解法,就是求得平方損失函數(shù)的極值點(diǎn)。自此,你看到求解最小二乘法與求解SVM問(wèn)題何等相似,尤其是定義損失函數(shù),而后通過(guò)偏導(dǎo)求得極值。
? ?OK,更多請(qǐng)參看陳希孺院士的《數(shù)理統(tǒng)計(jì)學(xué)簡(jiǎn)史》的第4章、最小二乘法。
3.5、SMO算法
? ? 在上文中,我們提到了求解對(duì)偶問(wèn)題的序列最小最優(yōu)化SMO算法,但并未提到其具體解法。首先看下最后懸而未決的問(wèn)題:
? ? 等價(jià)于求解:
? ? 1998年,Microsoft Research的John C. Platt在論文《Sequential Minimal Optimization:A Fast Algorithm for Training Support Vector Machines》中提出針對(duì)上述問(wèn)題的解法:SMO算法,它很快便成為最快的二次規(guī)劃優(yōu)化算法,特別是在針對(duì)線性SVM和數(shù)據(jù)稀疏時(shí)性能更優(yōu)。
? ? 接下來(lái),咱們便參考John C. Platt的這篇文章來(lái)看看SMO的解法是怎樣的。
3.5.1、SMO算法的推導(dǎo)
? ? 咱們首先來(lái)定義特征到結(jié)果的輸出函數(shù):
? ? 注:這個(gè)u與我們之前定義的實(shí)質(zhì)是一樣的。
? ? 接著,重新定義下咱們?cè)嫉膬?yōu)化問(wèn)題,權(quán)當(dāng)重新回顧,如下:
? ? 求導(dǎo)得到:
? ? 代入中,可得。
? ? 通過(guò)引入拉格朗日乘子轉(zhuǎn)換為對(duì)偶問(wèn)題后,得:
?? s.t:
且
? ? 注:這里得到的min函數(shù)與我們之前的max函數(shù)實(shí)質(zhì)也是一樣,因?yàn)榘逊?hào)變下,即由min轉(zhuǎn)化為max的問(wèn)題,且yi也與之前的等價(jià),yj亦如此。
經(jīng)過(guò)加入松弛變量后,模型修改為:
? ? 從而最終我們的問(wèn)題變?yōu)?#xff1a;
? ? 下面要解決的問(wèn)題是:在上求上述目標(biāo)函數(shù)的最小值。為了求解這些乘子,每次從中任意抽取兩個(gè)乘子和,然后固定和以外的其它乘子,使得目標(biāo)函數(shù)只是關(guān)于和的函數(shù)。這樣,不斷的從一堆乘子中任意抽取兩個(gè)求解,不斷的迭代求解子問(wèn)題,最終達(dá)到求解原問(wèn)題的目的。
? ? 而原對(duì)偶問(wèn)題的子問(wèn)題的目標(biāo)函數(shù)可以表達(dá)為:
? ? 其中
? ? 為了解決這個(gè)子問(wèn)題,首要問(wèn)題便是每次如何選取和。實(shí)際上,其中一個(gè)乘子是違法KKT條件最嚴(yán)重的,另外一個(gè)乘子則由另一個(gè)約束條件選取。
? ? 根據(jù)KKT條件可以得出目標(biāo)函數(shù)中取值的意義:
這里的還是拉格朗日乘子:
- <=1但是<C則是不滿足的,而原本=C
- >=1但是>0則是不滿足的,而原本=0
- =1但是=0或者=C則表明不滿足的,而原本應(yīng)該是0<<C
? ? 其中,是常數(shù)。
兩個(gè)因子不好同時(shí)求解,所以可先求第二個(gè)乘子的解(),得到的解()之后,再用的解()表示的解()。
? ? 為了求解,得先確定的取值范圍。假設(shè)它的上下邊界分別為H和L,那么有:
接下來(lái),綜合和這兩個(gè)約束條件,求取的取值范圍。
? ? 當(dāng)y1?!=?y2時(shí),根據(jù)可得,所以有,,如下圖所示:
? ? 當(dāng)y1?=?y2時(shí),同樣根據(jù)可得:,所以有,,如下圖所示:
如此,根據(jù)y1和y2異號(hào)或同號(hào),可得出的上下界分別為: 回顧下第二個(gè)約束條件,令上式兩邊乘以y1,可得 其中,。 因此可以用表示,,從而把子問(wèn)題的目標(biāo)函數(shù)轉(zhuǎn)換為只含的問(wèn)題:
對(duì)求導(dǎo),可得
? ? 化簡(jiǎn)下:
然后將、、和代入上式可得:令(表示預(yù)測(cè)值與真實(shí)值之差),,然后上式兩邊同時(shí)除以,得到一個(gè)關(guān)于單變量的解:
這個(gè)解沒(méi)有考慮其約束條件,即是未經(jīng)剪輯時(shí)的解。 然后考慮約束可得到經(jīng)過(guò)剪輯后的的解析解為: 求出了后,便可以求出,得。 那么如何選擇乘子和呢?
- 對(duì)于,即第一個(gè)乘子,可以通過(guò)剛剛說(shuō)的那3種不滿足KKT的條件來(lái)找;
- 而對(duì)于第二個(gè)乘子可以尋找滿足條件 :的乘子。
3.5.2、SMO算法的步驟
綜上,總結(jié)下SMO的主要步驟,如下: 意思是,? ? 知道了如何更新乘子,那么選取哪些乘子進(jìn)行更新呢?具體選擇方法有以下兩個(gè)步驟:
? ? 綜上,SMO算法的基本思想是將Vapnik在1982年提出的Chunking方法推到極致,SMO算法每次迭代只選出兩個(gè)分量ai和aj進(jìn)行調(diào)整,其它分量則保持固定不變,在得到解ai和aj之后,再用ai和aj改進(jìn)其它分量。與通常的分解算法比較,盡管它可能需要更多的迭代次數(shù),但每次迭代的計(jì)算量比較小,所以該算法表現(xiàn)出整理的快速收斂性,且不需要存儲(chǔ)核矩陣,也沒(méi)有矩陣運(yùn)算。
3.5.3、SMO算法的實(shí)現(xiàn)
? ? 行文至此,我相信,SVM理解到了一定程度后,是的確能在腦海里從頭至尾推導(dǎo)出相關(guān)公式的,最初分類函數(shù),最大化分類間隔,max1/||w||,min1/2||w||^2,凸二次規(guī)劃,拉格朗日函數(shù),轉(zhuǎn)化為對(duì)偶問(wèn)題,SMO算法,都為尋找一個(gè)最優(yōu)解,一個(gè)最優(yōu)分類平面。一步步梳理下來(lái),為什么這樣那樣,太多東西可以追究,最后實(shí)現(xiàn)。如下圖所示:
? ? 至于下文中將闡述的核函數(shù)則為是為了更好的處理非線性可分的情況,而松弛變量則是為了糾正或約束少量“不安分”或脫離集體不好歸類的因子。
? ? 臺(tái)灣的林智仁教授寫了一個(gè)封裝SVM算法的libsvm庫(kù),大家可以看看,此外這里還有一份libsvm的注釋文檔。
? ? 除了在這篇論文《fast training of support vector machines using sequential minimal optimization》中platt給出了SMO算法的邏輯代碼之外,這里也有一份SMO的實(shí)現(xiàn)代碼,大家可以看下。
3.6、SVM的應(yīng)用
? ? 或許我們已經(jīng)聽(tīng)到過(guò),SVM在很多諸如文本分類,圖像分類,生物序列分析和生物數(shù)據(jù)挖掘,手寫字符識(shí)別等領(lǐng)域有很多的應(yīng)用,但或許你并沒(méi)強(qiáng)烈的意識(shí)到,SVM可以成功應(yīng)用的領(lǐng)域遠(yuǎn)遠(yuǎn)超出現(xiàn)在已經(jīng)在開(kāi)發(fā)應(yīng)用了的領(lǐng)域。
3.6.1、文本分類
? ? 一個(gè)文本分類系統(tǒng)不僅是一個(gè)自然語(yǔ)言處理系統(tǒng),也是一個(gè)典型的模式識(shí)別系統(tǒng),系統(tǒng)的輸入是需要進(jìn)行分類處理的文本,系統(tǒng)的輸出則是與文本關(guān)聯(lián)的類別。由于篇幅所限,其它更具體內(nèi)容本文將不再詳述。
? ? OK,本節(jié)雖取標(biāo)題為證明SVM,但聰明的讀者們想必早已看出,其實(shí)本部分并無(wú)多少證明部分(特此致歉),怎么辦呢?可以參閱《支持向量機(jī)導(dǎo)論》一書,此書精簡(jiǎn)而有趣。本節(jié)完。
讀者評(píng)論
本文發(fā)表后,微博上的很多朋友給了不少意見(jiàn),以下是節(jié)選的一些精彩評(píng)論:
參考文獻(xiàn)及推薦閱讀
for Training Support Vector Machines:http://www.csie.ntu.edu.tw/~cjlin/papers/quadworkset.pdf;
后記
OK,此文從最初2012年5月開(kāi)始動(dòng)筆,到后續(xù)不斷的修改,創(chuàng)造了三個(gè)之最,即所寫時(shí)間最長(zhǎng),所花心血最大,所改次數(shù)最多,因?yàn)槲业哪繕?biāo)是讓沒(méi)有任何機(jī)器學(xué)習(xí)基礎(chǔ)的都能看懂此文,所以總是不停的改,不停的改,不想放過(guò)任何一個(gè)小的細(xì)節(jié)。再者,引用侯捷的一句話是:天下大作,必作于細(xì)。 最后,非常感謝pluskid及諸多朋友們的文章及著作,讓我有機(jī)會(huì)在其基礎(chǔ)上總結(jié)、深入。有任何問(wèn)題,敬請(qǐng)廣大讀者隨時(shí)不吝批評(píng)指正,感謝。updated、本文PDF版
- 13年11月25日,用chrome瀏覽器打開(kāi)文章,右鍵打印,彈出打印框,把左上角的目標(biāo)更改為“另存為PDF”,成第一個(gè)PDF:http://vdisk.weibo.com/s/zrFL6OXKghu5V。
- 13年12月7日,朋友吳新隆用“印象筆記”提取出博客正文,放到office內(nèi)編輯成此PDF:http://vdisk.weibo.com/s/zrFL6OXKgQHm8,較上一版本添加了完整的書簽。
- 14年 2月18日,朋友鄔書哲用Latex全部重排了本文所有公式,而且給所有公式和圖片全部做了標(biāo)記,Latex版PDF下載地址為:http://vdisk.weibo.com/s/zrFL6OXKgnlcp。
- 15年1月8日,朋友陳笙再為本SVM一文弄了最新的第二個(gè)LaTeX版本,下載地址為:http://pan.baidu.com/s/1eQrgiOU。
? ? 本文會(huì)一直不斷翻新,再者,上述 4 個(gè)PDF的閱讀體驗(yàn)也還不是最好的,如果有朋友制作了更好的PDF,歡迎分享給我:http://weibo.com/julyweibo,謝謝。
轉(zhuǎn)載于:https://www.cnblogs.com/peihao/p/5269157.html
總結(jié)
以上是生活随笔為你收集整理的July大神---SVM讲解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux下dns设置详解
- 下一篇: git查看每个版本间的差异