首先,讓我們快速Review一下SVM所解的Optimization Problem (Maximum-margin Criteria):
所以,一個基本的SVM問題,大概會包含兩個主要的參數: 以及 C 。
解法上我們會解上面問題的Dual Problem,因此,我們會看到的就不是 ,而是 也就是一般所謂的Kernel 。
(值得注意的是,Kernel 是在Dual Problem中才會出現的,在Primal Problem會看到的是 Feature Map 。)
這邊點出了SVM Model中重要的兩個參數,kernel 和 cost (也就是上面的C)。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
在LIBSVM中,提供了四種kernel的選擇:
- linear:
- polynomial: (參數:gamma, degree, coef0)
- radial basis:(參數: gamma)
- sigmoid: (參數:gamma, coef0)
在e1071中svm的預設參數如下:
kernel = "radial", degree = 3, gamma = if (is.vector(x)) 1 else 1 / ncol(x), coef0 = 0, cost = 1
我們可以依照不同的問題,而選擇不同的參數來進行fit。不過要特別注意 overfit 的問題。就如同前文中的投影片所提到的,這裡會有一些Bias-Variance trade off / model selection的問題。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
底下我們會demo幾個例子,讓讀者感受一下不同kernel的作用:
首先,使用MASS-cats data,比較 linear kernel 和 radial basis (RBF kernel)
rm(list=ls(all=TRUE)) library(MASS) data(cats) library(e1071) SVM_RBF_Model <- svm(Sex~., data = cats) plot(SVM_RBF_Model,data=cats,color.palette = topo.colors) SVM_Linear_Model <- svm(Sex~., data = cats,kernel="linear") plot(SVM_Linear_Model,data=cats,color.palette = topo.colors)
結果如下:
我們可以看到右邊的Linear kernel 就是找一個Linear hyperplane切開data, 而左邊的RBF kernel 則是經過kernel的作用可以做到nonlinear的效果。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
接下來,我們demo使用同一種參數,但使用不同的kernel參數會有甚麼效果呢?
我們知道RBF的參數主要是gamma,因為cats data一共有144筆,所以內建的gamma是使用1/144 = 0.006944444。
下面我們使用gamma = 10和100來做一些簡單的測試:
我們可以看到,當我們將gamma放大的時候,會出現overfit的現象。
對C (cost) 作改變的時候,也會有一些有趣的事情發生,這部分就留給讀者自己玩玩看囉!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
最後,順帶一提,貼心的e1071 package中其實有附帶tune參數的指令:
obj <- tune.svm(Sex~., data = cats, sampling = "fix", gamma = 2^c(-8,-4,0,4), cost = 2^c(-8,-4,-2,0)) plot(obj, transform.x = log2, transform.y = log2) plot(obj, type = "perspective", theta = 120, phi = 45) obj
我們會看到下面兩張圖:
以及在R的shell中出現,最佳參數的訊息:
> obj Parameter tuning of ‘svm’: - sampling method: 10-fold cross validation - best parameters: gamma cost 1 1 - best performance: 0.2161905
以上是關於SVM一些初步的參數設定的問題和指令,感謝各位讀者的捧場^^
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
上一篇: R上的LIBSVM Package — e1071 [入門篇]
下一篇:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~