SVM解釋:四、線性不可分的情況

之前的博客介紹了在數據爲線性可分的情況下,如何用SVM對數據集訓練,從而得到一個線性分類器,也就是超平面WX+b=0 . 但是我已經強調過多次,線性可分的情況有相當的侷限,所以SVM的終極目標還是要解決數據線性不可分的情況。解決這種線性不可分的情況基本的思路有兩種:

  • 加入鬆弛變量和懲罰因子,找到相對“最好”超平面,這裏的“最好”可以理解爲儘可能地將數據正確分類;
  • 使用核函數,將低維的數據映射到更高維的空間,使得在高維空間中數據是線性可分的,那麼在高維空間使用線性分類模型即可;

本篇博客的全部內容就是介紹這兩種思路如何在數據線性不可分的情況下訓練分類器的。

1. 鬆弛變量和懲罰因子

1.1 定義

所謂線性不可分,說得形象一些,就是“你中有我,或者我中有你”,我們找不到一個超平面,恰好能把兩類數據嚴格地分開。舉個例子,Fig.1(a)中,白色數據元組中有一個點比較“另類”(我用文字標了出來),它跑到人家黑色元組的區域中去了,顯然,如果這個點直接被忽略掉,那麼分類效果是很好的(比如Fig.1(a)中的藍色虛線),但是現在的情況就讓人很難受,因爲我們找不到一個超平面,恰好能把黑白兩類數據分開。


還有一種情況也比較有意思,就是現在數據還是線性可分的,比如Fig.1(b),但是存在一個“異常點”(SVM中稱之爲outlier),如果忽略它,最佳分離超平面的效果非常好,但是如果按正常的套路訓練的話,我們只能得到一個“差強人意”的結果。如Fig.1(b)所示,有它或沒它,超平面的訓練效果是有很鮮明對比的。

針對上面這兩種情況,最直接的解決思路就是能不能適當的放寬數據點和邊緣側面之間的關係?還記得之前線性可分情況下的約束條件是這樣的:

(9)yi(WXi+b)1,i={1,2,,n}

現在放寬一些,變成下面的形式:

(10)yi(WXi+b)1ξi,i={1,2,,n}

其中ξi 爲元組Xi 對應的鬆弛變量,它實際上是這個元組距離它原本的邊緣所超出的權重距離,也就是Fig.1兩個子圖中黑色虛線的權重長度(權重是W )。這樣做的結果相當於是放寬了約束要求。通過在約束條件中加入鬆弛變量,使得一些原本不在相應邊緣外部的點,被“拉”回了相應的側面上,我給出鬆弛變量形式化的定義如下:

定義1-鬆弛變量:指數據元組關於側面的離差的長度。離差有兩種類型:

  • 大離差:即某個類的元組直接到超平面的另一側去了,像Fig.1(a)中的異常點,這時有離差的數據被錯誤分類了;
  • 小離差:即某個類的元組沒有到超平面的另一側,但是落在了超平面本側的邊緣內,像Fig.1(b)中的outlier,這時有離差的數據未被錯誤分類;

從大小離差的定義,我們也能確定鬆弛變量的取值範圍:大離差ξi1 ;小離差1>ξi>0 . 當然如果一個元組正確地落在它該在的位置上,那就是沒有離差,即ξi=0

離差的存在幫助我們在一定的容錯率下獲取最佳分離超平面,但問題在於目標函數中離差的大小如何確定?顯然,如果太小了,分離超平面就計算不出來了,或者只能計算一個“不佳”的分離超平面;而如果太大了,那任何一個超平面都是分類器了,也不行。所以,一定要採取措施,“控制”鬆弛變量。

控制的方法是加入“懲罰因子”。定義懲罰因子之前,我們先定義“軟誤差”:

定義2-軟誤差:指所有數據元組的鬆弛變量的和,i=1nξi

定義3-懲罰因子:是一個大於0的係數(記爲C ),軟誤差乘該係數後,加入目標函數,使之成爲新的目標函數,如下:

(11)min12W2+Ci=1nξi

其中C 的取值用來在數據擬合之間找到平衡。顯然,C 越大,則分類器越不願意分類錯誤,它要按“最正確”的來,那就會得到一個過擬合的分類器;而如果C 越小,那麼分類器就越“不在乎”錯誤,得到一個過於泛化的分類器,也就是欠擬合了。

1.2 求解新的優化問題

