現在我們已經把乙個本來線性不可分的文字分類問題,通過對映到高維空間而變成了線性可分的。就像下圖這樣:
圓形和方形的點各有成千上萬個(畢竟,這就是我們訓練集中文件的數量嘛,當然很大了)。現在想象我們有另乙個訓練集,只比原先這個訓練集多了一篇文章,對映到高維空間以後(當然,也使用了相同的核函式),也就多了乙個樣本點,但是這個樣本的位置是這樣的:
就是圖中黃色那個點,它是方形的,因而它是負類的乙個樣本,這單獨的乙個樣本,使得原本線性可分的問題變成了線性不可分的。這樣類似的問題(僅有少數點線性不可分)叫做「近似線性可分」的問題。
以我們人類的常識來判斷,說有一萬個點都符合某種規律(因而線性可分),有乙個點不符合,那這乙個點是否就代表了分類規則中我們沒有考慮到的方面呢(因而規則應該為它而做出修改)?
其實我們會覺得,更有可能的是,這個樣本點壓根就是錯誤,是雜訊,是提供訓練集的同學人工分類時一打瞌睡錯放進去的。所以我們會簡單的忽略這個樣本點,仍然使用原來的分類器,其效果絲毫不受影響。
但這種對雜訊的容錯性是人的思維帶來的,我們的程式可沒有。由於我們原本的優化問題的表示式中,確實要考慮所有的樣本點(不能忽略某乙個,因為程式它怎麼知道該忽略哪乙個呢?),在此基礎上尋找正負類之間的最大幾何間隔,而幾何間隔本身代表的是距離,是非負的,像上面這種有雜訊的情況會使得整個問題無解。這種解法其實也叫做「硬間隔」分類法,因為他硬性的要求所有樣本點都滿足和分類平面間的距離必須大於某個值。
因此由上面的例子中也可以看出,硬間隔的分類法其結果容易受少數點的控制,這是很危險的(儘管有句話說真理總是掌握在少數人手中,但那不過是那一小撮人聊以**的詞句罷了,咱還是得民主)。
但解決方法也很明顯,就是仿照人的思路,允許一些點到分類平面的距離不滿足原先的要求。由於不同的訓練集各點的間距尺度不太一樣,因此用間隔(而不是幾何間隔)來衡量有利於我們表達形式的簡潔。我們原先對樣本點的要求是:
意思是說離分類面最近的樣本點函式間隔也要比1大。如果要引入容錯性,就給1這個硬性的閾值加乙個鬆弛變數,即允許
因為鬆弛變數是非負的,因此最終的結果是要求間隔可以比1小。但是當某些點出現這種間隔比1小的情況時(這些點也叫離群點),意味著我們放棄了對這些點的精確分類,而這對我們的分類器來說是種損失。但是放棄這些點也帶來了好處,那就是使分類面不必向這些點的方向移動,因而可以得到更大的幾何間隔(在低維空間看來,分類邊界也更平滑)。顯然我們必須權衡這種損失和好處。好處很明顯,我們得到的分類間隔越大,好處就越多。回顧我們原始的硬間隔分類對應的優化問題:
||w||2就是我們的目標函式(當然係數可有可無),希望它越小越好,因而損失就必然是乙個能使之變大的量(能使它變小就不叫損失了,我們本來就希望目標函式值越小越好)。那如何來衡量損失,有兩種常用的方式,有人喜歡用
而有人喜歡用
其中l都是樣本的數目。兩種方法沒有大的區別。如果選擇了第一種,得到的方法的就叫做二階軟間隔分類器,第二種就叫做一階軟間隔分類器。把損失加入到目標函式裡的時候,就需要乙個懲罰因子(cost,也就是libsvm的諸多引數中的c),原來的優化問題就變成了下面這樣:
這個式子有這麼幾點要注意:
一是並非所有的樣本點都有乙個鬆弛變數與其對應。實際上只有「離群點」才有,或者也可以這麼看,所有沒離群的點鬆弛變數都等於0(對負類來說,離群點就是在前面圖中,跑到h2右側的那些負樣本點,對正類來說,就是跑到h1左側的那些正樣本點)。
二是鬆弛變數的值實際上標示出了對應的點到底離群有多遠,值越大,點就越遠。
三是懲罰因子c決定了你有多重視離群點帶來的損失,顯然當所有離群點的鬆弛變數的和一定時,你定的c越大,對目標函式的損失也越大,此時就暗示著你非常不願意放棄這些離群點,最極端的情況是你把c定為無限大,這樣只要稍有乙個點離群,目標函式的值馬上變成無限大,馬上讓問題變成無解,這就退化成了硬間隔問題。
四是懲罰因子c不是乙個變數,整個優化問題在解的時候,c是乙個你必須事先指定的值,指定這個值以後,解一下,得到乙個分類器,然後用測試資料看看結果怎麼樣,如果不夠好,換乙個c的值,再解一次優化問題,得到另乙個分類器,再看看效果,如此就是乙個引數尋優的過程,但這和優化問題本身決不是一回事,優化問題在解的過程中,c一直是定值,要記住。
五是儘管加了鬆弛變數這麼一說,但這個優化問題仍然是乙個優化問題(汗,這不廢話麼),解它的過程比起原始的硬間隔問題來說,沒有任何更加特殊的地方。
從大的方面說優化問題解的過程,就是先試著確定一下w,也就是確定了前面圖中的三條直線,這時看看間隔有多大,又有多少點離群,把目標函式的值算一算,再換一組三條直線(你可以看到,分類的直線位置如果移動了,有些原來離群的點會變得不再離群,而有的本來不離群的點會變成離群點),再把目標函式的值算一算,如此往復(迭代),直到最終找到目標函式最小時的w。
囉嗦了這麼多,讀者一定可以馬上自己總結出來,鬆弛變數也就是個解決線性不可分問題的方法罷了,但是回想一下,核函式的引入不也是為了解決線性不可分的問題麼?為什麼要為了乙個問題使用兩種方法呢?
其實兩者還有微妙的不同。一般的過程應該是這樣,還以文字分類為例。在原始的低維空間中,樣本相當的不可分,無論你怎麼找分類平面,總會有大量的離群點,此時用核函式向高維空間對映一下,雖然結果仍然是不可分的,但比原始空間裡的要更加接近線性可分的狀態(就是達到了近似線性可分的狀態),此時再用鬆弛變數處理那些少數「冥頑不化」的離群點,就簡單有效得多啦。
本節中的(式1)也確實是支援向量機最最常用的形式。至此乙個比較完整的支援向量機框架就有了,簡單說來,支援向量機就是使用了核函式的軟間隔線性分類法。
下一節會說說鬆弛變數剩下的一點點東西,順便搞個讀者調查,看看大家還想侃侃svm的哪些方面。
SVM入門(八)鬆弛變數
現在我們已經把乙個本來線性不可分的文字分類問題,通過對映到高維空間而變成了線性可分的。就像下圖這樣 圓形和方形的點各有成千上萬個 畢竟,這就是我們訓練集中文件的數量嘛,當然很大了 現在想象我們有另乙個訓練集,只比原先這個訓練集多了一篇文章,對映到高維空間以後 當然,也使用了相同的核函式 也就多了乙個...
SVM入門(九)鬆弛變數(續)
接下來要說的東西其實不是鬆弛變數本身,但由於是為了使用鬆弛變數才引入的,因此放在這裡也算合適,那就是懲罰因子c。回頭看一眼引入了鬆弛變數以後的優化問題 注意其中c的位置,也可以回想一下c所起的作用 表徵你有多麼重視離群點,c越大越重視,越不想丟掉它們 這個式子是以前做svm的人寫的,大家也就這麼用,...
SVM(六) 帶鬆弛變數的SVM數學模型
之前我們採用的例子是比較規整的資料例子,大家請看下面的資料分布。你覺得上面的分類效果好嘛?我覺得不是特別好,原因就是實際上我們感覺我們寧可錯分乙個,也不想出現上述這種比較緊湊的情況,再看下面的分法 上圖中的實線作為最優的分割線貌似才是我們心中的答案,當然你也可以不認同這一點,然後不加入鬆弛變數,這樣...