可分?還是不可分?——支持向量機
之前一直在討論的線性分類器,只能對線性可分的樣本做處理。如果提供的樣本線性不可分,結果很簡單,線性分類器的求解程序會無限循環,永遠也解不出來。這必然使得它的適用範圍大大縮小,而它的很多優點我們實在不原意放棄,怎麼辦呢?是否有某種方法,讓線性不可分的數據變得線性可分呢?
有!其思想說來也簡單,來用一個二維平面中的分類問題作例子,你一看就會明白。事先聲明,下面這個例子是網絡早就有的,我一時找不到原作者的正確信息,在此借用,並加進了我自己的解說而已。
例子是下面這張圖:
我們把橫軸上端點a和b之間紅色部分裏的所有點定爲正類,兩邊的黑色部分裏的點定爲負類。試問能找到一個線性函數把兩類正確分開麼?不能,因爲二維空間裏的線性函數就是指直線,顯然找不到符合條件的直線。
但我們可以找到一條曲線,例如下面這一條:
顯然通過點在這條曲線的上方還是下方就可以判斷點所屬的類別(你在橫軸上隨便找一點,算算這一點的函數值,會發現負類的點函數值一定比0大,而正類的一定比0小)。這條曲線就是我們熟知的二次曲線,它的函數表達式可以寫爲:
問題只是它不是一個線性函數,但是,下面要注意看了,新建一個向量y和a:
這樣g(x)就可以轉化爲f(y)=<a,y>,你可以把y和a分別迴帶一下,看看等不等於原來的g(x)。用內積的形式寫你可能看不太清楚,實際上f(y)的形式就是:
g(x)=f(y)=ay
在任意維度的空間中,這種形式的函數都是一個線性函數(只不過其中的a和y都是多維向量罷了),因爲自變量y的次數不大於1。
看出妙在哪了麼?原來在二維空間中一個線性不可分的問題,映射到四維空間後,變成了線性可分的!因此這也形成了我們最初想解決線性不可分問題的基本思路——向高維空間轉化,使其變得線性可分。
小Tips:
爲什麼說f(y)=ay是四維空間裏的函數?
大家可能一時沒看明白。回想一下我們二維空間裏的函數定義
g(x)=ax+b
變量x是一維的,爲什麼說它是二維空間裏的函數呢?因爲還有一個變量我們沒寫出來,它的完整形式其實是
y=g(x)=ax+b
即
y=ax+b
看看,有幾個變量?兩個。那是幾維空間的函數?
再看看
f(y)=ay
裏面的y是三維的變量,那f(y)是幾維空間裏的函數?
而轉化最關鍵的部分就在於找到x到y的映射方法。遺憾的是,如何找到這個映射,沒有系統性的方法(也就是說,純靠猜和湊)。具體到我們的文本分類問題,文本被表示爲上千維的向量,即使維數已經如此之高,也常常是線性不可分的,還要向更高的空間轉化。其中的難度可想而知。 用一個具體文本分類的例子來看看這種向高維空間映射從而分類的方法如何運作,想象一下,我們文本分類問題的原始空間是1000維的(即每個要被分類的文檔被表示爲一個1000維的向量),在這個維度上問題是線性不可分的。現在我們有一個2000維空間裏的線性函數:
f(x')=<w',x'>+b
注意向量的右上角有個 ' 哦。它能夠將原問題變得可分。式中的 w'和x'都是2000維的向量,只不過w'是定值,而x'是變量(好吧,嚴格說來這個函數是2001維的,哈哈),現在我們的輸入呢,是一個1000維的向量x,分類的過程是先把x變換爲2000維的向量x',然後求這個變換後的向量x'與向量w'的內積,再把這個內積的值和b相加,就得到了結果,看結果大於閾值還是小於閾值就得到了分類結果。
你發現了什麼?我們其實只關心那個高維空間裏內積的值,那個值算出來了,分類結果就算出來了。而從理論上說, x’是經由x變換來的,因此廣義上可以把它叫做x的函數(有一個x,就確定了一個x’,對吧,確定不出第二個),而w’是常量,它是一個低維空間裏的常量w經過變換得到的,所以給了一個w 和x的值,就有一個確定的f(x’)值與其對應。這讓我們幻想,是否能有這樣一種函數K(w,x),他接受低維空間的輸入值,卻能算出高維空間的內積值<w’,x’>?
如果有這樣的函數,那麼當給了一個低維空間的輸入x以後,
1. 既然有很多的核函數,針對具體問題該怎麼選擇?
2. 如果使用核函數向高維空間映射後,問題仍然是線性不可分的,那怎麼辦?