生存?還是毀滅?——哈姆雷特
可分?還是不可分?——支持向量機(jī)
之前一直在討論的線性分類器,器如其名(汗,這是什么說法?。荒軐?duì)線性可分的樣本做處理。如果提供的樣本線性不可分,結(jié)果很簡(jiǎn)單,線性分類器的求解程序會(huì)無(wú)限循環(huán),永遠(yuǎn)也解不出來(lái)。這必然使得它的適用范圍大大縮小,而它的很多優(yōu)點(diǎn)我們實(shí)在不原意放棄,怎么辦呢?是否有某種方法,讓線性不可分的數(shù)據(jù)變得線性可分呢?
有!其思想說來(lái)也簡(jiǎn)單,來(lái)用一個(gè)二維平面中的分類問題作例子,你一看就會(huì)明白。事先聲明,下面這個(gè)例子是網(wǎng)絡(luò)早就有的,我一時(shí)找不到原作者的正確信息,在此借用,并加進(jìn)了我自己的解說而已。
例子是下面這張圖:
我們把橫軸上端點(diǎn)a和b之間紅色部分里的所有點(diǎn)定為正類,兩邊的黑色部分里的點(diǎn)定為負(fù)類。試問能找到一個(gè)線性函數(shù)把兩類正確分開么?不能,因?yàn)槎S空間里的線性函數(shù)就是指直線,顯然找不到符合條件的直線。
但我們可以找到一條曲線,例如下面這一條:
顯然通過點(diǎn)在這條曲線的上方還是下方就可以判斷點(diǎn)所屬的類別(你在橫軸上隨便找一點(diǎn),算算這一點(diǎn)的函數(shù)值,會(huì)發(fā)現(xiàn)負(fù)類的點(diǎn)函數(shù)值一定比0大,而正類的一定比0?。?。這條曲線就是我們熟知的二次曲線,它的函數(shù)表達(dá)式可以寫為:
問題只是它不是一個(gè)線性函數(shù),但是,下面要注意看了,新建一個(gè)向量y和a:
這樣g(x)就可以轉(zhuǎn)化為f(y)=<a,y>,你可以把y和a分別回帶一下,看看等不等于原來(lái)的g(x)。用內(nèi)積的形式寫你可能看不太清楚,實(shí)際上f(y)的形式就是:
g(x)=f(y)=ay
在任意維度的空間中,這種形式的函數(shù)都是一個(gè)線性函數(shù)(只不過其中的a和y都是多維向量罷了),因?yàn)樽宰兞縴的次數(shù)不大于1。
看出妙在哪了么?原來(lái)在二維空間中一個(gè)線性不可分的問題,映射到四維空間后,變成了線性可分的!因此這也形成了我們最初想解決線性不可分問題的基本思路——向高維空間轉(zhuǎn)化,使其變得線性可分。
而轉(zhuǎn)化最關(guān)鍵的部分就在于找到x到y(tǒng)的映射方法。遺憾的是,如何找到這個(gè)映射,沒有系統(tǒng)性的方法(也就是說,純靠猜和湊)。具體到我們的文本分類問題,文本被表示為上千維的向量,即使維數(shù)已經(jīng)如此之高,也常常是線性不可分的,還要向更高的空間轉(zhuǎn)化。其中的難度可想而知。
小Tips:為什么說f(y)=ay是四維空間里的函數(shù)?
大家可能一時(shí)沒看明白。回想一下我們二維空間里的函數(shù)定義
g(x)=ax+b
變量x是一維的,為什么說它是二維空間里的函數(shù)呢?因?yàn)檫€有一個(gè)變量我們沒寫出來(lái),它的完整形式其實(shí)是
y=g(x)=ax+b
即
y=ax+b
看看,有幾個(gè)變量??jī)蓚€(gè)。那是幾維空間的函數(shù)?(作者五歲的弟弟答:五維的。作者:……)
再看看
f(y)=ay
里面的y是三維的變量,那f(y)是幾維空間里的函數(shù)?(作者五歲的弟弟答:還是五維的。作者:……)
用一個(gè)具體文本分類的例子來(lái)看看這種向高維空間映射從而分類的方法如何運(yùn)作,想象一下,我們文本分類問題的原始空間是1000維的(即每個(gè)要被分類的文檔被表示為一個(gè)1000維的向量),在這個(gè)維度上問題是線性不可分的?,F(xiàn)在我們有一個(gè)2000維空間里的線性函數(shù)
f(x’)=<w’,x’>+b
注意向量的右上角有個(gè) ’哦。它能夠?qū)⒃瓎栴}變得可分。式中的 w’和x’都是2000維的向量,只不過w’是定值,而x’是變量(好吧,嚴(yán)格說來(lái)這個(gè)函數(shù)是2001維的,哈哈),現(xiàn)在我們的輸入呢,是一個(gè)1000維的向量x,分類的過程是先把x變換為2000維的向量x’,然后求這個(gè)變換后的向量x’與向量w’的內(nèi)積,再把這個(gè)內(nèi)積的值和b相加,就得到了結(jié)果,看結(jié)果大于閾值還是小于閾值就得到了分類結(jié)果。
你發(fā)現(xiàn)了什么?我們其實(shí)只關(guān)心那個(gè)高維空間里內(nèi)積的值,那個(gè)值算出來(lái)了,分類結(jié)果就算出來(lái)了。而從理論上說, x’是經(jīng)由x變換來(lái)的,因此廣義上可以把它叫做x的函數(shù)(有一個(gè)x,就確定了一個(gè)x’,對(duì)吧,確定不出第二個(gè)),而w’是常量,它是一個(gè)低維空間里的常量w經(jīng)過變換得到的,所以給了一個(gè)w 和x的值,就有一個(gè)確定的f(x’)值與其對(duì)應(yīng)。這讓我們幻想,是否能有這樣一種函數(shù)K(w,x),他接受低維空間的輸入值,卻能算出高維空間的內(nèi)積值<w’,x’>?
如果有這樣的函數(shù),那么當(dāng)給了一個(gè)低維空間的輸入x以后,
g(x)=K(w,x)+b
f(x’)=<w’,x’>+b
這兩個(gè)函數(shù)的計(jì)算結(jié)果就完全一樣,我們也就用不著費(fèi)力找那個(gè)映射關(guān)系,直接拿低維的輸入往g(x)里面代就可以了(再次提醒,這回的g(x)就不是線性函數(shù)啦,因?yàn)槟悴荒鼙WCK(w,x)這個(gè)表達(dá)式里的x次數(shù)不高于1哦)。
萬(wàn)幸的是,這樣的K(w,x)確實(shí)存在(發(fā)現(xiàn)凡是我們?nèi)祟惸芙鉀Q的問題,大都是巧得不能再巧,特殊得不能再特殊的問題,總是恰好有些能投機(jī)取巧的地方才能解決,由此感到人類的渺?。?,它被稱作核函數(shù)(核,kernel),而且還不止一個(gè),事實(shí)上,只要是滿足了Mercer條件的函數(shù),都可以作為核函數(shù)。核函數(shù)的基本作用就是接受兩個(gè)低維空間里的向量,能夠計(jì)算出經(jīng)過某個(gè)變換后在高維空間里的向量?jī)?nèi)積值。幾個(gè)比較常用的核函數(shù),俄,教課書里都列過,我就不敲了(懶?。?。
回想我們上節(jié)說的求一個(gè)線性分類器,它的形式應(yīng)該是:
現(xiàn)在這個(gè)就是高維空間里的線性函數(shù)(為了區(qū)別低維和高維空間里的函數(shù)和向量,我改了函數(shù)的名字,并且給w和x都加上了 ’),我們就可以用一個(gè)低維空間里的函數(shù)(再一次的,這個(gè)低維空間里的函數(shù)就不再是線性的啦)來(lái)代替,
又發(fā)現(xiàn)什么了?f(x’) 和g(x)里的α,y,b全都是一樣一樣的!這就是說,盡管給的問題是線性不可分的,但是我們就硬當(dāng)它是線性問題來(lái)求解,只不過求解過程中,凡是要求內(nèi)積的時(shí)候就用你選定的核函數(shù)來(lái)算。這樣求出來(lái)的α再和你選定的核函數(shù)一組合,就得到分類器啦!
明白了以上這些,會(huì)自然的問接下來(lái)兩個(gè)問題:
1. 既然有很多的核函數(shù),針對(duì)具體問題該怎么選擇?
2. 如果使用核函數(shù)向高維空間映射后,問題仍然是線性不可分的,那怎么辦?
第一個(gè)問題現(xiàn)在就可以回答你:對(duì)核函數(shù)的選擇,現(xiàn)在還缺乏指導(dǎo)原則!各種實(shí)驗(yàn)的觀察結(jié)果(不光是文本分類)的確表明,某些問題用某些核函數(shù)效果很好,用另一些就很差,但是一般來(lái)講,徑向基核函數(shù)是不會(huì)出太大偏差的一種,首選。(我做文本分類系統(tǒng)的時(shí)候,使用徑向基核函數(shù),沒有參數(shù)調(diào)優(yōu)的情況下,絕大部分類別的準(zhǔn)確和召回都在85%以上,可見。雖然libSVM的作者林智仁認(rèn)為文本分類用線性核函數(shù)效果更佳,待考證)
對(duì)第二個(gè)問題的解決則引出了我們下一節(jié)的主題:松弛變量。