1. 程式人生 > >『科學計算』從Logistic回歸到SVM分類器

『科學計算』從Logistic回歸到SVM分類器

zoom ram edi 情況下 投影 導出 bmp 幾何 sig

轉自:http://blog.csdn.net/v_july_v/article/details/7624837

前言

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

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

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

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



第一層、了解SVM

支持向量機,因其英文名為support vector machine,故一般簡稱SVM,通俗來講,它是一種二類分類模型,其基本模型定義為特征空間上的間隔較大的線性分類器,其學習策略便是間隔較大化,最終可轉化為一個凸二次規劃問題的求解。

1.1、分類標準的起源:Logistic回歸

理解SVM,咱們必須先弄清楚一個概念:線性分類器。

給定一些數據點,它們分別屬於兩個不同的類,現在要找到一個線性分類器把這些數據分成兩類。如果用x表示數據點,用y表示類別(y可以取1或者-1,分別代表兩個不同的類),一個線性分類器的學習目標便是要在n維的數據空間中找到一個超平面(hyper plane),這個超平面的方程可以表示為( wT中的T代表轉置):

技術分享

可能有讀者對類別取1或-1有疑問,事實上,這個1或-1的分類標準起源於logistic回歸。

Logistic回歸目的是從特征學習出一個0/1分類模型,而這個模型是將特性的線性組合作為自變量,由於自變量的取值範圍是負無窮到正無窮。因此,使用logistic函數(或稱作sigmoid函數)將自變量映射到(0,1)上,映射後的值被認為是屬於y=1的概率。

假設函數

技術分享

其中x是n維特征向量,函數g就是logistic函數。
技術分享的圖像是


技術分享


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

技術分享

從而,當我們要判別一個新來的特征屬於哪個類時,只需求技術分享即可,若技術分享大於0.5就是y=1的類,反之屬於y=0類。

此外,技術分享只和技術分享有關,技術分享>0,那麽技術分享,而g(z)只是用來映射,真實的類別決定權還是在於技術分享。再者,當技術分享時,技術分享=1,反之技術分享=0。如果我們只從技術分享出發,希望模型達到的目標就是讓訓練數據中y=1的特征技術分享,而是y=0的特征技術分享。Logistic回歸就是要學習得到技術分享,使得正例的特征遠大於0,負例的特征遠小於0,而且要在全部訓練實例上達到這個目標。

接下來,嘗試把logistic回歸做個變形。首先,將使用的結果標簽y = 0和y = 1替換為y = -1,y = 1,然後將技術分享技術分享)中的技術分享替換為b,最後將後面的技術分享替換為技術分享(即技術分享)。如此,則有了技術分享。也就是說除了y由y=0變為y=-1外,線性分類函數跟logistic回歸的形式化表示技術分享沒區別。

進一步,可以將假設函數技術分享中的g(z)做一個簡化,將其簡單映射到y=-1和y=1上。映射關系如下:

技術分享

1.2、線性分類的一個例子

下面舉個簡單的例子,如下圖所示,現在有一個二維平面,平面上有兩種不同的數據,分別用圈和叉表示。由於這些數據是線性可分的,所以可以用一條直線將這兩類數據分開,這條直線就相當於一個超平面,超平面一邊的數據點所對應的y全是 -1 ,另一邊所對應的y全是1。


技術分享

這個超平面可以用分類函數技術分享表示,當f(x) 等於0的時候,x便是位於超平面上的點,而f(x)大於0的點對應 y=1 的數據點,f(x)小於0的點對應y=-1的點,如下圖所示:

技術分享

註:有的資料上定義特征到結果的輸出函數技術分享,與這裏定義的技術分享實質是一樣的。為什麽?因為無論是技術分享,還是技術分享,不影響最終優化結果。下文你將看到,當我們轉化到優化技術分享的時候,為了求解方便,會把yf(x)令為1,即yf(x)是y(w^x + b),還是y(w^x - b),對我們要優化的式子max1/||w||已無影響。

當然,有些時候,或者說大部分時候數據並不是線性可分的,這個時候滿足這樣條件的超平面就根本不存在(不過關於如何處理這樣的問題我們後面會講),這裏先從最簡單的情形開始推導,就假設數據都是線性可分的,亦即這樣的超平面是存在的。

換言之,在進行分類的時候,遇到一個新的數據點x,將x代入f(x) 中,如果f(x)小於0則將x的類別賦為-1,如果f(x)大於0則將x的類別賦為1。

接下來的問題是,如何確定這個超平面呢?從直觀上而言,這個超平面應該是最適合分開兩類數據的直線。而判定“最適合”的標準就是這條直線離直線兩邊的數據的間隔較大。所以,得尋找有著較大間隔的超平面。

1.3、函數間隔Functional margin與幾何間隔Geometrical margin

在超平面w*x+b=0確定的情況下,

|w*x+b|能夠表示點x到距離超平面的遠近,

