2015年1月20日 星期二

Machine Learning 0 -- What is SVM?


前面的課程主要是在講SVM(Support Vector Machine),本來這篇兩個禮拜前就應該發的,不過很多事讓我一拖再拖,我希望以後可以以兩個禮拜一篇的速度完成,有點像是自己對這個領域的小筆記。

SVM 是一種 Machine Learning 的演算法,照字面上的意思來看,就是"利用 support vector分類 machine"。
在了解這句話之前,我們先來看一個簡單的圖

取樣資料

一般來說,machine learning 的目的是從取樣資料(手上有的看得到的資料)中預測一個可以描述全域資料(不知道長怎樣,不過大概跟取樣資料長得很像)的方程式 $f(x)$,換句話說$f(x)$是學習的最終目標;以上圖為例,我們可以用任意直線、圓錐曲線甚至是不規則圖形來分開他們,每一個圖形都是一個假說(hypothesis),以$h_i(x)$表示,當我們使用不同的 machine learning 演算法 (或者是使用同一種演算法但不同參數),就是用不同的選妃標準來選擇一個最適合的假說,被挑選出來的妃子假說我們會讓他進化成皇后$g(x)$,$g(x)$就是我們的預測值,我們會希望$g(x)$非常接近世界上最完美的皇后$f(x)$。

圖上的三條線都可以分開兩群資料,所以我們都可以把它們看成假說。

現在我們回到那句話:"SVM 是利用 support vector 來分類的 machine"。SVM 挑選假說的方式就是去尋找 support vector,並且以 support vector 為基準來分類。這句話從字面上完全無法了解它的意函,所以有另外一個比較通俗的說法:

找到一條可以分類的線,而且這條線所在的區域擁有兩群資料間最大的邊界。

找到一條可以分類的線,而且這條線所在的區域擁有兩群資料間最大的邊界。

找到一條可以分類的線,而且這條線所在的區域擁有兩群資料間最大的邊界。

因為很重要所以要說三次

如下圖,如果假說都是直線的話,SVM 就是要找到一條線離左右兩群資料間的區域最大。

中間的區域就像是緩衝區一樣,到左右兩邊的緩衝區越大,就有很大的機會容忍取樣上的誤差。

好啦,現在問題就來了,兩群資料可以分就好幹嘛這麼龜毛,還要找最大的邊界?

其實這很直覺!撇開數學(shatter, vc dimension)不談,要確保 machine learning 出來的結果正確,最重要的就是兩件事,1)取樣的資料要好。2)演算法要挑剔。

對我個人來說,好的取樣資料是最重要的,因為我們不可能把世界上所有的資料都拿來用,所以我們只能取其中有代表性的資料出來算,如果取得不好,就算使用世界 上最強的演算法也算不出符合原始資料的結果。就像是要去分析交大學生的習慣,如果全部都在竹軒、女二舍裡面調查的話,就會有交大是女校的錯覺,在這樣的錯覺下,任何對於此資料做出的分析找到的$g(x)$一定會跟$f(x)$相去甚遠。

不過就算是再好的取樣,取出的資料也不能100%代表著母體,而這時候使用演算法就要特別小心。在 machine learning 裡面,演算法決定了$h_i(x)$的產生方式,以及選擇$g(x)$的標準。如果產生$h_i(x)$的方式不挑剔,不管三七二十一,只要能夠把當前這筆資料完美的處理就好,很容易會學過頭了,也就是說好得學壞得也學,連那些誤差都學得淋漓盡致,一般正式的文章裏面都把這個叫做 over fitting。為了避免 over fitting,最簡單的方式就是對演算法設下條件,而SVM的條件就是,要找最大的邊界。

到這邊就是簡單的 machine learning 以及 SVM 的概念。

沒有留言 :

張貼留言