手推SVM(三)-軟間隔和損失函式的推導
- 軟間隔的提出
- 對偶問題及其化簡
- 引數的求解
- 引數的調優
1.軟間隔的提出
上一篇文章(手推SVM(二)-核方法 )我們用核方法來解決線性不可分問題,但如果即使對映到高維空間中,仍然有部分點不能完美的區分開呢?
如圖,無論核函式怎麼選取,都不能完美區分開資料,即使能完美的區分開資料,也會很容易導致過擬合的發生,這時候我們該怎麼辦呢?
既然人在做某事的時候,能允許犯一點小錯,那模型為什麼就不能允許犯一點小錯呢?這就是軟間隔的想法,既然確實無法區分開,那我就允許部分點分類錯誤就OK了,因為那部分點也有可能是離群點或噪聲資料。
換成公式就是:
pocket表示允許部分點的預測標籤與真實標籤不一致,但只要這個不一致的資料數量最小就好了。
把兩者結合起來,就是:
對於部分樣本允許它的值大於負無窮,也就意味著允許它分類錯誤,引數C的作用就是為限制分錯的樣本數量,調整C可以讓模型是更注重margin還是更注重分錯的數量,使模型的準確率保持在一定範圍內。
把兩個條件合成一個條件,表示如果它分類正確的話,就讓我們更注重margin。
但是,發現這個條件約束不是一個線性函式,如果不是線性函式,那我們之前所推導的對偶問題,核函式就都不能使用了,那該怎麼辦才好呢?
那我們上面是看分類錯誤的個數,那既然分類錯誤了,我們能不能看一下錯的有多離譜呢?就像我們和你偶像之間的距離,你應該想知道你和他到底差了多少個級別,哪裡離得比較遠,你就知道自己哪裡不足了,然後慢慢的學習,私底下慢慢的改進,模型也一樣呀,那我們可以不記錄到底錯了多少個,我們看一下分類錯誤的樣本還差多少能被分類正確,因此定義了
用圖形表示 就是希望如下違規點的violation的長度越小越好,最好小於等於0.其中C在其中的作用就是控制間隔的大小和違規的樣本數量。C越大,就代表我們希望違規的樣本越少越好,哪怕這個margin(街寬)變小也無所謂;C越小,就代表允許有很多違規的樣本,但希望我們的margin大一點比較好。
其實這樣的計算誤差的方法就是SVM中的損失函式,我們通過一個影象識別的例子看一下它具體是怎麼做的?
詳細例子:
hinge loss/線性SVM的損失函式
假設上面那張貓的圖片資料為
用公式表示:
2.對偶問題及其化簡
由上圖可知,我們最後的優化條件變成了兩個,同樣使用拉格朗日乘子法進行求解有:
於是得到這樣的優化問題:
按照我們的老套路,先化簡:
同樣對其他引數化簡,最後仍然可以得到我們在(手推SVM(一)-數學推導)中得到的類似結果,只是他們的約束條件有些許變化。即
3.引數的求解
在hard-margin中,我們知道可以直接通過一個條件就可以求出對應的b了,但是對於soft-margin呢?
因為對應的KKT條件又有了新的變化,所以對應的求解方法又有了新的變化,因為加了
使用第一個條件可以得到:
下圖是不同的C取值,形成的分類邊界,可以發現如果C沒有好好選的話,也還是很容易過擬合的。同時C越大,它的寬度就會越小,而犯錯的點也會越少。
再分析一下其他一些引數的實際意義:
- 如果
0<αn<C,則ξn=0 ,我們剛才就是用這個條件算出的b,由第一條式子可以得到:1=yn(wTzn+b) ,也就是y乘上分數剛好等於1的點,剛好在邊界上(圖中畫方框的點)。 αn=0 ,那第二式的ξn=0 ,代表了那些沒有範圍條件上的點(圖中正常的圈圈和叉叉)。αn=C ,那由第一式就有:ξn=1−yn(wTzn+b) 剛好記錄了違反邊界的點的違反程度,違反了多少(圖中三角形的點)。
4.引數的調優
大家最常見的調優方案就是交叉驗證了,在這裡不說了,說點別的。
Leave-One_Out-CV error
其實就是把100份樣本切成100份,留一個作為驗證,其餘作為訓練。而在SVM中可以得到:
那這個該怎麼證明呢?
假如最後一個點