現在,加入鬆弛變量和懲罰因子後,新的優化問題誕生了,它是我在上一篇博客。。。的公式(1)的基礎上加入鬆弛變量和懲罰因子的結果:

(1)min 12W2+Ci=1nξis.t. 1ξiyi(WXi+b)0       ξi0

注意,這裏ξi0 也是約束條件

拉格朗日方程變爲:

(12)L(W,b,α,ξ,C,μ)=12W2+Ci=1nξi+i=1nαi(1ξiyi(WXi+b))i=1nμiξi

其中,μi 爲新加入的拉格朗日乘子。

得到拉格朗日方程後,就可以進入我們在上一篇博客 SVM解釋:三、線性可分的情況 中解決此類問題的“套路”了。具體地說,

現在的優化問題相當於求解:

(13)p=minW,b,ξmaxα,μL(W,b,α,ξ,C,μ)

轉換成對偶問題:

(14)d=maxα,μminW,b,ξL(W,b,α,ξ,C,μ)

先求解minW,b,ξL(W,b,α,ξ,C,μ)

(2)LW=0W=i=1nαiyiXiTLb=0i=1nαiyi=0Lξi=0Cαiμi=0

將以上的結果帶入拉格朗日函數,那麼對偶問題d 就是要計算:

(15)maxα,μi=1nαi12i,j=1nαiαjyiyjXiTXj

其實這裏的μ 不用考慮了,因爲現在的式子裏沒有μ 存在了。

最後來看看這個對偶問題的約束條件:

  • αi0
  • j=1mαiyi=0
  • αiC

前兩個條件怎麼來的,上一篇博客中推導過了(可以參考上一篇博客中的公式(3)),至於第3點,那是因爲在上面求偏導的過程中(本篇博客的公式(2)),存在下式:

(16)Cαiμi=0

綜上,加入鬆弛變量和懲罰因子後的SVM問題最終轉化爲下面的帶約束條件的凸優化問題:

(3)maxα i=1nαi12i,j=1nαiαjyiyjXiTXjs.t. 0αiC      j=1mαiyi=0

上面這個優化問題,就是SVM中SMO算法主要要解決的問題。我在下一篇博客 SVM解釋:五、SMO算法 中對SMO算法的介紹全部基於這個優化問題,所以這裏大家注意一下,有個印象。

解得α 後進一步得到Wb ,最終得到分類器:

(17)f(X)=i=1nαiyiXiTX+b

分類器在形式上與沒有加入鬆弛變量和懲罰因子時是一樣的。

1.3 訓練元組的位置分析

最後,我們分析一下訓練元組Xi 在分類器中的位置。上一篇博客中,我最後講到了可以根據αi 的取值判斷訓練元組是否爲支持向量,再根據支持向量即可計算出分類器WX+b=0 的常數項b 的值。先來簡單回顧一下當時的分析:

  • 如果 αi>0 ,那麼此時Xi 是支持向量,滿足yi(WXi+b)=1
  • 如果 αi=0 ,那麼此時Xi 是不是支持向量,滿足yi(WXi+b)1

與線性可分的情況相比,加入鬆弛變量和懲罰因子後,分析會變得更復雜。具體如下:

我們先看最原始的,公式(1)中的優化問題。當然,其最優解當然要滿足KKT條件(參見我的第2篇博客 SVM解釋:二、SVM的數學基礎),因此根據KKT條件的第三項,可以得到以下結論:

(18)αi(1ξiyi(WXi+b))=0μiξ=0

分下列情況討論:

  • 0<αi<C 時:
    因爲αi>0 ,所以1ξiyi(WXi+b)=0 ;因爲αi+μi=C ,且αi<C ,所以μi>0 ;因爲μiξ=0 ,所以ξ=0 ;因爲ξ=0 ,所以ξ=01ξiyi(WXi+b)=0 ,所以yi(WXi+b)=1

  • αi=C 時:
    因爲αi>0 ,所以1ξiyi(WXi+b)=0 ;因爲αi+μi=Cαi=C ,所以μi=0ξ0 且無其他限制;因爲1ξiyi(WXi+b)=0 ,所以yi(WXi+b)1

  • αi=0 時:
    因爲αi=0αi+μi=C ,所以μi=C ,因爲μiξ=0 ,所以ξ=0 ,因爲1ξiyi(WXi+b)0 ,所以yi(WXi+b)1