而通過觀察w*x+b的符號與類標記y的符號是否一致可判斷分類是否正確,

所以,可以用(y*(w*x+b))的正負性來判定或表示分類的正確性。於此,我們便引出了函數間隔(functional margin)的概念。

定義函數間隔(用技術分享表示)為:

技術分享

而超平面(w,b)關於T中所有樣本點(xi,yi)的函數間隔最小值(其中,x是特征,y是結果標簽,i表示第i個樣本),便為超平面(w, b)關於訓練數據集T的函數間隔:

技術分享= min技術分享i (i=1,...n)

但這樣定義的函數間隔有問題,即如果成比例的改變w和b(如將它們改成2w和2b),則函數間隔的值f(x)卻變成了原來的2倍(雖然此時超平面沒有改變),所以只有函數間隔還遠遠不夠。

事實上,我們可以對法向量w加些約束條件,從而引出真正定義點到超平面的距離--幾何間隔(geometrical margin)的概念。

假定對於一個點 x ,令其垂直投影到超平面上的對應點為 x0 ,w 是垂直於超平面的一個向量,技術分享為樣本x到分類間隔的距離,如下圖所示:

技術分享

技術分享,其中||w||表示的是範數。

又由於 x0 是超平面上的點,滿足 f(x0)=0 ,代入超平面的方程技術分享(原文有誤,實際代入方程為為wTx+b=wT(x0+技術分享)+b)即可算出:

技術分享

為了得到技術分享的值,令技術分享乘上對應的類別 y,即可得出幾何間隔(用技術分享表示)的定義:

技術分享

從上述函數間隔和幾何間隔的定義可以看出:幾何間隔就是函數間隔除以||w||,而且函數間隔y*(wx+b) = y*f(x)實際上就是|f(x)|,只是人為定義的一個間隔度量,而幾何間隔|f(x)|/||w||才是直觀上的點到超平面的距離。

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

對一個數據點進行分類,當超平面離數據點的“間隔”越大,分類的確信度(confidence)也越大。所以,為了使得分類的確信度盡量高,需要讓所選擇的超平面能夠較大化這個“間隔”值。這個間隔如下圖中的gap / 2所示。

技術分享

通過由前面的分析可知:函數間隔不適合用來較大化間隔值,因為在超平面固定以後,可以等比例地縮放w的長度和b的值,這樣可以使得技術分享的值任意大,亦即函數間隔技術分享可以在超平面保持不變的情況下被取得任意大。但幾何間隔因為除上了技術分享,使得在縮放w和b的時候幾何間隔技術分享的值是不會改變的,它只隨著超平面的變動而變動,因此,這是更加合適的一個間隔。所以,這裏要找的較大間隔分類超平面中的“間隔”指的是幾何間隔。

於是較大間隔分類器(maximum margin classifier)的目標函數可以定義為:


技術分享


同時需滿足一些條件,根據間隔的定義,有

技術分享


其中,s.t.,即subject to的意思,它導出的是約束條件。

回顧下幾何間隔的定義技術分享可知:如果令函數間隔技術分享等於1(之所以令技術分享等於1,是為了方便推導和優化,且這樣做對目標函數的優化沒有影響,至於為什麽,請見本文評論下第42樓回復),則有技術分享 = 1 / ||w||且技術分享,從而上述目標函數轉化成了

技術分享

這個目標函數便是在相應的約束條件技術分享下,較大化這個1/||w||值,而1/||w||便是幾何間隔技術分享


如下圖所示,中間的實線便是尋找到的最優超平面(Optimal Hyper Plane),其到兩條虛線的距離相等,這個距離便是幾何間隔技術分享,兩條虛線之間的距離等於2技術分享,而虛線上的點則是支持向量。由於這些支持向量剛好在邊界上,所以它們滿足技術分享(還記得我們把 functional margin 定為 1 了嗎?上節中:處於方便推導和優化的目的,我們可以令技術分享=1),而對於所有不是支持向量的點,則顯然有技術分享


技術分享

OK,到此為止,算是了解到了SVM的第一層,對於那些只關心怎麽用SVM的朋友便已足夠,不必再更進一層深究其更深的原理。

第二層、深入SVM2.1、從線性可分到線性不可分2.1.1、從原始問題到對偶問題的求解

接著考慮之前得到的目標函數:

技術分享

由於求技術分享的較大值相當於求技術分享的最小值,所以上述目標函數等價於(w由分母變成分子,從而也有原來的max問題變為min問題,很明顯,兩者問題等價):

技術分享

因為現在的目標函數是二次的,約束條件是線性的,所以它是一個凸二次規劃問題。這個問題可以用現成的QP (Quadratic Programming) 優化包進行求解。一言以蔽之:在一定的約束條件下,目標最優,損失最小。

