如何理解在二維空間內線性不可分的數據,可以在五維空間內線性可分?

本人新手,自學SVM。由於能力有限,在遇到遇到核函數時,不太能理解為什麼二維空間內線性不可分的數據,可以在五維空間內線性可分。


舉個最簡單的例子,假設二維平面x-y上存在若干點,其中點集A服從{x,y|x^2+y^2=1},點集B服從{x,y|x^2+y^2=9},那麼這些點在二維平面上的分布是這樣的:

藍色的是點集A,紅色的是點集B,他們在xy平面上並不能線性可分,即用一條直線分割(雖然肉眼是可以識別的)

採用映射(x,y)-&>(x,y,x^2+y^2)後,在三維空間的點的分布為:

可見紅色和藍色的點被映射到了不同的平面,在更高維空間中是線性可分的(用一個平面去分割)。


f(x,y)=2x+3y是線性的,

f(x,y)=2x+3y+4xy是非線性的,

f(x,y,xy)=2x+3y+4xy是線性的.


兩個人不會在同一個位置,可他們的影子可以在地上相交。


其實這種問題如果是自己先帶著問題思考,再看答案,就會容易很多。很多同學不幸自己還沒思考,就翻到了後一節,反而會覺得困惑,為什麼前人會提出這麼神經病的處理方法呢?

對此,孔子說過,學而不思則罔。看得多了,想得少了,就會陷入一種知其然不知其所以然的困惑。所以看書上講一個東西,在提出問題和給出答案之間最好給自己一點思考時間,如果是我遇到這個問題,我會怎麼解決?

好,我們從頭看,現在問題是,我有一些二維的數據,按照之前的演算法我想畫一條直線把兩種點分開。但是現實中並不是所有的情況我都能用一條線分開,比如前面很多答主貼的那張圖,一種點裡離原點近,一種點離原點遠,怎麼辦呢?

自然而然地會想到,我不用直線去分,我可以用曲線去分啊。如果我能把原來的演算法推廣到支持「曲線」,不就解決了?當然,這條路是走不通的,原因是曲線的數量太多了,多到比直線的數量還多。

所以退而求其次,我要引入一些額外的關於曲線形狀的假設。

這裡先考慮一個最簡單的情況,我已經知道了什麼曲線是最好的,我怎麼讓演算法「學會」這條曲線呢?只要把數據的坐標進行「預處理」就行了。這裡的道理是,任何奇奇怪怪的曲線我都可以寫成f(x,y)=0的形式,並且使f(x,y)&>0和f(x,y)&<0表示這個曲線的兩側……所以預處理方式一定是存在的,無外乎是把f(x,y)作為新的坐標讓原來的演算法去學。

比如說如果你想畫一個以(0,0)為圓心的圓去分割,你只要把數據從 (x,y) 變成離原點的距離rho,然後一學,嘿嘿,搞定啦。

當然你會問,我要是已經知道了這個f(x,y),我還要去學習個毛線……

所以我們不知道這個f(x,y),我們只好瞎猜一堆函數f1(x,y), f2(x,y), ..., 指望它們中的某個線性組合碰巧接近f,就也能完成這個任務。

所以你就是盡你的可能去多列一些可能有用的坐標,比如說你從(x,y)變成(x,y,rho,theta),維數多了,「湊」出一個有用的分割的概率自然也就大了。

回到原問題,其實從前面討論就能看出來,任何數據只要你搞出一個足夠神奇的映射來,都是「一維空間」內就可分的。但是一般情況下如果你這麼神奇你已經不需要機器學習了,所以你做的就是增加空間維度,增加得多了自然就可分了。


一句話:高維數據如果投影到低維,損失了可分的維度,那麼可分就變不可分了。


推薦Jasper的博客: SVM入門(七)為何需要核函數 ,解釋得很通俗易懂:

之前一直在討論的線性分類器,只能對線性可分的樣本做處理。如果提供的樣本線性不可分,結果很簡單,線性分類器的求解程序會無限循環,永遠也解不出來。這必然使得它的適用範圍大大縮小,而它的很多優點我們實在不原意放棄,怎麼辦呢?是否有某種方法,讓線性不可分的數據變得線性可分呢?

有!其思想說來也簡單,來用一個二維平面中的分類問題作例子,你一看就會明白。事先聲明,下面這個例子是網路早就有的,我一時找不到原作者的正確信息,在此借用,並加進了我自己的解說而已。

例子是下面這張圖:

我們把橫軸上端點a和b之間紅色部分里的所有點定為正類,兩邊的黑色部分里的點定為負類。試問能找到一個線性函數把兩類正確分開么?不能,因為二維空間里的線性函數就是指直線,顯然找不到符合條件的直線。

但我們可以找到一條曲線,例如下面這一條:

顯然通過點在這條曲線的上方還是下方就可以判斷點所屬的類別(你在橫軸上隨便找一點,算算這一點的函數值,會發現負類的點函數值一定比0大,而正類的一定比0小)。這條曲線就是我們熟知的二次曲線,它的函數表達式可以寫為:

問題只是它不是一個線性函數,但是,下面要注意看了,新建一個向量y和a:

這樣g(x)就可以轉化為f(y)=&,你可以把y和a分別回帶一下,看看等不等於原來的g(x)。用內積的形式寫你可能看不太清楚,實際上f(y)的形式就是:

g(x)=f(y)=ay

在任意維度的空間中,這種形式的函數都是一個線性函數(只不過其中的a和y都是多維向量罷了),因為自變數y的次數不大於1。

看出妙在哪了么?原來在二維空間中一個線性不可分的問題,映射到四維空間後,變成了線性可分的!因此這也形成了我們最初想解決線性不可分問題的基本思路——向高維空間轉化,使其變得線性可分。

而轉化最關鍵的部分就在於找到x到y的映射方法。遺憾的是,如何找到這個映射,沒有系統性的方法(也就是說,純靠猜和湊)。具體到我們的文本分類問題,文本被表示為上千維的向量,即使維數已經如此之高,也常常是線性不可分的,還要向更高的空間轉化。其中的難度可想而知。


資料來源:支持向量機通俗導論(理解SVM的三個境界)一樓@張雄解釋的非常好


無厘頭的猜相:在眾多現象里,表靣毫不相干事物,你能夠基於某一角度理清他們的關係,這個角度就是新概念體系的認識


因為多了一個低維到高維的變換,這個變換完全可以不是線性的呀


直線上分三節,中間和兩邊屬性不同。

一次不可分,用二次可分。

分六段,5次可分。這就是原理。


推薦閱讀:

如何看待公司里演算法崗位做數據挖掘大多都是抽特徵跑跑現成模型,而不是造框架造輪子?
python實現梯度下降代碼問題?
為什麼深度神經網路要使用權值來連接神經元?
大數據與深度學習區別?
hadoop與機器學習,這兩個是相輔相成的必須學習完hadoop才能學習機器學習,還是可以單獨去學習?

TAG:機器學習 | SVM | kernel核函數 |