日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

机器学习之旅:支持向量机通俗导论(理解SVM的三层境界)

發(fā)布時(shí)間:2023/12/14 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习之旅:支持向量机通俗导论(理解SVM的三层境界) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?支持向量機(jī)通俗導(dǎo)論(理解SVM的三層境界)

作者: July、pluskid ; 致謝:白石、J erryLead
出處:結(jié)構(gòu)之法算法之道 blog


前言

? ? 動筆寫這個支持向量機(jī)(support vector machine)是費(fèi)了不少勁和困難的,原因很簡單,一者這個東西本身就并不好懂,要深入學(xué)習(xí)和研究下去需花費(fèi)不少時(shí)間和精力,二者這個東西也不好講清楚,盡管網(wǎng)上已經(jīng)有朋友寫得不錯了(見文末參考鏈接),但在描述數(shù)學(xué)公式的時(shí)候還是顯得不夠。得益于同學(xué)白石的數(shù)學(xué)證明,我還是想嘗試寫一下,希望本文在兼顧通俗易懂的基礎(chǔ)上,真真正正能足以成為一篇完整概括和介紹支持向量機(jī)的導(dǎo)論性的文章。

? ? 本文在寫的過程中,參考了不少資料,包括《支持向量機(jī)導(dǎo)論》、《統(tǒng)計(jì)學(xué)習(xí)方法》及網(wǎng)友pluskid的支持向量機(jī)系列等等,于此,還是一篇學(xué)習(xí)筆記,只是加入了自己的理解和總結(jié),有任何不妥之處,還望海涵。全文宏觀上整體認(rèn)識支持向量機(jī)的概念和用處,微觀上深究部分定理的來龍去脈,證明及原理細(xì)節(jié),力保邏輯清晰 & 通俗易懂。

? ? 同時(shí),閱讀本文時(shí)建議大家盡量使用chrome等瀏覽器,如此公式才能更好的顯示,再者,閱讀時(shí)可拿張紙和筆出來,把本文所有定理.公式都親自推導(dǎo)一遍或者直接打印下來(可直接打印網(wǎng)頁版或本文文末附的PDF,享受隨時(shí)隨地思考、演算的極致快感),在文稿上演算

? ? Ok,還是那句原話,有任何問題,歡迎任何人隨時(shí)不吝指正 & 賜教,感謝。


第一層、了解SVM

1.0、什么是支持向量機(jī)SVM

? ? 要明白什么是SVM,便得從分類說起。

? ? 分類作為數(shù)據(jù)挖掘領(lǐng)域中一項(xiàng)非常重要的任務(wù),它的目的是學(xué)會一個分類函數(shù)或分類模型(或者叫做分類器),而支持向量機(jī)本身便是一種監(jiān)督式學(xué)習(xí)的方法(至于具體什么是監(jiān)督學(xué)習(xí)與非監(jiān)督學(xué)習(xí),請參見此系列Machine L&Data Mining第一篇),它廣泛的應(yīng)用于統(tǒng)計(jì)分類以及回歸分析中。

? ? 支持向量機(jī)(SVM)是90年代中期發(fā)展起來的基于統(tǒng)計(jì)學(xué)習(xí)理論的一種機(jī)器學(xué)習(xí)方法,通過尋求結(jié)構(gòu)化風(fēng)險(xiǎn)最小來提高學(xué)習(xí)機(jī)泛化能力,實(shí)現(xiàn)經(jīng)驗(yàn)風(fēng)險(xiǎn)和置信范圍的最小化,從而達(dá)到在統(tǒng)計(jì)樣本量較少的情況下,亦能獲得良好統(tǒng)計(jì)規(guī)律的目的。

? ? 通俗來講,它是一種二類分類模型,其基本模型定義為特征空間上的間隔最大的線性分類器,即支持向量機(jī)的學(xué)習(xí)策略便是間隔最大化,最終可轉(zhuǎn)化為一個凸二次規(guī)劃問題的求解。

? ? 對于不想深究SVM原理的同學(xué)或比如就只想看看SVM是干嘛的,那么,了解到這里便足夠了,不需上層。而對于那些喜歡深入研究一個東西的同學(xué),甚至究其本質(zhì)的,咱們則還有很長的一段路要走,萬里長征,咱們開始邁第一步吧,相信你能走完。

1.1、線性分類

? ? OK,在講SVM之前,咱們必須先弄清楚一個概念:線性分類器(也可以叫做感知機(jī),這里的機(jī)表示的是一種算法,本文第三部分、證明SVM中會詳細(xì)闡述)。

1.1.1、分類標(biāo)準(zhǔn)

? ? 這里我們考慮的是一個兩類的分類問題,數(shù)據(jù)點(diǎn)用??來表示,這是一個??維向量,w^T中的T代表轉(zhuǎn)置,而類別用??來表示,可以取 1 或者 -1 ,分別代表兩個不同的類。一個線性分類器的學(xué)習(xí)目標(biāo)就是要在??維的數(shù)據(jù)空間中找到一個分類超平面,其方程可以表示為:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ??上面給出了線性分類的定義描述,但或許讀者沒有想過:為何用y取1 或者 -1來表示兩個不同的類別呢?其實(shí),這個1或-1的分類標(biāo)準(zhǔn)起源于logistic回歸,為了完整和過渡的自然性,咱們就再來看看這個logistic回歸。

1.1.2、1或-1分類標(biāo)準(zhǔn)的起源:logistic回歸

Logistic回歸目的是從特征學(xué)習(xí)出一個0/1分類模型,而這個模型是將特性的線性組合作為自變量,由于自變量的取值范圍是負(fù)無窮到正無窮。因此,使用logistic函數(shù)(或稱作sigmoid函數(shù))將自變量映射到(0,1)上,映射后的值被認(rèn)為是屬于y=1的概率。 形式化表示就是 假設(shè)函數(shù)

其中x是n維特征向量,函數(shù)g就是logistic函數(shù)。 而的圖像是

可以看到,將無窮映射到了(0,1)。 而假設(shè)函數(shù)就是特征屬于y=1的概率。

當(dāng)我們要判別一個新來的特征屬于哪個類時(shí),只需求,若大于0.5就是y=1的類,反之屬于y=0類。 再審視一下,發(fā)現(xiàn)只和有關(guān),>0,那么,g(z)只不過是用來映射,真實(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,強(qiáng)調(diào)在全部訓(xùn)練實(shí)例上達(dá)到這個目標(biāo)。

1.1.3、形式化標(biāo)示

我們這次使用的結(jié)果標(biāo)簽是y=-1,y=1,替換在logistic回歸中使用的y=0和y=1。同時(shí)將替換成w和b。以前的,其中認(rèn)為。現(xiàn)在我們替換為b,后面替換為(即)。這樣,我們讓,進(jìn)一步。也就是說除了y由y=0變?yōu)閥=-1,只是標(biāo)記不同外,與logistic回歸的形式化表示沒區(qū)別。 再明確下假設(shè)函數(shù)

上面提到過我們只需考慮的正負(fù)問題,而不用關(guān)心g(z),因此我們這里將g(z)做一個簡化,將其簡單映射到y(tǒng)=-1和y=1上。映射關(guān)系如下:
于此,想必已經(jīng)解釋明白了為何線性分類的標(biāo)準(zhǔn)一般用1 或者-1 來標(biāo)示。 注:上小節(jié)來自jerrylead所作的斯坦福機(jī)器學(xué)習(xí)課程的筆記。

1.2、線性分類的一個例子

? ? 下面舉個簡單的例子,一個二維平面(一個超平面,在二維空間中的例子就是一條直線),如下圖所示,平面上有兩種不同的點(diǎn),分別用兩種不同的顏色表示,一種為紅顏色的點(diǎn),另一種則為藍(lán)顏色的點(diǎn),紅顏色的線表示一個可行的超平面。

? ? 從上圖中我們可以看出,這條紅顏色的線把紅顏色的點(diǎn)和藍(lán)顏色的點(diǎn)分開來了。而這條紅顏色的線就是我們上面所說的超平面,也就是說,這個所謂的超平面的的確確便把這兩種不同顏色的數(shù)據(jù)點(diǎn)分隔開來,在超平面一邊的數(shù)據(jù)點(diǎn)所對應(yīng)的??全是 -1 ,而在另一邊全是 1 。

? ? 接著,我們可以令分類函數(shù)(提醒:下文很大篇幅都在討論著這個分類函數(shù)

?

? ? 顯然,如果??,那么??是位于超平面上的點(diǎn)。我們不妨要求對于所有滿足??的點(diǎn),其對應(yīng)的??等于 -1 ,而??則對應(yīng)??的數(shù)據(jù)點(diǎn)。


? ?? 注:上圖中,定義特征到結(jié)果的輸出函數(shù)與我們之前定義的 實(shí)質(zhì)是一樣的。為什么?因?yàn)闊o論是,還是,不影響最終優(yōu)化結(jié)果。下文你將看到,當(dāng)我們轉(zhuǎn)化到優(yōu)化的時(shí)候,為了求解方便,會把yf(x)令為1,即yf(x)是y(w^x + b),還是y(w^x - b),對我們要優(yōu)化的式子max1/||w||已無影響。