此外,由於這個問題的特殊結構,還可以通過拉格朗日對偶性(Lagrange Duality)變換到對偶變量 (dual variable) 的優化問題,即通過求解與原問題等價的對偶問題(dual problem)得到原始問題的最優解,這就是線性可分條件下支持向量機的對偶算法,這樣做的優點在於:

一者對偶問題往往更容易求解;

二者可以自然的引入核函數,進而推廣到非線性分類問題。

那什麽是拉格朗日對偶性呢?簡單來講,通過給每一個約束條件加上一個拉格朗日乘子(Lagrange multiplier)技術分享,定義拉格朗日函數(通過拉格朗日函數將約束條件融合到目標函數裏去,從而只用一個函數表達式便能清楚的表達出我們的問題):

技術分享

然後令

技術分享

容易驗證,當某個約束條件不滿足時,例如技術分享,那麽顯然有技術分享(只要令技術分享即可)。而當所有約束條件都滿足時,則有技術分享,亦即最初要最小化的量。

因此,在要求約束條件得到滿足的情況下最小化技術分享,實際上等價於直接最小化技術分享(當然,這裏也有約束條件,就是技術分享≥0,i=1,…,n) ,因為如果約束條件沒有得到滿足,技術分享會等於無窮大,自然不會是我們所要求的最小值。

具體寫出來,目標函數變成了:

技術分享

這裏用技術分享表示這個問題的最優值,且和最初的問題是等價的。如果直接求解,那麽一上來便得面對w和b兩個參數,而技術分享又是不等式約束,這個求解過程不好做。不妨把最小和較大的位置交換一下,變成:

技術分享

交換以後的新問題是原始問題的對偶問題,這個新問題的最優值用技術分享來表示。而且有技術分享技術分享,在滿足某些條件的情況下,這兩者相等,這個時候就可以通過求解對偶問題來間接地求解原始問題。

換言之,之所以從minmax的原始問題技術分享,轉化為maxmin的對偶問題技術分享

一者因為技術分享技術分享的近似解,

二者,轉化為對偶問題後,更容易求解。

下面可以先求L 對w、b的極小,再求L 對技術分享的極大。

2.1.2、KKT條件

上文中提到“技術分享技術分享在滿足某些條件的情況下,兩者等價”,這所謂的“滿足某些條件”就是要滿足KKT條件。

一般地,一個最優化數學模型能夠表示成下列標準形式:


技術分享

其中,f(x)是需要最小化的函數,h(x)是等式約束,g(x)是不等式約束,p和q分別為等式約束和不等式約束的數量。

同時,得明白以下兩點:

  • 凸優化的概念:技術分享 為一凸集, 技術分享 為一凸函數。凸優化就是要找出一點 技術分享 ,使得每一 技術分享 滿足 技術分享
  • KKT條件的意義:它是一個非線性規劃(Nonlinear Programming)問題能有最優化解法的必要和充分條件。

而KKT條件就是指上面最優化數學模型的標準形式中的最小點 x* 必須滿足下面的條件:


技術分享

經過論證,我們這裏的問題是滿足 KKT 條件的(首先已經滿足Slater condition,再者f和gi也都是可微的,即L對w和b都可導),因此現在我們便轉化為求解第二個問題。

也就是說,原始問題通過滿足KKT條件,已經轉化成了對偶問題。而求解這個對偶學習問題,分為3個步驟:首先要讓L(w,b,a) 關於 w 和 b 最小化,然後求對技術分享的極大,最後利用SMO算法求解對偶問題中的拉格朗日乘子。

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

(1)、首先固定技術分享要讓 L 關於 w 和 b 最小化,我們分別對w,b求偏導數,即令 ?L/?w 和 ?L/?b 等於零(對w求導結果的解釋請看本文評論下第45樓回復):

技術分享

將以上結果代入之前的L,得到:

技術分享


從而有:

技術分享

提醒:有讀者可能會問上述推導過程如何而來?說實話,其具體推導過程是比較復雜的,如下圖所示:技術分享

最後,得到:

技術分享


如 jerrylead所說:“倒數第4步”推導到“倒數第3步”使用了線性代數的轉置運算,由於ai和yi都是實數,因此轉置後與自身一樣。“倒數第3步”推導到“倒數第2步”使用了(a+b+c+…)(a+b+c+…)=aa+ab+ac+ba+bb+bc+…的乘法運算法則。最後一步是上一步的順序調整。

L(

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

(2)、求對技術分享的極大,即是關於對偶問題的最優化問題。經過上面第一個步驟的求w和b,得到的拉格朗日函數式子已經沒有了變量w,b,只有技術分享。從上面的式子得到:

技術分享

這樣,求出了技術分享,根據技術分享即可求出w,然後通過技術分享即可求出b,最終得出分離超平面和分類決策函數。

(3)在求得L(w, b, a) 關於 w 和 b 最小化,以及對技術分享的極大之後,最後一步便是利用SMO算法求解對偶問題中的拉格朗日乘子技術分享

『科學計算』從Logistic回歸到SVM分類器