1. 程式人生 > >手推SVM(三)-軟間隔和損失函式的推導

手推SVM(三)-軟間隔和損失函式的推導

  1. 軟間隔的提出
  2. 對偶問題及其化簡
  3. 引數的求解
  4. 引數的調優

1.軟間隔的提出

上一篇文章(手推SVM(二)-核方法 )我們用核方法來解決線性不可分問題,但如果即使對映到高維空間中,仍然有部分點不能完美的區分開呢?
這裡寫圖片描述
如圖,無論核函式怎麼選取,都不能完美區分開資料,即使能完美的區分開資料,也會很容易導致過擬合的發生,這時候我們該怎麼辦呢?

既然人在做某事的時候,能允許犯一點小錯,那模型為什麼就不能允許犯一點小錯呢?這就是軟間隔的想法,既然確實無法區分開,那我就允許部分點分類錯誤就OK了,因為那部分點也有可能是離群點或噪聲資料。

換成公式就是:
pocket表示允許部分點的預測標籤與真實標籤不一致,但只要這個不一致的資料數量最小就好了。
這裡寫圖片描述

把兩者結合起來,就是:
這裡寫圖片描述
對於部分樣本允許它的值大於負無窮,也就意味著允許它分類錯誤,引數C的作用就是為限制分錯的樣本數量,調整C可以讓模型是更注重margin還是更注重分錯的數量,使模型的準確率保持在一定範圍內。

把兩個條件合成一個條件,表示如果它分類正確的話,就讓我們更注重margin。
圖1
但是,發現這個條件約束不是一個線性函式,如果不是線性函式,那我們之前所推導的對偶問題,核函式就都不能使用了,那該怎麼辦才好呢?

那我們上面是看分類錯誤的個數,那既然分類錯誤了,我們能不能看一下錯的有多離譜呢?就像我們和你偶像之間的距離,你應該想知道你和他到底差了多少個級別,哪裡離得比較遠,你就知道自己哪裡不足了,然後慢慢的學習,私底下慢慢的改進,模型也一樣呀,那我們可以不記錄到底錯了多少個,我們看一下分類錯誤的樣本還差多少能被分類正確,因此定義了ξ

n,它表示分類錯誤的時候,還需要多少距離,才能被分類正確。
這裡寫圖片描述

用圖形表示 就是希望如下違規點的violation的長度越小越好,最好小於等於0.其中C在其中的作用就是控制間隔的大小和違規的樣本數量。C越大,就代表我們希望違規的樣本越少越好,哪怕這個margin(街寬)變小也無所謂;C越小,就代表允許有很多違規的樣本,但希望我們的margin大一點比較好。
這裡寫圖片描述

其實這樣的計算誤差的方法就是SVM中的損失函式,我們通過一個影象識別的例子看一下它具體是怎麼做的?
詳細例子:
hinge loss/線性SVM的損失函式

這裡寫圖片描述
假設上面那張貓的圖片資料為xi,其他還有狗和船的,在W下有一個得分向量

f(x,W)=[13,7,11],分別代表貓,船,狗的得分,但正確答案是貓,也就是第一個,hinge loss希望正確答案與錯誤答案之間的得分差距在某一閥值範圍內,假設為10,就可以得到Li=max(0,713+10)+max(0,1113+10)=0+7=7因為貓和狗的得分之間的差距不滿足閥值,就會增加一個損失,而貓和船之間的差距符合閥值10,所以船這個分類就不會帶來任何損失。
用公式表示:Li=max(0,+)

2.對偶問題及其化簡

由上圖可知,我們最後的優化條件變成了兩個,同樣使用拉格朗日乘子法進行求解有:
這裡寫圖片描述
於是得到這樣的優化問題:
這裡寫圖片描述
按照我們的老套路,先化簡:

Lξn=0=Cαnβn可得:βn=Cαn,βn>0,:0<αn<C,把β代入上式有:
這裡寫圖片描述

同樣對其他引數化簡,最後仍然可以得到我們在(手推SVM(一)-數學推導)中得到的類似結果,只是他們的約束條件有些許變化。即αn的上限不再是無窮遠,而是C了。
這裡寫圖片描述

3.引數的求解

在hard-margin中,我們知道可以直接通過一個條件就可以求出對應的b了,但是對於soft-margin呢?
因為對應的KKT條件又有了新的變化,所以對應的求解方法又有了新的變化,因為加了ξn,所以求b時的改成了這個樣子,其中因為βn=Cαn,同時負號沒什麼影響,所以對soft-margin的條件就可以改成如下右圖這個樣子了。
這裡寫圖片描述
使用第一個條件可以得到:

b=ysysξswTzs但其中有ξs是我們不知道的,所以通過第二個條件,令ξn=0,可得到0<αs<C如此就可以得到:
這裡寫圖片描述

下圖是不同的C取值,形成的分類邊界,可以發現如果C沒有好好選的話,也還是很容易過擬合的。同時C越大,它的寬度就會越小,而犯錯的點也會越少。
這裡寫圖片描述

再分析一下其他一些引數的實際意義:
這裡寫圖片描述

  • 如果0<αn<Cξn=0,我們剛才就是用這個條件算出的b,由第一條式子可以得到:1=yn(wTzn+b),也就是y乘上分數剛好等於1的點,剛好在邊界上(圖中畫方框的點)。
  • αn=0,那第二式的ξn=0,代表了那些沒有範圍條件上的點(圖中正常的圈圈和叉叉)。
  • αn=C,那由第一式就有:ξn=1yn(wTzn+b)剛好記錄了違反邊界的點的違反程度,違反了多少(圖中三角形的點)。

4.引數的調優

大家最常見的調優方案就是交叉驗證了,在這裡不說了,說點別的。
Leave-One_Out-CV error
其實就是把100份樣本切成100份,留一個作為驗證,其餘作為訓練。而在SVM中可以得到:

也就是說,假如你有10000個樣本,有100個支援向量,那麼你的leave one out 的交叉驗證誤差小於100.

那這個該怎麼證明呢?
假如最後一個點xN