綜上,在最優點處,所有樣本必須滿足公式(4):

(4){if  αi=0,           yi(WXi+b)1if  αi=C,          yi(WXi+b)1if  0<αi<C,   yi(WXi+b)=1

由公式(4),我們還能推測出以下規律:

  • 滿足0<αi<C 的樣本點就是支持向量,他們在側面上;
  • 滿足αi=0 的樣本點是被正確分類的點,他們在側面以外;
  • 滿足αi=C 的樣本點是是未被正確分類的點,且不在側面上(實際上就是可以被離差“拉”到側面上的點);

總結出這樣的規律是很有用的,我們可以根據優化結果中αi 的取值確定支持向量,再用支持向量解出Wb ,最終確定一個有容錯的SVM分類器。同時,這裏的公式(4)大家注意一下,我在下一篇博客講解SMO算法中,講到選擇優化變量的時候,也會用到這個公式。

2. 核函數

好了,到現在爲止,我一共用了之前的2篇博客,以及本文的一半講SVM,對於線性可分的情況和線性不可分的情況其實我們已經有所瞭解了。現在終於要介紹SVM的重頭戲“核函數”了。跟它的名字一樣,這一塊的知識也是“核”級別的,它非常重要。

加入鬆弛變量和懲罰因子,使得我們可以解決在訓練數據線性不可分的情況下計算分類器的問題。但是好像還是不那麼令人滿意,因爲它對訓練數據都有一定的容錯率,接下來自然要思考的問題是,存不存在一種方法,能夠學習得到更爲複雜的一個曲面(而不是超平面),從而對於線性不可分數據訓練效果更佳。這就要用到所謂的“核技巧”了,和之前的線性模型不同,它是一種非線性模型。

2.1 核技巧

定義4-核技巧:如果數據線性不可分,則可以對特徵向量進行映射,將他們轉化到更高維的空間,使得數據在高維空間是線性可分的。這種思路被稱爲“核技巧”。

我曾看到過一篇文章,作者對於核技巧有一個非常形象的描述:現在有一堆黑球,白球放在桌面上,線性不可分,所謂核技巧就是一拍桌子,將這些球拍到空中去,在空中我們插入一個板子,將兩類球分開。其實通過這個描述你也大致能總結出非線性分類器學習步驟:

  1. 使用一個非線性映射將數據映射到一個特徵空間z (拍桌子);
  2. 在特徵空間z 使用線性學習器分類(插板子);

假設現在有映射函數ϕ() 將數據映射到空間z

(19)Xϕ(X)

根據上一篇博客中的公式(4),如果在z 空間中數據是線性可分的,那麼決策超平面的方程是:

(20)f(x)=i=1nαiyiϕ(Xi)T+b

自然地,最終的決策規則可以用訓練點和測試點的內積得到:

(21)f(x)=i=1nαiyiϕ(Xi)Tϕ(X)+b

其中,X 爲測試元組。

想象一下,如果有一種方式可以在原始空間中直接計算映射後的高維空間的向量內積ϕ(Xi)Tϕ(Xj) ,就不需要把原始空間中的數據映射到新空間中了。那也就是說,可以將上面的兩個步驟融合到一起建立一個非線性的學習器。這樣直接計算法的方法稱爲核函數方法。

形式化地,核函數K(,) 對於原始空間中的數據元組Xi,Xj ,有下式成立:

(22)K(Xi,Xj)=ϕ(Xi)Tϕ(Xj)

2.2 爲什麼要用核函數

在介紹幾種常用的核函數之前,首先明確一個問題:爲什麼SVM的非線性分類模型要用核函數?

我在這裏以July在博文 支持向量機通俗導論 中的例子來說明一下。

Fig.2中,兩類數據以圓環型分佈,那我們當然可以預測,一個合理的決策面也是圓環型的(而不是平面),而且就在這兩類數據之間。


如果以x1,x2 爲當前這個二維平面的兩個座標的話,二次曲線(圓環也是二次曲線)的方程可以寫成如下形式:

(23)a1x12+a2x22+a3x1+a4x2+a5x1x2+a6=0

但是和之前線性可分的情況下我們構造的超平面WX+b=0 相比,現在這種曲面無法用線性分類模型處理。那我們考慮能不能把原始空間映射到高維空間,再考慮當前這個曲面。方法是構造一個5維空間,空間的每個座標這樣設置:

(24)z1=x12,z2=x22,z3=x1,z4=x2,z5=x1x2

那麼在新的高維空間中,之前的二次曲線變成了一個超平面:

(25)i=15aizi+a6=0

到這一步之後,似乎直接根據之前講的SVM的線性分類模型直接處理就OK了。但是你會發現,直接這樣做是有問題的,我剛纔對二維空間內的曲面(其實是曲線)進行處理,把一階、二階的座標組合後,映射到了5維空間,那如果對三維空間映射呢?就會映射到一個19維的空間上,這個空間維數的數量級是爆炸式增長的。會給高維空間中線性分類模型的計算造成很大困難。關於這個問題的解釋,July在其博客中說的非常詳細,讀者可自行翻看其博客中的2.2.2節。

這個問題怎麼解決呢?就要用到核函數了。

先觀察一下訓練分類器用到的計算和分類時用到的計算,可以參考上一篇博客中的公式(3)和公式(4):

  • 訓練時:就是解決如下的凸優化問題(這是經過轉換之後最終得到的拉格朗日對偶問題):

    (26)max i=1nαi12i,j=1nαiαjyiyjXiTXjs.t.j=1mαiyi=0       αi0
  • 分類時,是計算如下函數的正負性:

    (27)αiyiXiTXj+b

不難發現,不論是訓練過程還是分類過程,主要涉及的關於數據的運算都是內積計算。而核函數的作用,就是在不把數據映射到高維空間的前提下(實際上是不顯式地寫出映射後的結果),直接在低維空間中計算映射後向量的內積。綜上,訓練和分類的計算在覈函數的幫助下,可以整理成如下形式:

  • 訓練

    (28)max i=1nαi12i,j=1nαiαjyiyjK(ϕ(Xi),ϕ(Xj))s.t.j=1mαiyi=0       αi0
  • 分類

    (29)f(Xj)=αiyiK(ϕ(Xi),ϕ(Xj))+b

2.3 幾種常見的核函數

對於任意一個映射,我們自己構造出對應的核函數是困難的,因此,一般會從幾種常見的核函數中選擇。常見的核函數大致有4種。我畫了一個表格,展示出了他們的公式:

核函數 公式
線性核 K(X1,X2)=X1TX2
多項式核 K(X1,X2)=(X1TX2+1)q
高斯核(徑向基函數) K(X1,X2)=exp(X1X222s2)
sigmoid核(S形函數) K(X1,X2)=tanh(X1TX2+1)

我簡單說一下多項式核與高斯核:

1. 多項式核q 是由用戶選擇的,比如處理上面那兩個圓環型分佈的點集分類,因爲在二維空間中,所以我們可以選擇q=2 。向量X1,X2 映射到5維空間後,其內積爲:

(30)ϕ(Xi)Tϕ(Xj)=X112X212+X122X222+X11X21+X12X22+X11X21X12X22

而如果我們選擇q=2 時的多項式核函數K(X1,X2)=(X1TX2+1)2 ,計算結果是這樣的:

(31)K(X1,X2)=X112X212+X122X222+2X11X21+2X12X22+2X11X21X12X22+1

你發現他倆個有點像,但又不太一樣。實際上,只要把新的5維空間的幾個維度縮放一下,再加上一個常數維,就是一樣的了。也就是說,核函數計算的向量內積其實是原始空間中的向量被映射到下面的空間中的內積:

(32)ϕ(x1,x2)={x12,x22,2x1,2x2,2x1x2,1}

從核函數的公式你能清晰地感受到核函數的神奇,它就是直接在原始空間計算,達到在高維空間計算的效果。需要說明的是,當q=1 時,多項式核就是線性核。

2. 高斯核:參數s 由用戶設定,這個參數s 實際上是平衡分類計算的因子。具體地說,如果s 太大,那相當於高斯核只是將原始空間映射到一個不是那麼高維的新空間中,不一定能執行線性分類;而如果s 太小,理論上可以將任意的數據映射爲線性可分的,但是這樣一來就可能存在過擬合的問題。不過,只要參數得當,高斯核可以非常完美的解決線性不可分數據的SVM分類問題,所以也是應用最爲廣泛的。關於高斯核函數映射,有張非常形象的示意圖,如下:


大多時候,面對線性不可分的數據,我們先用核函數將數據映射到高維空間中(其實並非真正映射,只是可以計算出映射後向量的內積),再通過加入鬆弛變量和懲罰因子讓映射後的數據在線性模型下求解。這樣,線性不可分情況下完整的SVM就展現在我們眼前了,它就是求解下面的凸優化問題:

(5)min 12i,j=1nαiαjyiyjK(Xi,Xj)i=1nαis.t. 0αiC      j=1mαiyi=0

上面的公式(5)其實是上一篇博客中的公式(4)在線性不可分的情況下,應用核函數,加入鬆弛變量和懲罰因子後的“終極”優化問題。

注意,因爲這個優化問題從結構上比上一篇博客中的公式(3)要更復雜,但是他們的解法是一致的,所以在下一篇博客講解SMO算法時,我會以這個優化問題舉例,因爲難的解決了,簡單的不也就容易了嗎。

3. SVM分類的效果

至此,如何處理數據線性不可分的情況下的SVM分類就算是基本說完了。最後我們看一個例子,這也是July在博文中寫到的,我覺得很形象,直接抄在底下:

“假設現在你是一個農場主,圈養了一批羊羣,但爲預防狼羣襲擊羊羣,你需要搭建一個籬笆來把羊羣圍起來。但是籬笆應該建在哪裏呢?你很可能需要依據牛羣和狼羣的位置建立一個“分類器”,比較下圖這幾種不同的分類器,我們可以看到SVM完成了一個很完美的解決方案。”


4. 損失函數

其實,任何監督學習最終的目的都是要最小化預測結果與真實結果之間的誤差。這種誤差一般用“風險”來評估。很顯然,風險對於一個監督學習算法來說是很重要的,它所評估的誤差大小直接說明了算法的好壞。監督學習系統中有結構化風險和經驗風險兩種。既然說到了SVM的損失函數,就一併將兩種風險做個簡要介紹。

設決策函數爲f() ,對於給定的輸入X ,它的預測結果(計算得到的類標記或者預測數值)爲f(X) ,真實結果爲Y ,那麼常用的損失函數有如下幾種:

  • 0-1損失函數:
    L(Y,f(X))={1,Yf(X)0,Y=f(X)

  • 平方損失函數:
    L(Y,f(X))=(Yf(X))2

  • 絕對損失函數:
    L(Y,f(X))=|Yf(X)|

  • 對數損失函數:
    L(Y,p(Y|X))=logp(Y|X)

如果給定一個訓練集{(X1,Y1),(X2,Y2),,(Xn,Yn)} 和損失函數L(Y,f(X)) ,則經驗風險被定義爲模型f(X) 關於訓練集的平均損失:

(37)Remp(f)=1ni=1nL(Yi,f(Xi))

所以,如果按照經驗風險最小的策略設計學習模型,那麼實際上是求解下面的優化問題:

(38)minfF1ni=1nL(Yi,f(Xi))

經驗風險很直觀,容易理解。但是有個缺點就是當樣本容量較小時,容易產生過擬合。而依據結構風險的設計策略則可以避免這個問題。

結構風險在經驗風險的基礎上加入表示模型複雜度的正則化項或罰項,定義如下:

(39)Rsrm(f)=1ni=1nL(Yi,f(Xi))+λJ(f)

其中J(f) 爲模型複雜度,模型越複雜,J(f) 越大,反之,J(f) 越小。λ0 爲懲罰係數。顯然,罰項的存在控制了模型的複雜度,能夠解決過擬合的問題。按結構風險最小的策略設計的學習模型實際上是求解下面的優化問題:

(40)minfF1ni=1nL(Yi,f(Xi))+λJ(f)

設計SVM時,我們加入鬆弛變量其實就是一種結構風險最小的策略,使得分類器不會過擬合。如果嘗試從損失函數的角度理解SVM,邏輯迴歸(LR),提升(Boosting)等算法的話,可能會有不同的收穫。

5. 結語

這篇博文和之前的兩篇放在一起,我已經解釋了SVM中80%的內容,雖然很多數學方面的細節確實不盡詳細,好在如果只是掌握SVM的基本思想的話,這點內容還算夠。那剩下20%就是要介紹上面說的,解決對偶問題時需要用到的SMO算法了。SMO算法有點複雜,所佔篇幅也不小,所以單獨列在整個SVM學習筆記的最後(即我關於SVM的最後一篇博客),以方便大家在前面更容易掌握SVM的整體邏輯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章