1. 程式人生 > >機器學習之支援向量機演算法(一)

機器學習之支援向量機演算法(一)

一、問題引入

  支援向量機(SVM,Support Vector Machine)在2012年前還是很牛逼的,但是在12年之後神經網路更牛逼些,但是由於應用場景以及應用演算法的不同,我們還是很有必要了解SVM的,而且在面試的過程中SVM一般都會問到。支援向量機是一個非常經典且高效的分類模型。我們的目標:基於下述問題對SVM進行推導。

  要解決的問題:如下圖所示,3條黑色的線都可以將兩邊的資料進行分類,那哪條線作為決策邊界才是最好的呢?如果特徵資料本身就很難分,那又怎麼辦呢?計算複雜度怎麼樣?能實際應用嗎?

   

二、距離求解

  假設有一個部隊過雷區,左邊是一堆雷區,右邊是另一堆雷區,現在需要開闢出部隊前進的方向。我們需要做的就是讓這個方向完全分割開左邊和右邊的雷區,並且我們肯定希望這個方向的邊界越大越好,這樣踩雷的風險就越低。

  決策邊界:選出來離雷區最遠的(雷區就是邊界上的點,要Large Margin(間隔)),毫無疑問第二個分類效果肯定比第一個好。那為什麼需要這個邊界距離越大越好呢?答案就是邊界越大在測試集上的泛化能力就越好。

    

  我們如果說找到了離決策邊界最近的點,那這樣就找到了決策邊界,如上面圈出來的這些點。所以我們現在需要計算出到底哪個點距離決策邊界最近吧,在這之前,首先需要引入這個距離是怎麼計算的。

  首先,我們假設決策邊界是一個陰影平面,那這個距離就是求點到平面的距離,然後將這個距離轉換成求點到點的距離,然後再求出這個點到點的距離在垂直於這個平面上的投影,那麼這個投影就是點到平面的距離了。

  那接下來,我們可以假設這個平面方程為wTx+b=0。初學的我好像並不明白這個方程怎麼來的,後來查閱一些資料得知。

  因為二維空間裡面,一條直線的方程可以表示為:Ax+By+C=0。三維空間裡面,平面的方程可以表示為:Ax+By+Cz+D=0。依次推廣,n維空間的超平面方程可以表示為:Ax1+Bx2+Cx3+Dx4+Ex5+Fx6+....+K=0

  因為n維空間對應的是n維座標系,僅僅用x、y、z幾個字母較難表示,所以此處用x1、x2、x3、...、xn來表示n維座標系,各個維度的係數此處也可以用w1、w2、w3、...、wn來表示,所以n維空間裡面的超平面方程可以寫成如下形式:w1x1

+w2x2+w3x3+w4x4+...+wnxn+b=0。wx相乘可以看作是內積的相乘:

   

  可以將x看作w,y看作x則上面超平面方程就變成了:[w,x]+b = 0 ,即wTx+b=0。所以,樣本空間中,任何一個超平面都可以用方程如下方程表示:WTX+b=0。其中,W=(w1,w2,w3,...,wn)為法向量,b為位移項可以認為是截距,該超平面可以唯一的由此方程決定。

   

三、目標函式

  上面已經得出了距離的計算公式,那現在就要依據這個距離公式來找出最優的決策邊界了。首先假設平面上有三個資料點(X1,Y1)(X2,Y2)… (Xn,Yn),注意這裡X和Y不是代表橫縱座標,X代表資料的樣本,Y為樣本的類別也就是樣本標籤。現在使用支援向量機做一個二分類問題,也就是說如果當X為正例時那麼Y = +1,當X為負例時 Y = -1。

  現在決策邊界方程為:y(x) = wTΦ(x)+b(其中Φ(x)是對資料做了核變換,後面繼續說)。根據上面所述可以得到如下圖所示的表示式。

   

  我們最終需要得到的決策邊界,通俗解釋就是,找到一個條線(w和b),使得離該線最近的點(雷區)離這條線的距離能夠最遠,那這條線就是我們的決策邊界了。這句話很重要,建議讀者認真多讀幾遍。

  上面最終得出距離公式為:

   

  這裡的wTx+b就是我們的決策方程y(xi),這裡我們需要去掉外面的這個絕對值符號,而根據上面這個表示式yi * y(xi) > 0,經過化簡可以得出以下的一個距離的表示式 (由於yi * y(xi)>0所以將絕對值展開原式依舊成立):

   

  現在得到了這個問題中的距離公式,而現在我們的目標就是找出使這個函式的值最小但是兩個引數(w,b)值卻最大。如下式所示,min就是找到離決策邊界最近的那個樣本點,max就是找出w和b使最近的樣本點到決策邊界那條線的距離最遠。

   

  上面的式子似乎太長了些,我們可以通過放縮變換來簡化一下這個式子。對於決策方程(w,b)我們總可以通過一種放縮手段(比如同時乘以或者除以一個值)來使得其結果值|Y| >= 1,於是可以推匯出  yi * (wTΦ(xi)+b) >= 1(之前我們認為恆大於0,現在嚴格了些)。由於 yi * (wTΦ(xi)+b) >= 1,也就是說 yi * (wTΦ(xi)+b) 的最小值就是1,那現在只需考慮下面這個式子就足夠了。

   

  那這個函式就是最終的一個目標函式,也就是說需要求解出什麼樣的一個w來使得最終結果值越大越好。對於當前目標,我們需要求出一個極大值,注意當前約束條件yi * (wTΦ(xi)+b) >= 1

   

  常規套路就是將求解極大值問題轉換為極小值問題=>minw,b(1/2 * w2),求1/w的最大值,相當於求w的最小值,也相當於求w2(消除掉絕對值的影響)的最小值,那為啥需要引入一個常數1/2呢,這是為了後面方便進行求導。如何求解,應用拉格朗日乘子法求解,拉格朗日主要解決的帶約束的優化問題

   

  這個式子有點複雜,大概意思就是說在直接求帶約束的優化問題的時候不太好求,那就需要轉換一下,將我們需要求的變數轉換為求一箇中間變數的解,然後再找出這個中間變數的解與我們需要求解的變數之間的關係,這樣就可以通過這個中間變數求出我們需要求解的變數。

  依照上式再將我們的需要求解的式子轉換為 :(約束條件不要忘yi * (wTΦ(xi)+b) >= 1)這裡多了一個引數α

   

四、SVM求解

  分別對w和b求偏導,分別得到兩個條件(由於拉格朗日中的對偶性質KKT)

   

  大概意思就是說在拉格朗日乘子法中先求解最大值然後求解最小值這個過程可以轉換成先求解成最小值再求解成最大值。在這兒我們先求解這個函式的極小值, 首先在L(w,b,α)函式中對w,b分別求偏導,由於需要求解極值點,令其偏導等於0。

   

  可以看出w與α這個變數有了關係,就是說求出α也就求出了w。  然後繼續接下來的求解,將上面求出的兩個式子帶回原式。

   

  然後接下來求解α的極大值

   

  未完待續。。。

&n