?? ?(有一朋友飛狗來自Mare_Desiderii,看了上面的定義之后,問道:請教一下SVM functional margin 為=y(wTx+b)=yf(x)中的Y是只取1和-1 嗎?y的唯一作用就是確保functional margin的非負(fù)性?真是這樣的么?當(dāng)然不是,詳情請見本文評論下第43樓

? ? 當(dāng)然,有些時(shí)候,或者說大部分時(shí)候數(shù)據(jù)并不是線性可分的,這個時(shí)候滿足這樣條件的超平面就根本不存在(不過關(guān)于如何處理這樣的問題我們后面會講),這里先從最簡單的情形開始推導(dǎo),就假設(shè)數(shù)據(jù)都是線性可分的,亦即這樣的超平面是存在的。
? ? 更進(jìn)一步,我們在進(jìn)行分類的時(shí)候,將數(shù)據(jù)點(diǎn)? 代入? ?中,如果得到的結(jié)果小于 0 ,則賦予其類別 -1 ,如果大于 0 則賦予類別 1 。如果? ,則很難辦了,分到哪一類都不是。

? ?請讀者注意,下面的篇幅將按下述3點(diǎn)走:

  • 咱們就要確定上述分類函數(shù)f(x) = w.x + b(w.x表示w與x的內(nèi)積)中的兩個參數(shù)w和b,通俗理解的話w是法向量,b是截距(再次說明:定義特征到結(jié)果的輸出函數(shù)與我們最開始定義的實(shí)質(zhì)是一樣的);
  • 那如何確定w和b呢?答案是尋找兩條邊界端或極端劃分直線中間的最大間隔(之所以要尋最大間隔是為了能更好的劃分不同類的點(diǎn),下文你將看到:為尋最大間隔,導(dǎo)出1/2||w||^2,繼而引入拉格朗日函數(shù)和對偶變量a,化為對單一因數(shù)對偶變量a的求解,當(dāng)然,這是后話),從而確定最終的最大間隔分類超平面hyper plane和分類函數(shù);
  • 進(jìn)而把尋求分類函數(shù)f(x) = w.x + b的問題轉(zhuǎn)化為對w,b的最優(yōu)化問題,最終化為對偶因子的求解。
  • ? ? 總結(jié)成一句話即是:從最大間隔出發(fā)(目的本就是為了確定法向量w),轉(zhuǎn)化為求對變量w和b的凸二次規(guī)劃問題。亦或如下圖所示(有點(diǎn)需要注意,如讀者@醬爆小八爪所說:從最大分類間隔開始,就一直是凸優(yōu)化問題):


    1.3、函數(shù)間隔Functional margin與幾何間隔Geometrical margin?

    ? ? 一般而言,一個點(diǎn)距離超平面的遠(yuǎn)近可以表示為分類預(yù)測的確信或準(zhǔn)確程度。

    • 在超平面w*x+b=0確定的情況下,|w*x+b|能夠相對的表示點(diǎn)x到距離超平面的遠(yuǎn)近而w*x+b的符號與類標(biāo)記y的符號是否一致表示分類是否正確,所以,可以用量y*(w*x+b)的正負(fù)性來判定或表示分類的正確性和確信度。
    ? ? 于此,我們便引出了定義樣本到分類間隔距離的函數(shù)間隔 functional margin 的概念。

    1.3.1、函數(shù)間隔Functional margin

    ? ? 我們定義函數(shù)間隔functional margin?為:?

    ? ? ? 接著,我們定義超平面(w,b)關(guān)于訓(xùn)練數(shù)據(jù)集T的函數(shù)間隔為超平面(w,b)關(guān)于T中所有樣本點(diǎn)(xi,yi)的函數(shù)間隔最小值,其中,x是特征,y是結(jié)果標(biāo)簽,i表示第i個樣本,有:

    ??=?mini ?(i=1,...n)

    ? ? 然與此同時(shí),問題就出來了。上述定義的函數(shù)間隔雖然可以表示分類預(yù)測的正確性和確信度,但在選擇分類超平面時(shí),只有函數(shù)間隔還遠(yuǎn)遠(yuǎn)不夠,因?yàn)槿绻杀壤母淖僿和b,如將他們改變?yōu)?w和2b,雖然此時(shí)超平面沒有改變,但函數(shù)間隔的值f(x)卻變成了原來的2倍。

    ? ? 其實(shí),我們可以對法向量w加些約束條件,使其表面上看起來規(guī)范化,如此,我們很快又將引出真正定義點(diǎn)到超平面的距離--幾何間隔geometrical margin的概念(很快你將看到,幾何間隔就是函數(shù)間隔除以個||w||,即yf(x) / ||w||)。

    1.3.2、點(diǎn)到超平面的距離定義:幾何間隔Geometrical margin

    ? ? 在給出幾何間隔的定義之前,咱們首先來看下,如上圖所示,對于一個點(diǎn)??,令其垂直投影到超平面上的對應(yīng)的為??,由于??是垂直于超平面的一個向量,為樣本x到分類間隔的距離,我們有

    ? ? ? ? ? ? ?? ||w||表示的是范數(shù),關(guān)于范數(shù)的概念參見這里

    ? ? 又由于??是超平面上的點(diǎn),滿足??,代入超平面的方程即可算出?


    (有的書上會寫成把||w|| 分開相除的形式,如本文參考文獻(xiàn)及推薦閱讀條目11,其中,||w||為w的二階泛數(shù))

    ? ?不過這里的是帶符號的,我們需要的只是它的絕對值,因此類似地,也乘上對應(yīng)的類別?即可,因此實(shí)際上我們定義?幾何間隔geometrical margin?為(注:別忘了,上面的定義,=y(wTx+b)=yf(x)?):

    ? ??(代人相關(guān)式子可以得出:yi*(w/||w|| + b/||w||))

    ? ? 正如本文評論下讀者popol1991留言:函數(shù)間隔y*(wx+b)=y*f(x)實(shí)際上就是|f(x)|,只是人為定義的一個間隔度量;而幾何間隔|f(x)|/||w||才是直觀上的點(diǎn)到超平面距離。

    ? ? 想想二維空間里的點(diǎn)到直線公式:假設(shè)一條直線的方程為ax+by+c=0,點(diǎn)P的坐標(biāo)是(x0,y0),則點(diǎn)到直線距離為|ax0+by0+c|/sqrt(a^2+b^2)。如下圖所示:
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
    ? ? 那么如果用向量表示,設(shè)w=(a,b),f(x)=wx+c,那么這個距離正是|f(p)|/||w||。

    1.4、最大間隔分類器Maximum Margin Classifier的定義

    ? ? 于此,我們已經(jīng)很明顯的看出,函數(shù)間隔functional margin 和 幾何間隔geometrical margin 相差一個的縮放因子。按照我們前面的分析,對一個數(shù)據(jù)點(diǎn)進(jìn)行分類,當(dāng)它的 margin 越大的時(shí)候,分類的 confidence 越大。對于一個包含??個點(diǎn)的數(shù)據(jù)集,我們可以很自然地定義它的 margin 為所有這??個點(diǎn)的 margin 值中最小的那個。于是,為了使得分類的 confidence 高,我們希望所選擇的超平面hyper plane?能夠最大化這個 margin 值。

    ? ? 通過上節(jié),我們已經(jīng)知道:

    1、functional margin 明顯是不太適合用來最大化的一個量,因?yàn)樵?hyper plane 固定以后,我們可以等比例地縮放??的長度和??的值,這樣可以使得的值任意大,亦即 functional margin可以在 hyper plane 保持不變的情況下被取得任意大,

    2、而 geometrical margin 則沒有這個問題,因?yàn)槌狭诉@個分母,所以縮放??和??的時(shí)候的值是不會改變的,它只隨著 hyper plane 的變動而變動,因此,這是更加合適的一個 margin 。

    ? ? 這樣一來,我們的 maximum margin classifier 的目標(biāo)函數(shù)可以定義為:

    ??? 當(dāng)然,還需要滿足一些條件,根據(jù) margin 的定義,我們有

    ??? 其中?(等價(jià)于=??/||w||,故有稍后的??=1 時(shí),??= 1 / ||w||),處于方便推導(dǎo)和優(yōu)化的目的,我們可以令=1(對目標(biāo)函數(shù)的優(yōu)化沒有影響,至于為什么,請見本文評論下第42樓回復(fù))?,此時(shí),上述的目標(biāo)函數(shù)轉(zhuǎn)化為(其中,s.t.,即subject to的意思,它導(dǎo)出的是約束條件)

    ? ? 通過求解這個問題,我們就可以找到一個 margin 最大的 classifier ,如下圖所示,中間的紅色線條是 Optimal Hyper Plane ,另外兩條線到紅線的距離都是等于(便是上文所定義的geometrical margin,當(dāng)=1時(shí),便為1/||w||,而我們上面得到的目標(biāo)函數(shù)便是在相應(yīng)的約束條件下,要最大化這個1/||w||值)

    ? ? 通過最大化 margin ,我們使得該分類器對數(shù)據(jù)進(jìn)行分類時(shí)具有了最大的 confidence,從而設(shè)計(jì)決策最優(yōu)分類超平面。

    1.5、到底什么是Support Vector

    ? ? 上節(jié),我們介紹了Maximum Margin Classifier,但并沒有具體闡述到底什么是Support Vector,本節(jié),咱們來重點(diǎn)闡述這個概念。咱們不妨先來回憶一下上節(jié)1.4節(jié)最后一張圖:

    ? ? 可以看到兩個支撐著中間的 gap 的超平面,它們到中間的純紅線separating hyper plane 的距離相等,即我們所能得到的最大的 geometrical margin,而“支撐”這兩個超平面的必定會有一些點(diǎn),而這些“支撐”的點(diǎn)便叫做支持向量Support Vector。

    ? ?或亦可看下來自PPT中的一張圖,Support?Vector便是那藍(lán)色虛線和粉紅色虛線上的點(diǎn):

    ? ? 很顯然,由于這些 supporting vector 剛好在邊界上,所以它們滿足還記得我們把 functional margin 定為 1 了嗎?上節(jié)中:“處于方便推導(dǎo)和優(yōu)化的目的,我們可以令=1”),而對于所有不是支持向量的點(diǎn),也就是在“陣地后方”的點(diǎn),則顯然有。當(dāng)然,除了從幾何直觀上之外,支持向量的概念也可以從下文優(yōu)化過程的推導(dǎo)中得到。

    ? ? OK,到此為止,算是了解到了SVM的第一層,對于那些只關(guān)心怎么用SVM的朋友便已足夠,不必再更進(jìn)一層深究其更深的原理。


    第二層、深入SVM

    2.1、從線性可分到線性不可分

    2.1.1、從原始問題到對偶問題的求解

    ? ? 雖然上文1.4節(jié)給出了目標(biāo)函數(shù),卻沒有講怎么來求解。現(xiàn)在就讓我們來處理這個問題。回憶一下之前得到的目標(biāo)函數(shù)(subject to導(dǎo)出的則是約束條件):

    由于求的最大值相當(dāng)于求的最小值,所以上述問題等價(jià)于(w由分母變成分子,從而也有原來的max問題變?yōu)閙in問題,很明顯,兩者問題等價(jià)):

  • 轉(zhuǎn)化到這個形式后,我們的問題成為了一個凸優(yōu)化問題,或者更具體的說,因?yàn)楝F(xiàn)在的目標(biāo)函數(shù)是二次的,約束條件是線性的,所以它是一個凸二次規(guī)劃問題。這個問題可以用任何現(xiàn)成的?QP (Quadratic Programming)?的優(yōu)化包進(jìn)行求解,歸結(jié)為一句話即是:在一定的約束條件下,目標(biāo)最優(yōu),損失最小
  • 但雖然這個問題確實(shí)是一個標(biāo)準(zhǔn)的 QP 問題,但是它也有它的特殊結(jié)構(gòu),通過?Lagrange Duality?變換到對偶變量 (dual variable) 的優(yōu)化問題之后,可以找到一種更加有效的方法來進(jìn)行求解,而且通常情況下這種方法比直接使用通用的 QP 優(yōu)化包進(jìn)行優(yōu)化要高效得多。
  • ? ??也就說,除了用解決QP問題的常規(guī)方法之外,還可以通過求解對偶問題得到最優(yōu)解,這就是線性可分條件下支持向量機(jī)的對偶算法,這樣做的優(yōu)點(diǎn)在于:一者對偶問題往往更容易求解;二者可以自然的引入核函數(shù),進(jìn)而推廣到非線性分類問題。

    ? ? 至于上述提到,關(guān)于什么是Lagrange duality?簡單地來說,通過給每一個約束條件加上一個 Lagrange multiplier(拉格朗日乘值),即引入拉格朗日乘子,如此我們便可以通過拉格朗日函數(shù)將約束條件融和到目標(biāo)函數(shù)里去(也就是說把條件融合到一個函數(shù)里頭,現(xiàn)在只用一個函數(shù)表達(dá)式便能清楚的表達(dá)出我們的問題)

    ? ?然后我們令

    ? ? 容易驗(yàn)證,當(dāng)某個約束條件不滿足時(shí),例如,那么我們顯然有只要令即可)。而當(dāng)所有約束條件都滿足時(shí),則有亦即我們最初要最小化的量。因此,在要求約束條件得到滿足的情況下最小化實(shí)際上等價(jià)于直接最小化(當(dāng)然,這里也有約束條件,就是) ? ,因?yàn)槿绻s束條件沒有得到滿足,會等于無窮大,自然不會是我們所要求的最小值。具體寫出來,我們現(xiàn)在的目標(biāo)函數(shù)變成了:

    ? ? 這里用表示這個問題的最優(yōu)值,這個問題和我們最初的問題是等價(jià)的。不過,現(xiàn)在我們來把最小和最大的位置交換一下(稍后,你將看到,當(dāng)下面式子滿足了一定的條件之后,這個式子d?便是上式P?的對偶形式表示):

    ? ? 當(dāng)然,交換以后的問題不再等價(jià)于原問題,這個新問題的最優(yōu)值用來表示。并且,我們有?,這在直觀上也不難理解,最大值中最小的一個總也比最小值中最大的一個要大吧!??總之,第二個問題的最優(yōu)值在這里提供了一個第一個問題的最優(yōu)值的一個下界,在滿足某些條件的情況下,這兩者相等,這個時(shí)候我們就可以通過求解第二個問題來間接地求解第一個問題。

    ? ? 也就是說,下面我們將先求L 對w、b的極小,再求L 對的極大。而且,之所以從minmax的原始問題,轉(zhuǎn)化為maxmin的對偶問題,一者因?yàn)槭堑慕平?#xff0c;二者,轉(zhuǎn)化為對偶問題后,更容易求解。

    2.1.2、KKT條件

    ??? 與此同時(shí),上段說“在滿足某些條件的情況下”,這所謂的“滿足某些條件”就是要滿足KKT條件那KKT條件的表現(xiàn)形式是什么呢?據(jù)維基百科:KKT 條件的介紹,一般地,一個最優(yōu)化數(shù)學(xué)模型能夠表示成下列標(biāo)準(zhǔn)形式:

    ? ? 其中,f(x)是需要最小化的函數(shù),h(x)是等式約束,g(x)是不等式約束,p和q分別為等式約束和不等式約束的數(shù)量。同時(shí),我們得明白以下兩個定理:

    • 凸優(yōu)化的概念:?為一凸集,??為一凸函數(shù)。凸優(yōu)化就是要找出一點(diǎn)??,使得每一??滿足??。
    • KKT條件的意義:它是一個非線性規(guī)劃(Nonlinear Programming)問題能有最優(yōu)化解法的必要和充分條件。

    ? ? 那到底什么是所謂Karush-Kuhn-Tucker條件呢?KKT條件就是指上面最優(yōu)化數(shù)學(xué)模型的標(biāo)準(zhǔn)形式中的最小點(diǎn)?x*?必須滿足下面的條件:

    ? ? 經(jīng)過論證,我們這里的問題是滿足 KKT 條件的(首先已經(jīng)滿足Slater condition,再者f和gi也都是可微的,即L對w和b都可導(dǎo)),因此現(xiàn)在我們便轉(zhuǎn)化為求解第二個問題。也就是說,現(xiàn)在,咱們的原問題通過滿足一定的條件,已經(jīng)轉(zhuǎn)化成了對偶問題。而求解這個對偶學(xué)習(xí)問題,分為3個步驟,首先要讓L(w,b,a)?關(guān)于??和??最小化,然后求對α的極大,最后利用SMO算法求解對偶因子。

    2.1.3、對偶問題求解的3個步驟

    ? ??(1)、首先固定要讓??關(guān)于??和??最小化,我們分別對w,b求偏導(dǎo)數(shù),即令??和??等于零(對w求導(dǎo)結(jié)果的解釋請看本文評論下第45樓回復(fù)):

    ? ? 以上結(jié)果代回上述的??

    ? ? 得到:

    ? ? 提醒:有讀者可能會問上述推導(dǎo)過程如何而來?說實(shí)話,其具體推導(dǎo)過程是比較復(fù)雜的,如下圖所示:

    ? ? ? 最后,得到:

    ? ? 如 jerrylead所說:“倒數(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)整。

    ? ? 從上面的最后一個式子,我們可以看出,此時(shí)的拉格朗日函數(shù)只包含了一個變量,那就是,然后下文的第2步,求出了便能求出w,和b,由此可見,上文第1.2節(jié)提出來的核心問題:分類函數(shù)也就可以輕而易舉的求出來了。

    ? ??(2)、求對的極大即是關(guān)于對偶問題的最優(yōu)化問題,從上面的式子得到:

    ? ? (不得不提醒下讀者:經(jīng)過上面第一個步驟的求w和b,得到的拉格朗日函數(shù)式子已經(jīng)沒有了變量w,b,只有,而反過來,求得的將能導(dǎo)出w,b的解,最終得出分離超平面和分類決策函數(shù)。為何呢?因?yàn)?/span>如果求出了,根據(jù),即可求出w。然后通過,即可求出b?)

    ? ?如前面所說,這個問題有更加高效的優(yōu)化算法,即我們常說的SMO算法。

    2.1.4、序列最小最優(yōu)化SMO算法

    ? ? 細(xì)心的讀者讀至上節(jié)末尾處,怎么拉格朗日乘子的值可能依然心存疑惑。實(shí)際上,關(guān)于的求解可以用一種快速學(xué)習(xí)算法即SMO算法,這里先簡要介紹下。

    ? ? ? OK,當(dāng):

    要解決的是在參數(shù)上求最大值W的問題,至于和都是已知數(shù)(其中??是一個參數(shù),用于控制目標(biāo)函數(shù)中兩項(xiàng)(“尋找 margin 最大的超平面”和“保證數(shù)據(jù)點(diǎn)偏差量最小”)之間的權(quán)重。和上文最后的式子對比一下,可以看到唯一的區(qū)別就是現(xiàn)在 dual variable??多了一個上限??,關(guān)于的具體由來請查看下文第2.3節(jié))。 要了解這個SMO算法是如何推導(dǎo)的,請?zhí)较挛牡?.5節(jié)、SMO算法。

    2.1.5、線性不可分的情況

    ? ? OK,為過渡到下節(jié)2.2節(jié)所介紹的核函數(shù),讓我們再來看看上述推導(dǎo)過程中得到的一些有趣的形式。首先就是關(guān)于我們的 hyper plane ,對于一個數(shù)據(jù)點(diǎn)??進(jìn)行分類,實(shí)際上是通過把??帶入到算出結(jié)果然后根據(jù)其正負(fù)號來進(jìn)行類別劃分的。而前面的推導(dǎo)中我們得到?

    ? ? 因此分類函數(shù)為:

    ? ? 這里的形式的有趣之處在于,對于新點(diǎn)?x的預(yù)測,只需要計(jì)算它與訓(xùn)練數(shù)據(jù)點(diǎn)的內(nèi)積即可(表示向量內(nèi)積),這一點(diǎn)至關(guān)重要,是之后使用 Kernel 進(jìn)行非線性推廣的基本前提。此外,所謂 Supporting Vector 也在這里顯示出來——事實(shí)上,所有非Supporting Vector 所對應(yīng)的系數(shù)都是等于零的,因此對于新點(diǎn)的內(nèi)積計(jì)算實(shí)際上只要針對少量的“支持向量”而不是所有的訓(xùn)練數(shù)據(jù)即可。

    ? ? 為什么非支持向量對應(yīng)的等于零呢?直觀上來理解的話,就是這些“后方”的點(diǎn)——正如我們之前分析過的一樣,對超平面是沒有影響的,由于分類完全有超平面決定,所以這些無關(guān)的點(diǎn)并不會參與分類問題的計(jì)算,因而也就不會產(chǎn)生任何影響了。

    ? ? 回憶一下我們2.1.1節(jié)中通過 Lagrange multiplier得到的目標(biāo)函數(shù):

    ? ? ?注意到如果??是支持向量的話,上式中紅顏色的部分是等于 0 的(因?yàn)橹С窒蛄康?functional margin 等于 1 ),而對于非支持向量來說,functional margin 會大于 1 ,因此紅顏色部分是大于零的,而又是非負(fù)的,為了滿足最大化,必須等于 0 。這也就是這些非Supporting Vector 的點(diǎn)的局限性。?

    ? ? 從1.5節(jié)到上述所有這些東西,便得到了一個maximum margin hyper plane classifier,這就是所謂的支持向量機(jī)(Support Vector Machine)。當(dāng)然,到目前為止,我們的 SVM 還比較弱,只能處理線性的情況,不過,在得到了對偶dual 形式之后,通過?Kernel 推廣到非線性的情況就變成了一件非常容易的事情了(相信,你還記得本節(jié)開頭所說的:“通過求解對偶問題得到最優(yōu)解,這就是線性可分條件下支持向量機(jī)的對偶算法,這樣做的優(yōu)點(diǎn)在于:一者對偶問題往往更容易求解;二者可以自然的引入核函數(shù),進(jìn)而推廣到非線性分類問題”)。

    2.2、核函數(shù)Kernel

    2.2.1、特征空間的隱式映射:核函數(shù)

    ? ? 咱們首先給出核函數(shù)的來頭:

    • 在上文中,我們已經(jīng)了解到了SVM處理線性可分的情況,而對于非線性的情況,SVM 的處理方法是選擇一個核函數(shù)??,通過將數(shù)據(jù)映射到高維空間,來解決在原始空間中線性不可分的問題。由于核函數(shù)的優(yōu)良品質(zhì),這樣的非線性擴(kuò)展在計(jì)算量上并沒有比原來復(fù)雜多少,這一點(diǎn)是非常難得的。當(dāng)然,這要?dú)w功于核方法——除了 SVM 之外,任何將計(jì)算表示為數(shù)據(jù)點(diǎn)的內(nèi)積的方法,都可以使用核方法進(jìn)行非線性擴(kuò)展。

    ? ? 也就是說,Minsky和Papert早就在20世紀(jì)60年代就已經(jīng)明確指出線性學(xué)習(xí)器計(jì)算能力有限。為什么呢?因?yàn)榭傮w上來講,現(xiàn)實(shí)世界復(fù)雜的應(yīng)用需要有比線性函數(shù)更富有表達(dá)能力的假設(shè)空間,也就是說,目標(biāo)概念通常不能由給定屬性的簡單線性函數(shù)組合產(chǎn)生,而是應(yīng)該一般地尋找待研究數(shù)據(jù)的更為一般化的抽象特征。

    ? ? 而下文我們將具體介紹的核函數(shù)則提供了此種問題的解決途徑,從下文你將看到,核函數(shù)通過把數(shù)據(jù)映射到高維空間來增加第一節(jié)所述的線性學(xué)習(xí)器的能力,使得線性學(xué)習(xí)器對偶空間的表達(dá)方式讓分類操作更具靈活性和可操作性。因?yàn)?span style="font-weight:700;">訓(xùn)練樣例一般是不會獨(dú)立出現(xiàn)的,它們總是以成對樣例的內(nèi)積形式出現(xiàn),而用對偶形式表示學(xué)習(xí)器的優(yōu)勢在為在該表示中可調(diào)參數(shù)的個數(shù)不依賴輸入屬性的個數(shù),通過使用恰當(dāng)?shù)暮撕瘮?shù)來替代內(nèi)積,可以隱式得將非線性的訓(xùn)練數(shù)據(jù)映射到高維空間,而不增加可調(diào)參數(shù)的個數(shù)(當(dāng)然,前提是核函數(shù)能夠計(jì)算對應(yīng)著兩個輸入特征向量的內(nèi)積)。

    ? ??1、簡而言之:在線性不可分的情況下,支持向量機(jī)通過某種事先選擇的非線性映射(核函數(shù))將輸入變量映射到一個高維特征空間,在這個空間中構(gòu)造最優(yōu)分類超平面。我們使用SVM進(jìn)行數(shù)據(jù)集分類工作的過程首先是同預(yù)先選定的一些非線性映射將輸入空間映射到高維特征空間(下圖很清晰的表達(dá)了通過映射到高維特征空間,而把平面上本身不好分的非線性數(shù)據(jù)分了開來): ? ? 使得在高維屬性空間中有可能最訓(xùn)練數(shù)據(jù)實(shí)現(xiàn)超平面的分割,避免了在原輸入空間中進(jìn)行非線性曲面分割計(jì)算。SVM數(shù)據(jù)集形成的分類函數(shù)具有這樣的性質(zhì):它是一組以支持向量為參數(shù)的非線性函數(shù)的線性組合,因此分類函數(shù)的表達(dá)式僅和支持向量的數(shù)量有關(guān),而獨(dú)立于空間的維度,在處理高維輸入空間的分類時(shí),這種方法尤其有效,其工作原理如下圖所示: ? ? 2、具體點(diǎn)說:在我們遇到核函數(shù)之前,如果用原始的方法,那么在用線性學(xué)習(xí)器學(xué)習(xí)一個非線性關(guān)系,需要選擇一個非線性特征集,并且將數(shù)據(jù)寫成新的表達(dá)形式,這等價(jià)于應(yīng)用一個固定的非線性映射,將數(shù)據(jù)映射到特征空間,在特征空間中使用線性學(xué)習(xí)器,因此,考慮的假設(shè)集是這種類型的函數(shù): 這里?:X->F是從輸入空間到某個特征空間的映射,這意味著建立非線性學(xué)習(xí)器分為兩步:
  • 首先使用一個非線性映射將數(shù)據(jù)變換到一個特征空間F,
  • 然后在特征空間使用線性學(xué)習(xí)器分類。
  • 在上文我提到過對偶形式,而這個對偶形式就是線性學(xué)習(xí)器的一個重要性質(zhì),這意味著假設(shè)可以表達(dá)為訓(xùn)練點(diǎn)的線性組合,因此決策規(guī)則可以用測試點(diǎn)和訓(xùn)練點(diǎn)的內(nèi)積來表示: 如果有一種方式可以在特征空間中直接計(jì)算內(nèi)積φ(xi?·?φ(x),就像在原始輸入點(diǎn)的函數(shù)中一樣,就有可能將兩個步驟融合到一起建立一個非線性的學(xué)習(xí)器,這樣直接計(jì)算法的方法稱為核函數(shù)方法,于是,核函數(shù)便橫空出世了。? ? 這里我直接給出一個定義:核是一個函數(shù)K,對所有x,z(-X,滿足,這里φ是從X到內(nèi)積特征空間F的映射。 ? ??3、總而言之,舉個簡單直接點(diǎn)的例子,如@Wind所說:如果不是用核技術(shù),就會先計(jì)算線性映射phy(x1)和phy(x2),然后計(jì)算這兩個特征的內(nèi)積,使用了核技術(shù)之后,先把phy(x1)和phy(x2)的通用表達(dá)式子:< phy(x1),phy(x2) >=k( <x1,x2> )計(jì)算出來,注意到這里的< , >表示內(nèi)積,k( , )就是對應(yīng)的核函數(shù),這個表達(dá)往往非常簡單,所以計(jì)算非常方便。 ? ? OK,接下來,咱們就進(jìn)一步從外到里,來探探這個核函數(shù)的真面目。

    2.2.2、核函數(shù):如何處理非線性數(shù)據(jù)

    ? ? 在2.1節(jié)中我們介紹了線性情況下的支持向量機(jī),它通過尋找一個線性的超平面來達(dá)到對數(shù)據(jù)進(jìn)行分類的目的。不過,由于是線性方法,所以對非線性的數(shù)據(jù)就沒有辦法處理。舉個例子來說,則是如下圖所示的兩類數(shù)據(jù),分別分布為兩個圓圈的形狀,這樣的數(shù)據(jù)本身就是線性不可分的,此時(shí)咱們該如何把這兩類數(shù)據(jù)分開呢(下文將會有一個相應(yīng)的三維空間圖)?

    ??

    ? ? 事實(shí)上,上圖所述的這個數(shù)據(jù)集,是用兩個半徑不同的圓圈加上了少量的噪音生成得到的,所以,一個理想的分界應(yīng)該是一個“圓圈”而不是一條線(超平面)。如果用??和??來表示這個二維平面的兩個坐標(biāo)的話,我們知道一條二次曲線(圓圈是二次曲線的一種特殊情況)的方程可以寫作這樣的形式:

    ? ? 注意上面的形式,如果我們構(gòu)造另外一個五維的空間,其中五個坐標(biāo)的值分別為?,?,?,?,?,那么顯然,上面的方程在新的坐標(biāo)系下可以寫作:

    ? ? 關(guān)于新的坐標(biāo)??,這正是一個 hyper plane 的方程!也就是說,如果我們做一個映射??,將??按照上面的規(guī)則映射為??,那么在新的空間中原來的數(shù)據(jù)將變成線性可分的,從而使用之前我們推導(dǎo)的線性分類算法就可以進(jìn)行處理了。這正是?Kernel?方法處理非線性問題的基本思想。

    ? ? 再進(jìn)一步描述 Kernel 的細(xì)節(jié)之前,不妨再來看看這個例子映射過后的直觀例子。當(dāng)然,你我可能無法把 5 維空間畫出來,不過由于我這里生成數(shù)據(jù)的時(shí)候就是用了特殊的情形,具體來說,我這里的超平面實(shí)際的方程是這個樣子(圓心在??軸上的一個正圓):

    ? ? 因此我只需要把它映射到?,?,??這樣一個三維空間中即可,下圖即是映射之后的結(jié)果,將坐標(biāo)軸經(jīng)過適當(dāng)?shù)男D(zhuǎn),就可以很明顯地看出,數(shù)據(jù)是可以通過一個平面來分開的(pluskid:下面的gif 動畫,先用 Matlab 畫出一張張圖片,再用 Imagemagick 拼貼成):

    ? ? 現(xiàn)在讓我們再回到 SVM 的情形,假設(shè)原始的數(shù)據(jù)時(shí)非線性的,我們通過一個映射??將其映射到一個高維空間中,數(shù)據(jù)變得線性可分了,這個時(shí)候,我們就可以使用原來的推導(dǎo)來進(jìn)行計(jì)算,只是所有的推導(dǎo)現(xiàn)在是在新的空間,而不是原始空間中進(jìn)行。當(dāng)然,推導(dǎo)過程也并不是可以簡單地直接類比的,例如,原本我們要求超平面的法向量??,但是如果映射之后得到的新空間的維度是無窮維的(確實(shí)會出現(xiàn)這樣的情況,比如后面會提到的 高斯核Gaussian Kernel?),要表示一個無窮維的向量描述起來就比較麻煩。于是我們不妨先忽略過這些細(xì)節(jié),直接從最終的結(jié)論來分析,回憶一下,我們上一次2.1節(jié)中得到的最終的分類函數(shù)是這樣的:

    ? ? 現(xiàn)在則是在映射過后的空間,即:

    ? ??而其中的??也是通過求解如下 dual 問題而得到的:

    ??? 這樣一來問題就解決了嗎?似乎是的:拿到非線性數(shù)據(jù),就找一個映射??,然后一股腦把原來的數(shù)據(jù)映射到新空間中,再做線性 SVM 即可。不過事實(shí)上沒有這么簡單!其實(shí)剛才的方法稍想一下就會發(fā)現(xiàn)有問題:在最初的例子里,我們對一個二維空間做映射,選擇的新空間是原始空間的所有一階和二階的組合,得到了五個維度;如果原始空間是三維,那么我們會得到 19 維的新空間,這個數(shù)目是呈爆炸性增長的,這給??的計(jì)算帶來了非常大的困難,而且如果遇到無窮維的情況,就根本無從計(jì)算了。所以就需要 Kernel 出馬了。

    ??? 不妨還是從最開始的簡單例子出發(fā),設(shè)兩個向量和,而即是到前面2.2.1節(jié)說的五維空間的映射,因此映射過后的內(nèi)積為:

    ? ? ? ??(公式說明:上面的這兩個推導(dǎo)過程中,所說的前面的五維空間的映射,這里說的前面便是文中2.2.1節(jié)的所述的映射方式,仔細(xì)看下2.2.1節(jié)的映射規(guī)則,再看那第一個推導(dǎo),其實(shí)就是計(jì)算x1,x2各自的內(nèi)積,然后相乘相加即可,第二個推導(dǎo)則是直接平方,去掉括號,也很容易推出來

    ? ? 另外,我們又注意到:

    ? ? ?二者有很多相似的地方,實(shí)際上,我們只要把某幾個維度線性縮放一下,然后再加上一個常數(shù)維度,具體來說,上面這個式子的計(jì)算結(jié)果實(shí)際上和映射

    ? ? ?之后的內(nèi)積的結(jié)果是相等的,那么區(qū)別在于什么地方呢?

  • 一個是映射到高維空間中,然后再根據(jù)內(nèi)積的公式進(jìn)行計(jì)算;
  • 而另一個則直接在原來的低維空間中進(jìn)行計(jì)算,而不需要顯式地寫出映射后的結(jié)果
  • ? ? (公式說明:上面之中,最后的兩個式子,第一個算式,是帶內(nèi)積的完全平方式,可以拆開,然后,通過湊一個得到,第二個算式,也是根據(jù)第一個算式湊出來的

    ? ? 回憶剛才提到的映射的維度爆炸,在前一種方法已經(jīng)無法計(jì)算的情況下,后一種方法卻依舊能從容處理,甚至是無窮維度的情況也沒有問題。

    ??? 我們把這里的計(jì)算兩個向量在隱式映射過后的空間中的內(nèi)積的函數(shù)叫做核函數(shù)?(Kernel Function) ,例如,在剛才的例子中,我們的核函數(shù)為:

    ? ??核函數(shù)能簡化映射空間中的內(nèi)積運(yùn)算——剛好“碰巧”的是,在我們的?SVM 里需要計(jì)算的地方數(shù)據(jù)向量總是以內(nèi)積的形式出現(xiàn)的。對比剛才我們上面寫出來的式子,現(xiàn)在我們的分類函數(shù)為:

    ? ? 其中??由如下 dual 問題計(jì)算而得:

    ? ? 這樣一來計(jì)算的問題就算解決了,避開了直接在高維空間中進(jìn)行計(jì)算,而結(jié)果卻是等價(jià)的!當(dāng)然,因?yàn)槲覀冞@里的例子非常簡單,所以我可以手工構(gòu)造出對應(yīng)于的核函數(shù)出來,如果對于任意一個映射,想要構(gòu)造出對應(yīng)的核函數(shù)就很困難了。

    2.2.3、幾個核函數(shù)

    ? ? 通常人們會從一些常用的核函數(shù)中選擇(根據(jù)問題和數(shù)據(jù)的不同,選擇不同的參數(shù),實(shí)際上就是得到了不同的核函數(shù)),例如:

    • 多項(xiàng)式核,顯然剛才我們舉的例子是這里多項(xiàng)式核的一個特例(R = 1,d = 2。雖然比較麻煩,而且沒有必要,不過這個核所對應(yīng)的映射實(shí)際上是可以寫出來的,該空間的維度是,其中??是原始空間的維度。
    • 高斯核,這個核就是最開始提到過的會將原始空間映射為無窮維空間的那個家伙。不過,如果選得很大的話,高次特征上的權(quán)重實(shí)際上衰減得非常快,所以實(shí)際上(數(shù)值上近似一下)相當(dāng)于一個低維的子空間;反過來,如果選得很小,則可以將任意的數(shù)據(jù)映射為線性可分——當(dāng)然,這并不一定是好事,因?yàn)殡S之而來的可能是非常嚴(yán)重的過擬合問題。不過,總的來說,通過調(diào)控參數(shù),高斯核實(shí)際上具有相當(dāng)高的靈活性,也是使用最廣泛的核函數(shù)之一。下圖所示的例子便是把低維線性不可分的數(shù)據(jù)通過高斯核函數(shù)映射到了高維空間:
    • 線性核,這實(shí)際上就是原始空間中的內(nèi)積。這個核存在的主要目的是使得“映射后空間中的問題”和“映射前空間中的問題”兩者在形式上統(tǒng)一起來了(意思是說,咱們有的時(shí)候,寫代碼,或?qū)懝降臅r(shí)候,只要寫個模板或通用表達(dá)式,然后再代入不同的核,便可以了,于此,便在形式上統(tǒng)一了起來,不用再分別寫一個線性的,和一個非線性的)

    2.2.4、核函數(shù)的本質(zhì)

    上面說了這么一大堆,讀者可能還是沒明白核函數(shù)到底是個什么東西?我再簡要概括下,即以下三點(diǎn):
  • 實(shí)際中,我們會經(jīng)常遇到線性不可分的樣例,此時(shí),我們的常用做法是把樣例特征映射到高維空間中去(如上文2.2節(jié)最開始的那幅圖所示,映射到高維空間后,相關(guān)特征便被分開了,也就達(dá)到了分類的目的);
  • 但進(jìn)一步,如果凡是遇到線性不可分的樣例,一律映射到高維空間,那么這個維度大小是會高到可怕的(如上文中19維乃至無窮維的例子)。那咋辦呢?
  • 此時(shí),核函數(shù)就隆重登場了,核函數(shù)的價(jià)值在于它雖然也是講特征進(jìn)行從低維到高維的轉(zhuǎn)換,但核函數(shù)絕就絕在它事先在低維上進(jìn)行計(jì)算,而將實(shí)質(zhì)上的分類效果表現(xiàn)在了高維上,也就如上文所說的避免了直接在高維空間中的復(fù)雜計(jì)算。
  • ? ? 最后引用這里的一個例子舉例說明下核函數(shù)解決非線性問題的直觀效果。

    ? ??假設(shè)現(xiàn)在你是一個農(nóng)場主,圈養(yǎng)了一批羊群,但為預(yù)防狼群襲擊羊群,你需要搭建一個籬笆來把羊群圍起來。但是籬笆應(yīng)該建在哪里呢?你很可能需要依據(jù)牛群和狼群的位置建立一個“分類器”,比較下圖這幾種不同的分類器,我們可以看到SVM完成了一個很完美的解決方案。


    ? ? 這個例子從側(cè)面簡單說明了SVM使用非線性分類器的優(yōu)勢,而邏輯模式以及決策樹模式都是使用了直線方法。

    ? ? OK,不再做過多介紹了,對核函數(shù)有進(jìn)一步興趣的,還可以看看此文。

    2.3、使用松弛變量處理 outliers 方法

    ??? 在本文第一節(jié)最開始討論支持向量機(jī)的時(shí)候,我們就假定,數(shù)據(jù)是線性可分的,亦即我們可以找到一個可行的超平面將數(shù)據(jù)完全分開。后來為了處理非線性數(shù)據(jù),在上文2.2節(jié)使用 Kernel 方法對原來的線性 SVM 進(jìn)行了推廣,使得非線性的的情況也能處理。雖然通過映射??將原始數(shù)據(jù)映射到高維空間之后,能夠線性分隔的概率大大增加,但是對于某些情況還是很難處理。

    ? ? 例如可能并不是因?yàn)閿?shù)據(jù)本身是非線性結(jié)構(gòu)的,而只是因?yàn)閿?shù)據(jù)有噪音。對于這種偏離正常位置很遠(yuǎn)的數(shù)據(jù)點(diǎn),我們稱之為 outlier ,在我們原來的 SVM 模型里,outlier 的存在有可能造成很大的影響,因?yàn)槌矫姹旧砭褪侵挥猩贁?shù)幾個 support vector 組成的,如果這些 support vector 里又存在 outlier 的話,其影響就很大了。例如下圖:

    ??? 用黑圈圈起來的那個藍(lán)點(diǎn)是一個 outlier ,它偏離了自己原本所應(yīng)該在的那個半空間,如果直接忽略掉它的話,原來的分隔超平面還是挺好的,但是由于這個 outlier 的出現(xiàn),導(dǎo)致分隔超平面不得不被擠歪了,變成途中黑色虛線所示(這只是一個示意圖,并沒有嚴(yán)格計(jì)算精確坐標(biāo)),同時(shí) margin 也相應(yīng)變小了。當(dāng)然,更嚴(yán)重的情況是,如果這個 outlier 再往右上移動一些距離的話,我們將無法構(gòu)造出能將數(shù)據(jù)分開的超平面來。

    ??? 為了處理這種情況,SVM 允許數(shù)據(jù)點(diǎn)在一定程度上偏離一下超平面。例如上圖中,黑色實(shí)線所對應(yīng)的距離,就是該 outlier 偏離的距離,如果把它移動回來,就剛好落在原來的超平面上,而不會使得超平面發(fā)生變形了。

    ? ? 插播下一位讀者@Copper_PKU的理解:換言之,在有松弛的情況下outline點(diǎn)也屬于支持向量SV,同時(shí),對于不同的支持向量,拉格朗日參數(shù)的值也不同,如此篇論文《Large Scale Machine Learning》中的下圖所示:

    ? ??對于遠(yuǎn)離分類平面的點(diǎn)值為0;對于邊緣上的點(diǎn)值在[0, 1/L]之間,其中,L為訓(xùn)練數(shù)據(jù)集個數(shù),即數(shù)據(jù)集大小;對于outline數(shù)據(jù)和內(nèi)部的數(shù)據(jù)值為1/L。更多請參看本文文末參考條目第51條。

    ? ? OK,繼續(xù)回到咱們的問題。我們,原來的約束條件為:

    ??? 現(xiàn)在考慮到outlier問題,約束條件變成了:

    ? ? 其中稱為松弛變量 (slack variable) ,對應(yīng)數(shù)據(jù)點(diǎn)允許偏離的 functional margin 的量。當(dāng)然,如果我們運(yùn)行任意大的話,那任意的超平面都是符合條件的了。所以,我們在原來的目標(biāo)函數(shù)后面加上一項(xiàng),使得這些的總和也要最小:

    ? ? 其中??是一個參數(shù),用于控制目標(biāo)函數(shù)中兩項(xiàng)(“尋找 margin 最大的超平面”和“保證數(shù)據(jù)點(diǎn)偏差量最小”)之間的權(quán)重。注意,其中??是需要優(yōu)化的變量(之一),而??是一個事先確定好的常量。完整地寫出來是這個樣子:

    用之前的方法將限制或約束條件加入到目標(biāo)函數(shù)中,得到新的拉格朗日函數(shù),如下所示:

    ? ? ?分析方法和前面一樣,轉(zhuǎn)換為另一個問題之后,我們先讓針對、和最小化:

    ? ? ?將??帶回??并化簡,得到和原來一樣的目標(biāo)函數(shù):

    ? ? ?不過,由于我們得到而又有(作為 Lagrange multiplier 的條件),因此有,所以整個 dual 問題現(xiàn)在寫作:

    ? ? 把前后的結(jié)果對比一下(錯誤修正:圖中的Dual formulation中的Minimize應(yīng)為maxmize):

    ? ?? 可以看到唯一的區(qū)別就是現(xiàn)在 dual variable? ?多了一個上限? ?。而 Kernel 化的非線性形式也是一樣的,只要把 換成 即可。這樣一來,一個完整的,可以處理線性和非線性并能容忍噪音和 outliers 的支持向量機(jī)才終于介紹完畢了。

    ? ? 行文至此,可以做個小結(jié),不準(zhǔn)確的說SVM它本質(zhì)上即是一個分類方法,用w^T+b定義分類函數(shù),于是求w、b,為尋最大間隔,引出1/2||w||^2,繼而引入拉格朗日因子,化為對拉格朗日乘子a的求解(求解過程中會涉及到一系列最優(yōu)化或凸二次規(guī)劃等問題),如此,求w.b與求a等價(jià),而a的求解可以用一種快速學(xué)習(xí)算法SMO,至于核函數(shù),是為處理非線性情況,若直接映射到高維計(jì)算恐維度爆炸,故在低維計(jì)算,等效高維表現(xiàn)

    ? ? OK,理解到這第二層,已經(jīng)能滿足絕大部分人一窺SVM原理的好奇心,然對于那些想在證明層面理解SVM的則還很不夠,但進(jìn)入第三層理解境界之前,你必須要有比較好的數(shù)理基礎(chǔ)和邏輯證明能力,不然你會跟我一樣,吃不少苦頭的。


    第三層、證明SVM

    ? ? 說實(shí)話,凡是涉及到要證明的東西.理論,便一般不是怎么好惹的東西。絕大部分時(shí)候,看懂一個東西不難,但證明一個東西則需要點(diǎn)數(shù)學(xué)功底,進(jìn)一步,證明一個東西也不是特別難,難的是從零開始發(fā)明創(chuàng)造這個東西的時(shí)候,則顯艱難(因?yàn)槿魏螘r(shí)代,大部分人的研究所得都不過是基于前人的研究成果,前人所做的是開創(chuàng)性工作,而這往往是最艱難最有價(jià)值的,他們被稱為真正的先驅(qū)。牛頓也曾說過,他不過是站在巨人的肩上。你,我則更是如此)。

    ? ? 正如陳希孺院士在他的著作《數(shù)理統(tǒng)計(jì)學(xué)簡史》的第4章、最小二乘法中所講:在科研上諸多觀念的革新和突破是有著很多的不易的,或許某個定理在某個時(shí)期由某個人點(diǎn)破了,現(xiàn)在的我們看來一切都是理所當(dāng)然,但在一切沒有發(fā)現(xiàn)之前,可能許許多多的頂級學(xué)者畢其功于一役,耗盡一生,努力了幾十年最終也是無功而返。

    ? ? 話休絮煩,要證明一個東西先要弄清楚它的根基在哪,即構(gòu)成它的基礎(chǔ)是哪些理論。OK,以下內(nè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é)、簡略談?wù)凷VM的應(yīng)用;

    3.1、線性學(xué)習(xí)器

    3.1.1、感知機(jī)算法

    這個感知機(jī)算法是1956年提出的,年代久遠(yuǎn),依然影響著當(dāng)今,當(dāng)然,可以肯定的是,此算法亦非最優(yōu),后續(xù)會有更詳盡闡述。不過,有一點(diǎn),你必須清楚,這個算法是為了干嘛的:不斷的訓(xùn)練試錯以期尋找一個合適的超平面(是的,就這么簡單)。 下面,舉個例子。如下圖所示,憑我們的直覺可以看出,圖中的紅線是最優(yōu)超平面,藍(lán)線則是根據(jù)感知機(jī)算法在不斷的訓(xùn)練中,最終,若藍(lán)線能通過不斷的訓(xùn)練移動到紅線位置上,則代表訓(xùn)練成功。 既然需要通過不斷的訓(xùn)練以讓藍(lán)線最終成為最優(yōu)分類超平面,那么,到底需要訓(xùn)練多少次呢?Novikoff定理告訴我們當(dāng)間隔是正的時(shí)候感知機(jī)算法會在有限次數(shù)的迭代中收斂,也就是說Novikoff定理證明了感知機(jī)算法的收斂性,即能得到一個界,不至于無窮循環(huán)下去。
    • ?Novikoff定理:如果分類超平面存在, 僅需在序列上迭代幾次,在界為的錯誤次數(shù)下就可以找到分類超平面,算法停止。
    這里,為擴(kuò)充間隔。根據(jù)誤分次數(shù)公式可知, 迭代次數(shù)與對應(yīng)于擴(kuò)充(包括偏置)權(quán)重的訓(xùn)練集的間隔有關(guān)。 順便再解釋下這個所謂的擴(kuò)充間隔,即為樣本到分類間隔的距離,即從引出的最大分類間隔。OK,還記得上文第1.3.2節(jié)開頭的內(nèi)容么?如下:

    ? ? 在給出幾何間隔的定義之前,咱們首先來看下,如上圖所示,對于一個點(diǎn)??,令其垂直投影到超平面上的對應(yīng)的為??,由于??是垂直于超平面的一個向量,為樣本x到分類間隔的距離,我們有

    然后后續(xù)怎么推導(dǎo)出最大分類間隔請回到本文第一、二部分,此處不重復(fù)板書。 同時(shí)有一點(diǎn)得注意:感知機(jī)算法雖然可以通過簡單迭代對線性可分?jǐn)?shù)據(jù)生成正確分類的超平面,但不是最優(yōu)效果,那怎樣才能得到最優(yōu)效果呢,就是上文中第一部分所講的尋找最大分類間隔超平面。此外,Novikoff定理的證明請見這里。

    3.2、非線性學(xué)習(xí)器

    3.2.1、Mercer定理

    ? ??Mercer定理?:如果函數(shù)K是上的映射(也就是從兩個n維向量映射到實(shí)數(shù)域)。那么如果K是一個有效核函數(shù)(也稱為Mercer核函數(shù)),那么當(dāng)且僅當(dāng)對于訓(xùn)練樣例,其相應(yīng)的核函數(shù)矩陣是對稱半正定的。? ? ? 要理解這個Mercer定理,先要了解什么是半正定矩陣,要了解什么是半正定矩陣,先得知道什么是正定矩陣(矩陣?yán)碚摗安┐缶睢?#xff0c;我自己也未能徹底理清,等我理清了再續(xù)寫此節(jié),順便推薦我正在看的一本《矩陣分析與應(yīng)用》。然后這里有一個此定理的證明,可以看下。 ? ? 正如@Copper_PKU所說:核函數(shù)在SVM的分類效果中起了重要的作用,最后這里有個tutorial可以看看。

    3.3、損失函數(shù)

    ? ? 在本文1.0節(jié)有這么一句話“支持向量機(jī)(SVM)是90年代中期發(fā)展起來的基于統(tǒng)計(jì)學(xué)習(xí)理論的一種機(jī)器學(xué)習(xí)方法,通過尋求結(jié)構(gòu)化風(fēng)險(xiǎn)最小來提高學(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)。要了解這兩個所謂的“風(fēng)險(xiǎn)”,還得又從監(jiān)督學(xué)習(xí)說起。

    ? ??監(jiān)督學(xué)習(xí)實(shí)際上就是一個經(jīng)驗(yàn)風(fēng)險(xiǎn)或者結(jié)構(gòu)風(fēng)險(xiǎn)函數(shù)的最優(yōu)化問題。風(fēng)險(xiǎn)函數(shù)度量平均意義下模型預(yù)測的好壞,模型每一次預(yù)測的好壞用損失函數(shù)來度量。它從假設(shè)空間F中選擇模型f作為決策函數(shù),對于給定的輸入X,由f(X)給出相應(yīng)的輸出Y,這個輸出的預(yù)測值f(X)與真實(shí)值Y可能一致也可能不一致,用一個損失函數(shù)來度量預(yù)測錯誤的程度。損失函數(shù)記為L(Y, f(X))。

    ? ? 常用的損失函數(shù)有以下幾種(基本引用自《統(tǒng)計(jì)學(xué)習(xí)方法》):

    ? ? ??

    ? ? 如此,SVM有第二種理解,即最優(yōu)化+損失最小,或如@夏粉_百度所說“可從損失函數(shù)和優(yōu)化算法角度看SVM,boosting,LR等算法,可能會有不同收獲”。

    ? ? OK,關(guān)于更多統(tǒng)計(jì)學(xué)習(xí)方法的問題,請參看此文。

    ? ? 關(guān)于損失函數(shù),如下文讀者評論中所述:可以看看張潼的這篇《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的分析,這兩篇對Boosting和SVM使用的損失函數(shù)分析的很透徹。

    3.4、最小二乘法

    3.4.1、什么是最小二乘法?

    ? ? 既然本節(jié)開始之前提到了最小二乘法,那么下面引用《正態(tài)分布的前世今生》里的內(nèi)容稍微簡單闡述下。

    ? ? 我們口頭中經(jīng)常說:一般來說,平均來說。如平均來說,不吸煙的健康優(yōu)于吸煙者,之所以要加“平均”二字,是因?yàn)榉彩陆杂欣?#xff0c;總存在某個特別的人他吸煙但由于經(jīng)常鍛煉所以他的健康狀況可能會優(yōu)于他身邊不吸煙的朋友。而最小二乘法的一個最簡單的例子便是算術(shù)平均。

    ? ??最小二乘法(又稱最小平方法)是一種數(shù)學(xué)優(yōu)化技術(shù)。它通過最小化誤差的平方和尋找數(shù)據(jù)的最佳函數(shù)匹配。利用最小二乘法可以簡便地求得未知的數(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)為測量中有誤差,所以所有方程的累積誤差為

    ?? ?我們求解出導(dǎo)致累積誤差最小的參數(shù)即可:

    ? ? 勒讓德在論文中對最小二乘法的優(yōu)良性做了幾點(diǎn)說明:

    • ?最小二乘使得誤差平方和最小,并在各個方程的誤差之間建立了一種平衡,從而防止某一個極端誤差取得支配地位
    • ?計(jì)算中只要求偏導(dǎo)后求解線性方程組,計(jì)算過程明確便捷
    • 最小二乘可以導(dǎo)出算術(shù)平均值作為估計(jì)值

    ?? ?對于最后一點(diǎn),從統(tǒng)計(jì)學(xué)的角度來看是很重要的一個性質(zhì)。推理如下:假設(shè)真值為?,?為n次測量值, 每次測量的誤差為,按最小二乘法,誤差累積為

    ?? ?求解?使達(dá)到最小,正好是算術(shù)平均。

    ?? ?由于算術(shù)平均是一個歷經(jīng)考驗(yàn)的方法,而以上的推理說明,算術(shù)平均是最小二乘的一個特例,所以從另一個角度說明了最小二乘方法的優(yōu)良性,使我們對最小二乘法更加有信心。

    ?? ?最小二乘法發(fā)表之后很快得到了大家的認(rèn)可接受,并迅速的在數(shù)據(jù)分析實(shí)踐中被廣泛使用。不過歷史上又有人把最小二乘法的發(fā)明歸功于高斯,這又是怎么一回事呢。高斯在1809年也發(fā)表了最小二乘法,并且聲稱自己已經(jīng)使用這個方法多年。高斯發(fā)明了小行星定位的數(shù)學(xué)方法,并在數(shù)據(jù)分析中使用最小二乘方法進(jìn)行計(jì)算,準(zhǔn)確的預(yù)測了谷神星的位置。

    ? ? 說了這么多,貌似跟本文的主題SVM沒啥關(guān)系呀,別急,請讓我繼續(xù)闡述。本質(zhì)上說,最小二乘法即是一種參數(shù)估計(jì)方法,說到參數(shù)估計(jì),咱們得從一元線性模型說起。

    3.4.2、最小二乘法的解法

    什么是一元線性模型呢? 請?jiān)试S我引用里的內(nèi)容,先來梳理下幾個基本概念:
    • 監(jiān)督學(xué)習(xí)中,如果預(yù)測的變量是離散的,我們稱其為分類(如決策樹,支持向量機(jī)等),如果預(yù)測的變量是連續(xù)的,我們稱其為回歸。
    • 回歸分析中,如果只包括一個自變量和一個因變量,且二者的關(guān)系可用一條直線近似表示,這種回歸分析稱為一元線性回歸分析。
    • 如果回歸分析中包括兩個或兩個以上的自變量,且因變量和自變量之間是線性關(guān)系,則稱為多元線性回歸分析。
    • 對于二維空間線性是一條直線;對于三維空間線性是一個平面,對于多維空間線性是一個超平面... ??
    對于一元線性回歸模型,?假設(shè)從總體中獲取了n組觀察值(X1,Y1),(X2,Y2),?…,(Xn,Yn)。對于平面中的這n個點(diǎn),可以使用無數(shù)條曲線來擬合。要求樣本回歸函數(shù)盡可能好地?cái)M合這組值。綜合起來看,這條直線處于樣本數(shù)據(jù)的中心位置最合理。?選擇最佳擬合曲線的標(biāo)準(zhǔn)可以確定為:使總的擬合誤差(即總殘差)達(dá)到最小。有以下三個標(biāo)準(zhǔn)可以選擇:????????
  • 用“殘差和最小”確定直線位置是一個途徑。但很快發(fā)現(xiàn)計(jì)算“殘差和”存在相互抵消的問題。
  • 用“殘差絕對值和最小”確定直線位置也是一個途徑。但絕對值的計(jì)算比較麻煩。
  • 最小二乘法的原則是以“殘差平方和最小”確定直線位置。用最小二乘法除了計(jì)算比較方便外,得到的估計(jì)量還具有優(yōu)良特性。這種方法對異常值非常敏感。 ?
  • ? ? ?最常用的是普通最小二乘法(?Ordinary??Least?Square,OLS):所選擇的回歸模型應(yīng)該使所有觀察值的殘差平方和達(dá)到最小,即采用平方損失函數(shù)。? ? ? ?我們定義樣本回歸模型為:

    ? ? 其中ei為樣本(Xi,?Yi)的誤差。? ? 接著,定義平方損失函數(shù)Q:

    ? ? 則通過Q最小確定這條直線,即確定,以為變量,把它們看作是Q的函數(shù),就變成了一個求極值的問題,可以通過求導(dǎo)數(shù)得到。? ? 求Q對兩個待估參數(shù)的偏導(dǎo)數(shù):

    ? ? 根據(jù)數(shù)學(xué)知識我們知道,函數(shù)的極值點(diǎn)為偏導(dǎo)為0的點(diǎn)。???? ? 解得: ? ? ? ??

    ? ? 這就是最小二乘法的解法,就是求得平方損失函數(shù)的極值點(diǎn)。自此,你看到求解最小二乘法與求解SVM問題何等相似,尤其是定義損失函數(shù),而后通過偏導(dǎo)求得極值。

    ? ?OK,更多請參看陳希孺院士的《數(shù)理統(tǒng)計(jì)學(xué)簡史》的第4章、最小二乘法,和本文參考條目第59條《凸函數(shù)》。

    3.5、SMO算法

    ? ? 在上文2.1.2節(jié)中,我們提到了求解對偶問題的序列最小最優(yōu)化SMO算法,但并未提到其具體解法。

    ? ? 事實(shí)上,SMO算法是由Microsoft Research的John C. Platt在1998年發(fā)表的一篇論文《Sequential Minimal Optimization A Fast Algorithm for Training Support Vector Machines》中提出,它很快成為最快的二次規(guī)劃優(yōu)化算法,特別針對線性SVM和數(shù)據(jù)稀疏時(shí)性能更優(yōu)。

    ? ? 接下來,咱們便參考John C. Platt的這篇文章來看看SMO的解法是怎樣的。

    3.5.1、SMO算法的解法

    ? ? 咱們首先來定義特征到結(jié)果的輸出函數(shù)為

    ? ?再三強(qiáng)調(diào),這個u與我們之前定義的實(shí)質(zhì)是一樣的。

    ? ? 接著,咱們重新定義咱們原始的優(yōu)化問題,權(quán)當(dāng)重新回顧,如下:

    ? ? 求導(dǎo)得到:

    ? ? 代入中,可得。

    ? ? 引入對偶因子后,得:

    ?? s.t:

    ? ? 注:這里得到的min函數(shù)與我們之前的max函數(shù)實(shí)質(zhì)也是一樣,因?yàn)榘逊栕兿?#xff0c;即有min轉(zhuǎn)化為max的問題,且yi也與之前的等價(jià),yj亦如此。

    經(jīng)過加入松弛變量后,模型修改為:

    ? ? 從而最終我們的問題變?yōu)?#xff1a;

    ? ? 繼而,根據(jù)KKT條件可以得出其中取值的意義為:

    這里的還是拉格朗日乘子(問題通過拉格朗日乘法數(shù)來求解)
  • 對于第1種情況,表明是正常分類,在邊界內(nèi)部(我們知道正確分類的點(diǎn)yi*f(xi)>=0);
  • 對于第2種情況,表明了是支持向量,在邊界上;
  • 對于第3種情況,表明了是在兩條邊界之間;
  • ? ? 而最優(yōu)解需要滿足KKT條件,即上述3個條件都得滿足,以下幾種情況出現(xiàn)將會出現(xiàn)不滿足:
    • <=1但是<C則是不滿足的,而原本=C
    • >=1但是>0則是不滿足的而原本=0
    • =1但是=0或者=C則表明不滿足的,而原本應(yīng)該是0<<C
    ? ? 所以要找出不滿足KKT條件的這些ai,并更新這些ai,但這些ai又受到另外一個約束,即

    ? ??注:別忘了2.1.1節(jié)中,L對a、b求偏導(dǎo),得到:

    ? ? 因此,我們通過另一個方法,即同時(shí)更新ai和aj,要求滿足以下等式: 就能保證和為0的約束。 利用yiai+yjaj=常數(shù),消去ai,可得到一個關(guān)于單變量aj的一個凸二次規(guī)劃問題,不考慮其約束0<=aj<=C,可以得其解為:
    這里,,表示舊值。然后考慮約束0<=aj<=C可得到a的解析解為: 把SMO中對于兩個參數(shù)求解過程看成線性規(guī)劃來理解來理解的話,那么下圖所表達(dá)的便是約束條件:
    根據(jù)yi和yj同號或異號,可得出兩個拉格朗日乘子的上下界分別為: 對于。那么如何求得ai和aj呢?
    • 對于ai,即第一個乘子,可以通過剛剛說的那3種不滿足KKT的條件來找;
    • 而對于第二個乘子aj可以找滿足條件 :求得。
    ? ? 而b的更新則是:
    在滿足下述條件: 下更新b,且每次更新完兩個乘子的優(yōu)化后,都需要再重新計(jì)算b,及對應(yīng)的Ei值。最后更新所有ai,y和b,這樣模型就出來了,從而即可求出咱們開頭提出的分類函數(shù) 此外,這里也有一篇類似的文章,大家可以參考下。

    3.5.2、SMO算法的步驟

    這樣,SMO的主要步驟如下:

    意思是,
  • 第一步選取一對和,選取方法使用啟發(fā)式方法;
  • 第二步,固定除和之外的其他參數(shù),確定W極值條件下的,由表示。
  • 假定在某一次迭代中,需要更新,對應(yīng)的拉格朗日乘子,,那么這個小規(guī)模的二次規(guī)劃問題寫為:? ? 那么在每次迭代中,如何更新乘子呢?引用這里的兩張PPT說明下:

    ? ? 知道了如何更新乘子,那么選取哪些乘子進(jìn)行更新呢?具體選擇方法有以下兩個步驟:

  • 步驟1:先“掃描”所有乘子,把第一個違反KKT條件的作為更新對象,令為a2;
  • 步驟2:在所有不違反KKT條件的乘子中,選擇使|E1 ?E2|最大的a1(注:別忘了,其中,而,求出來的E代表函數(shù)ui對輸入xi的預(yù)測值與真實(shí)輸出類標(biāo)記yi之差)。
  • ? ? 值得一提的是,每次更新完兩個乘子的優(yōu)化后,都需要再重新計(jì)算b,及對應(yīng)的Ei值。? ? 與此同時(shí),乘子的選擇務(wù)必遵循兩個原則:
    • 使乘子能滿足KKT條件
    • 對一個滿足KKT條件的乘子進(jìn)行更新,應(yīng)能最大限度增大目標(biāo)函數(shù)的值(類似于梯度下降)

    ? ? 綜上,SMO算法的基本思想是將Vapnik在1982年提出的Chunking方法推到極致,SMO算法每次迭代只選出兩個分量ai和aj進(jìn)行調(diào)整,其它分量則保持固定不變,在得到解ai和aj之后,再用ai和aj改進(jìn)其它分量。與通常的分解算法比較,盡管它可能需要更多的迭代次數(shù),但每次迭代的計(jì)算量比較小,所以該算法表現(xiàn)出整理的快速收斂性,且不需要存儲核矩陣,也沒有矩陣運(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)化為對偶問題,SMO算法,都為尋找一個最優(yōu)解,一個最優(yōu)分類平面。一步步梳理下來,為什么這樣那樣,太多東西可以追究,最后實(shí)現(xiàn)。如下圖所示:

    ? ? 至于下文中將闡述的核函數(shù)則為是為了更好的處理非線性可分的情況,而松弛變量則是為了糾正或約束少量“不安分”或脫離集體不好歸類的因子。

    ? ? 臺灣的林智仁教授寫了一個封裝SVM算法的libsvm庫,大家可以看看,此外這里還有一份libsvm的注釋文檔

    ? ? 除了在這篇論文《fast training of support vector machines using sequential minimal optimization》中platt給出了SMO算法的邏輯代碼之外,這里也有一份SMO的實(shí)現(xiàn)代碼,大家可以看下。

    其余更多請參看文末參考文獻(xiàn)和推薦閱讀中的條目6《支持向量機(jī)--算法、理論和擴(kuò)展》和條目11《統(tǒng)計(jì)學(xué)習(xí)方法》的相關(guān)章節(jié),或跳至下文3.4節(jié)。

    3.6、SVM的應(yīng)用

    ? ? 或許我們已經(jīng)聽到過,SVM在很多諸如文本分類,圖像分類,生物序列分析和生物數(shù)據(jù)挖掘,手寫字符識別等領(lǐng)域有很多的應(yīng)用,但或許你并沒強(qiáng)烈的意識到,SVM可以成功應(yīng)用的領(lǐng)域遠(yuǎn)遠(yuǎn)超出現(xiàn)在已經(jīng)在開發(fā)應(yīng)用了的領(lǐng)域。

    3.6.1、文本分類

    ? ? 一個文本分類系統(tǒng)不僅是一個自然語言處理系統(tǒng),也是一個典型的模式識別系統(tǒng),系統(tǒng)的輸入是需要進(jìn)行分類處理的文本,系統(tǒng)的輸出則是與文本關(guān)聯(lián)的類別。由于篇幅所限,其它更具體內(nèi)容本文將不再詳述。

    ? ? OK,本節(jié)雖取標(biāo)題為證明SVM,但聰明的讀者們想必早已看出,其實(shí)本部分并無多少證明部分(特此致歉),怎么辦呢?可以參閱《支持向量機(jī)導(dǎo)論》一書,此書精簡而有趣。本節(jié)完。


    讀者評論

    本文發(fā)表后,微博上的很多朋友給了不少意見,以下是節(jié)選的一些精彩評論:
  • “壓力”陡增的評論→//@藏了個鋒:我是看著July大神的博文長大的啊//@zlkysl:就是看了最后那一篇才決定自己的研究方向?yàn)镾VM的。--http://weibo.com/1580904460/zraWk0u6u?mod=weibotime
  • @張金輝:SVM的三重境界,不得不轉(zhuǎn)的一篇。其實(shí)Coursera的課堂上Andrew Ng講過支持向量機(jī),但顯然他沒有把這作為重點(diǎn),加上Ng講支持向量機(jī)的方法我一時(shí)半會難以完全消化,所以聽的也是一知半解。真正開始了解支持向量機(jī)就是看的這篇“三重境界”,之后才對這個算法有了大概的概念,以至如何去使用,再到其中的原理為何,再到支持向量機(jī)的證明等。總之,這篇文章開啟了我長達(dá)數(shù)月的研究支持向量機(jī)階段,直到今日--http://zhan.renren.com/profile/249335584?from=template#!//tag/三重境界
  • @孤獨(dú)之守望者:"最后,推出svm的cost function 是hinge loss,然后對比其他的方法的cost function,說明其實(shí)他們的目標(biāo)函數(shù)很像,那么問題是svm為什么這么popular呢?您可以再加些VC dimension跟一些error bound的數(shù)學(xué),點(diǎn)一下,提供一個思路和方向"。--http://weibo.com/1580904460/AiohoyDwq?mod=weibotime
  • @夏粉_百度:在面試時(shí),考察SVM可考察機(jī)器學(xué)習(xí)各方面能力:目標(biāo)函數(shù),優(yōu)化過程,并行方法,算法收斂性,樣本復(fù)雜度,適用場景,調(diào)參經(jīng)驗(yàn),不過個人認(rèn)為考察boosting和LR也還不錯啊。此外,隨著統(tǒng)計(jì)機(jī)器學(xué)習(xí)不斷進(jìn)步,SVM只被當(dāng)成使用了一個替代01損失hinge研究,更通用的方法被提出,損失函數(shù)研究替代損失與貝葉斯損失關(guān)系,算法穩(wěn)定性研究替代損失與推廣性能關(guān)系,凸優(yōu)化研究如何求解凸目標(biāo)函數(shù),SVM,boosting等算法只是這些通用方法的一個具體組建而已。
  • @居里猴姐:關(guān)于SVM損失函數(shù)的問題,可以看看張潼老師的這篇《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的分析,這兩篇對Boosting和SVM使用的損失函數(shù)分析的很透徹。
  • @夏粉_百度:SVM用了hinge損失,hinge損失不可導(dǎo),不如其它替代損失方便優(yōu)化并且轉(zhuǎn)換概率麻煩。核函數(shù)也不太用,現(xiàn)在是大數(shù)據(jù)時(shí)代,樣本非常大,無法想象一個n^2的核矩陣如何存儲和計(jì)算。 而且,現(xiàn)在現(xiàn)在非線性一般靠深度學(xué)習(xí)了。//@Copper_PKU:請教svm在工業(yè)界的應(yīng)用典型的有哪些?工業(yè)界如何選取核函數(shù),經(jīng)驗(yàn)的方法?svm的訓(xùn)練過程如何優(yōu)化?
  • @Copper_PKU:July的svm tutorial 我個人覺得還可以加入和修改如下部分:(1) 對于支持向量解釋,可以結(jié)合圖和拉格朗日參數(shù)來表達(dá),松弛中sv沒有寫出來. (2) SMO算法部分,加入Joachims論文中提到的算法,以及SMO算法選取workset的方法,包括SMO算法的收斂判斷,還有之前共軛梯度求解方法,雖然是較早的算法,但是對于理解SMO算法有很好的效果。模型的優(yōu)化和求解都是迭代的過程,加入歷史算法增強(qiáng)立體感。--??http://weibo.com/1580904460/Akw6dl3Yk#_rnd1385474436177
  • //@廖臨川: 之所以sgd對大訓(xùn)練集的效果更好,1.因?yàn)镾GD優(yōu)化每次迭代使用樣本子集,比使用訓(xùn)練全集(尤其是百萬數(shù)量級)要快得多;2.如果目標(biāo)函數(shù)是凸的或者偽凸的,SGD幾乎必然可以收斂到全局最優(yōu);否則,則收斂到局部最優(yōu);3.SGD一般不需要收斂到全局最優(yōu),只要得到足夠好的解,就可以立即停止。//@Copper_PKU:sgd的核心思想:是迭代訓(xùn)練,每拿到一個樣本就算出基于當(dāng)前w(t) 的loss function,t代表訓(xùn)練第t次,然后進(jìn)行下一w(t+1)的更新,w(t+1)=w(t)-(learning rate) * loss function的梯度,這個類比神經(jīng)網(wǎng)絡(luò)中bp中的參數(shù)訓(xùn)練方法。 sample by sample就是每次僅處理一個樣本 而不是一個batch。
  • //@Copper_PKU:從損失函數(shù)角度說:primal問題可以理解為正則化項(xiàng)+lossfunction,求解目標(biāo)是在兩個中間取平衡 如果強(qiáng)調(diào)loss function最小則會overfitting,所以有C參數(shù)。 //@研究者July:SVM還真就是在一定限定條件下,即約束條件下求目標(biāo)函數(shù)的最優(yōu)值問題,同時(shí),為減少誤判率,盡量讓損失最小。
  • ...
  • 非常享受這種全民大討論的年代,沒有誰一定就對或一定就錯,而是各自發(fā)表各自的理解見解,真棒!


    參考文獻(xiàn)及推薦閱讀

  • 支持向量機(jī)導(dǎo)論》,[美] Nello Cristianini / John Shawe-Taylor 著
  • 支持向量機(jī)導(dǎo)論一書的支持網(wǎng)站:http://www.support-vector.net/
  • 《數(shù)據(jù)挖掘?qū)д摗?#xff0c;[美] Pang-Ning Tan / Michael Steinbach / Vipin Kumar 著
  • 《數(shù)據(jù)挖掘:概念與技術(shù)》,(加)Jiawei Han;Micheline Kamber 著;
  • 《數(shù)據(jù)挖掘中的新方法:支持向量機(jī)》,鄧乃揚(yáng) 田英杰 著;
  • 支持向量機(jī)--理論、算法和擴(kuò)展》,鄧乃揚(yáng) 田英杰 著;
  • 支持向量機(jī)系列pluskidhttp://blog.pluskid.org/?page_id=683
  • http://www.360doc.com/content/07/0716/23/11966_615252.shtml
  • 數(shù)據(jù)挖掘十大經(jīng)典算法初探;
  • 《模式識別支持向量機(jī)指南》,C.J.C Burges 著;
  • 統(tǒng)計(jì)學(xué)習(xí)方法》,李航著(第7章有不少內(nèi)容參考自支持向量機(jī)導(dǎo)論一書,不過,可以翻翻看看);
  • 《統(tǒng)計(jì)自然語言處理》,宗成慶編著,第十二章、文本分類;
  • SVM入門系列,Jasper:http://www.blogjava.net/zhenandaci/category/31868.html
  • 最近鄰決策和SVM數(shù)字識別的實(shí)現(xiàn)和比較,作者不詳;
  • 斯坦福大學(xué)機(jī)器學(xué)習(xí)課程原始講義:http://www.cnblogs.com/jerrylead/archive/2012/05/08/2489725.html
  • 斯坦福機(jī)器學(xué)習(xí)課程筆記http://www.cnblogs.com/jerrylead/tag/Machine%20Learning/
  • http://www.cnblogs.com/jerrylead/archive/2011/03/13/1982639.html
  • SMO算法的數(shù)學(xué)推導(dǎo):http://www.cnblogs.com/jerrylead/archive/2011/03/18/1988419.html
  • 數(shù)據(jù)挖掘掘中所需的概率論與數(shù)理統(tǒng)計(jì)知識、上;
  • 關(guān)于機(jī)器學(xué)習(xí)方面的文章,可以讀讀:http://www.cnblogs.com/vivounicorn/category/289453.html
  • 數(shù)學(xué)系教材推薦:http://blog.sina.com.cn/s/blog_5e638d950100dswh.html;
  • 《神經(jīng)網(wǎng)絡(luò)與機(jī)器學(xué)習(xí)(原書第三版)》,[加] Simon Haykin 著;
  • 正態(tài)分布的前世今生:http://t.cn/zlH3Ygc;
  • 數(shù)理統(tǒng)計(jì)學(xué)簡史》,陳希孺院士著;
  • 《最優(yōu)化理論與算法(第2版)》,陳寶林編著;
  • A Gentle Introduction to Support Vector Machines in Biomedicinehttp://www.nyuinformatics.org/downloads/supplements/SVM_Tutorial_2010/Final_WB.pdf,此PPT很贊,除了對引入拉格朗日對偶變量后的凸二次規(guī)劃問題的深入度不夠之外,其它都挺好,配圖很精彩,本文有幾張圖便引自此PPT中;
  • 來自卡內(nèi)基梅隆大學(xué)carnegie mellon university(CMU)的講解SVM的PPT:http://www.autonlab.org/tutorials/svm15.pdf
  • 發(fā)明libsvm的臺灣林智仁教授06年的機(jī)器學(xué)習(xí)講義SVM:http://wenku.baidu.com/link?url=PWTGMYNb4HGUrUQUZwTH2B4r8pIMgLMiWIK1ymVORrds_11VOkHwp-JWab7IALDiors64JW_6mD93dtuWHwFWxsAk6p0rzchR8Qh5_4jWHC;
  • http://staff.ustc.edu.cn/~ketang/PPT/PRLec5.pdf;
  • Introduction to Support Vector Machines (SVM),By Debprakash Patnai?M.E (SSA),https://www.google.com.hk/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCwQFjAA&url=http%3a%2f%2fwww%2epws%2estu%2eedu%2etw%2fccfang%2findex%2efiles%2fAI%2fAI%26ML-Support%2520Vector%2520Machine-1%2eppt&ei=JRR6UqT5C-iyiQfWyIDgCg&usg=AFQjCNGw1fTbpH4ltQjjmx1d25ZqbCN9nA;
  • 多人推薦過的libsvm:http://www.csie.ntu.edu.tw/~cjlin/libsvm/;
  • 《machine learning in action》,中文版為《機(jī)器學(xué)習(xí)實(shí)戰(zhàn)》;
  • SMO算法的提出:Sequential Minimal Optimization A Fast Algorithm for Training Support Vector Machineshttp://research.microsoft.com/en-us/um/people/jplatt/smoTR.pdf
  • 《統(tǒng)計(jì)學(xué)習(xí)理論的本質(zhì)》,[美] Vladimir N. Vapnik著,非常晦澀,不做過多推薦;
  • 張兆翔,機(jī)器學(xué)習(xí)第五講之支持向量機(jī)http://irip.buaa.edu.cn/~zxzhang/courses/MachineLearning/5.pdf
  • VC維的理論解釋:http://www.svms.org/vc-dimension/,中文VC維解釋http://xiaoxia001.iteye.com/blog/1163338
  • 來自NEC Labs America的Jason Weston關(guān)于SVM的講義http://www.cs.columbia.edu/~kathy/cs4701/documents/jason_svm_tutorial.pdf;
  • 來自MIT的SVM講義:http://www.mit.edu/~9.520/spring11/slides/class06-svm.pdf;
  • PAC問題:http://www.cs.huji.ac.il/~shashua/papers/class11-PAC2.pdf
  • 百度張潼老師的兩篇論文:《Statistical behavior and consistency of classification methods based on convex risk minimization》http://home.olemiss.edu/~xdang/676/Consistency_of_Classification_Convex_Risk_Minimization.pdf,《Statistical analysis of some multi-category large margin classification methods》;
  • http://jacoxu.com/?p=39
  • 《矩陣分析與應(yīng)用》,清華張賢達(dá)著;
  • SMO算法的實(shí)現(xiàn):http://blog.csdn.net/techq/article/details/6171688
  • 常見面試之機(jī)器學(xué)習(xí)算法思想簡單梳理:http://www.cnblogs.com/tornadomeet/p/3395593.html;
  • 矩陣的wikipedia頁面:http://zh.wikipedia.org/wiki/%E7%9F%A9%E9%98%B5
  • 最小二乘法及其實(shí)現(xiàn):http://blog.csdn.net/qll125596718/article/details/8248249;
  • 統(tǒng)計(jì)學(xué)習(xí)方法概論:http://blog.csdn.net/qll125596718/article/details/8351337
  • http://www.csdn.net/article/2012-12-28/2813275-Support-Vector-Machine
  • A Tutorial on Support Vector Regression:http://alex.smola.org/papers/2003/SmoSch03b.pdf;SVR簡明版:http://www.cmlab.csie.ntu.edu.tw/~cyy/learning/tutorials/SVR.pdf
  • SVM Orghttp://www.support-vector-machines.org/
  • R. Collobert. Large Scale Machine Learning. Université Paris VI phd thesis. 2004http://ronan.collobert.com/pub/matos/2004_phdthesis_lip6.pdf
  • Making Large-Scale SVM Learning Practicalhttp://www.cs.cornell.edu/people/tj/publications/joachims_99a.pdf
  • 文本分類與SVM:http://blog.csdn.net/zhzhl202/article/details/8197109
  • Working Set Selection Using Second Order Information
    for Training Support Vector Machineshttp://www.csie.ntu.edu.tw/~cjlin/papers/quadworkset.pdf
  • SVM Optimization: Inverse Dependence on Training Set Sizehttp://icml2008.cs.helsinki.fi/papers/266.pdf
  • Large-Scale Support Vector Machines: Algorithms and?Theory:http://cseweb.ucsd.edu/~akmenon/ResearchExam.pdf
  • 凸優(yōu)化的概念:http://cs229.stanford.edu/section/cs229-cvxopt.pdf
  • 《凸優(yōu)化》,作者: Stephen Boyd / Lieven Vandenberghe,原作名: Convex Optimization;
  • Large-scale?Non-linear?Classification:?Algorithms?and?Evaluations,Zhuang?Wang,講了很多SVM算法的新進(jìn)展:http://ijcai13.org/files/tutorial_slides/te2.pdf
  • 基于SMO算法實(shí)現(xiàn)SVM:http://www.cs.iastate.edu/~honavar/smo-svm.pdf。

  • 后記

    OK,此文從最初2012年5月開始動筆,到后續(xù)不斷的修改,創(chuàng)造了三個之最,即所寫時(shí)間最長,所花心血最大,所改次數(shù)最多,因?yàn)槲业哪繕?biāo)是讓沒有任何機(jī)器學(xué)習(xí)基礎(chǔ)的都能看懂此文,所以總是不停的改,不停的改,不想放過任何一個小的細(xì)節(jié)。再者,引用侯捷的一句話是:天下大作,必作于細(xì)。 最后,非常感謝pluskid及諸多朋友們的文章及著作,讓我有機(jī)會在其基礎(chǔ)上總結(jié)、深入。有任何問題,敬請廣大讀者隨時(shí)不吝批評指正,感謝。
    updated、本文PDF版
    • 13年1125日,用chrome瀏覽器打開文章,右鍵打印,彈出打印框,把左上角的目標(biāo)更改為“另存為PDF”,成第一個PDFhttp://vdisk.weibo.com/s/zrFL6OXKghu5V
    • 13年127日,朋友吳新隆用“印象筆記”提取出博客正文,放到office內(nèi)編輯成此PDF:http://vdisk.weibo.com/s/zrFL6OXKgQHm8,較上一版本添加了完整的書簽
    • 14年 2月18日,朋友鄔書哲用Latex全部重排了本文所有公式,而且給所有公式和圖片全部做了標(biāo)記,Latex版PDF下載地址為:http://vdisk.weibo.com/s/zrFL6OXKgnlcp

    ? ? 本文會一直不斷翻新,再者,上述3個PDF的閱讀體驗(yàn)也還不是最好的,如果有朋友制作了更好的PDF,歡迎分享給我:http://weibo.com/julyweibo,謝謝。

    ? ? July、二零一四年二月十一日于天通苑。

    Ref:?http://blog.csdn.net/v_july_v/article/details/7624837

    總結(jié)

    以上是生活随笔為你收集整理的机器学习之旅:支持向量机通俗导论(理解SVM的三层境界)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。