1. 程式人生 > >【機器學習基礎】軟間隔支援向量機

【機器學習基礎】軟間隔支援向量機

引言

在上一小節中,我們介紹了核支援向量機。於是,不管是簡單的問題還是複雜的問題,我們都可以做得到。
然而,像高斯核的方法太複雜了,可能造成過擬合的問題。導致過擬合的現象的原因有可能是你選擇特徵轉換太強大了,導致無法用最大間隔的方法控制模型的複雜度,還有一個原因是,如果堅持將所有的資料都做到正確分類,這樣有可能將噪聲也考慮到模型的構建之中,這樣就會將噪聲擬合進你的結果中去了。

軟間隔支援向量機

第一步:容忍錯誤的發生

這是硬間隔支援向量機(hard-margin SVM)的基本定義,其中要求所有的資料都要分類正確,並且還要選擇w最小的情況:

為了緩解這樣的問題,不如我們容忍一些錯誤的發生,將發生錯誤的情況加入到目標式子之中,希望能得到一個錯分類情況越少越好的結果。其中引數C代表了間隔和犯錯情況的相對重要性(即C是對最大間隔[large margin]和噪聲容忍度[noise tolerance]的權衡和折中),C比較大的時候代表犯錯越少越好,C比較小的時候代表找到的w越短越好,也就是在對的資料上的間隔越寬越好。


這個式子有一個缺點,因為存在判斷是非問題(booling problem)的運算,所以這不是一個線性的式子,於是就不能用二次規劃的方法來解決。並且這種方法也沒法衡量錯誤的大小。
為了解決這些問題,我們需要提出一個新的式子,這個式子能夠區分小錯和大錯,而且它可以繼續使用二次規劃的方法來求解。

第二步:對於錯誤的衡量

下面的式子中的ξn是用來衡量資料犯了多大的錯誤,而不是資料犯了幾個錯誤。並且這樣的改變,將ξ作為一個變數加入到式子中去,得到ξ的一次式,這樣可以用二次規劃的方法來求解。

我們用ξ來記錄違規資料距離邊界的距離,並將這個距離納入到最佳化的標準裡面。

引數C控制我們到底要多大的邊界還是更加在意違反邊界的情形越少越好。
越大的C代表,我們寧可邊界窄一點,也要違反的資料少一點。
小的C代表,我們希望得到更寬的邊界。

第三步:推導對偶問題

我們接下來要做的是,推導上面問題的對偶問題,得到了對偶問題就可以很輕易的引入核技巧來輕易地做特徵轉換(feature transform)。
原始問題是這樣的:

由於現在是兩個條件,所以我們使用αn和βn來構造拉格朗日函式:

得到了拉格朗日函式後,我們就可以將其轉化為對偶問題,並用KKT條件來簡化。
我們想對ξn做簡化,通過對ξn求偏微分:

這樣我們就可以用αn來表示βn了,但是由於βn>0,所以αn還要有一個限制條件:


這樣我們就可以去掉ξn和βn兩個變數,得到如下的式子:

上面得到的式子就和硬間隔支援向量機的對偶形式很相似了,我們就可以對b和w求偏微分,得到和標準的支援向量機對偶問題幾乎一樣的答案:


這就是標準的軟間隔支援向量機的對偶形式:

與硬間隔支援向量機不同的是,這裡的αn有C這個上限的限制。

核軟間隔支援向量機

接下來,我們得到了核軟間隔支援向量機的演算法步驟:

這裡與之前硬間隔支援向量機不同的是在求b的過程是不一樣的。現在因為是一個新的二次規劃問題,其KKT條件已經變化了。

求b

我們對比一下硬間隔SVM和軟間隔SVM的不同:

從上圖看到,在求硬間隔SVM的b引數的時候,使用KKT條件中的互補鬆弛特性(complementary slackness),根據兩個式子相乘為0,當αn>0的時候(即對應支援向量),求得b的表示式。
現在,我們在觀察軟間隔SVM的互補鬆弛特性。
根據上面兩個式子,我們令αs不等於C,這樣就使得ξs=0。這樣我們就可以得到b的式子。

經過上面的一番解釋,我們知道,這裡要求b,不是像硬間隔SVM中那樣要找一個任意的支援向量來計算b,而是找一個自由的支援向量(free SV),來計算b。

不同的C對應的效果


上面的影象是使用高斯核軟間隔SVM,但是不同C的值的不同的分類效果。
當C=1的時候,藍色區域表示圓圈的區域,紅色區域表示紅叉的區域,灰色的區域表示邊界部分。這裡我們看到存在錯誤的情況。
當C=10的時候,我們通過使用比較大的C來控制,我們希望分類要儘量減少錯誤,這裡我們發現灰色的邊界區域變窄了,但是犯錯的資料減少了。
當C=100的時候,犯錯的資料變少了,但是會出現過擬合的問題。
這告訴我們,要通過選擇引數來避免過擬合問題。

αn的物理意義

我們可以根據之前的互補鬆弛特性的兩個式子,將資料分成三種情況:

對於0 < αn < C的情況,ξn=0,這裡對應的是在邊界上的支援向量的資料
對於αn=0,ξn=0,這是沒有違反邊界,被正確分類的資料,這些點在邊界的外面
對於αn=C,這種情形是違反邊界的資料,圖中用三角標註的資料,我們使用ξn記錄下來資料到邊界中線的距離(這裡違反的資料有比較小的違反,即雖然在邊界內,但是沒有被錯誤分類;另一種是被錯誤分類的資料,是比較大的違反)

這裡的αn的不同情況對於我們進行資料的分析是很有幫助的,它的不同的值能夠說明其所代表的資料與邊界是什麼位置關係。

模型選擇

通過交叉檢驗來選擇模型引數


上面這個圖表示的是使用高斯核SVM在不同的C和不同的γ的不同的邊界表現,其中橫軸對應不同C,而縱軸代表不同的γ。

上面這個圖表示了使用交叉驗證的方法我們選擇誤差最小的那個模型引數,我們這裡只能選擇幾個不同的C和γ,比較一下哪個引數組合形式比較好。

SVM留一交叉驗證誤差與支援向量的關係

SVM中有個很有意思是關係,留一交叉驗證的誤差會小於等於支援向量在所有資料中的比例。
如果將非支援向量的那個資料去除,這對找到構造邊界的最佳解沒有影響,所以非支援向量在留一交叉驗證的誤差上的貢獻一定是0,而支援向量在留一交叉驗證的誤差上的貢獻可能是0也可能是1。所以得到了這個限制關係。

於是我們也可以根據支援向量的數量來進行模型引數的選擇,但值得注意的是,支援向量的數量只能用於估計一個上限,但不一定是最好的,所以通常利用這種關係來排除一些明顯不好的模型引數。