R上的LIBSVM Package — e1071 [參數篇]

首先,讓我們快速Review一下SVM所解的Optimization Problem (Maximum-margin Criteria):

所以,一個基本的SVM問題,大概會包含兩個主要的參數:\phi 以及 C 。

解法上我們會解上面問題的Dual Problem,因此,我們會看到的就不是 \phi,而是 <\phi(x),\phi(y)> 也就是一般所謂的Kernel K(x,y)

(值得注意的是,Kernel 是在Dual Problem中才會出現的,在Primal Problem會看到的是 Feature Map \phi 。)

這邊點出了SVM Model中重要的兩個參數,kernel 和 cost (也就是上面的C)。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

在LIBSVM中,提供了四種kernel的選擇:

  • linear:K(u,v) = <u,v>
  • polynomial: K(u,v) = (\gamma <u,v> + coef0)^{degree} (參數:gamma, degree, coef0)
  • radial basis:K(u,v) = e^{\gamma |u-v|^2}(參數: gamma)
  • sigmoid:K(u,v) = \tanh(\gamma <u,v> + coef0) (參數: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 [入門篇]

下一篇:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This entry was posted in Classification and Regression, Data Mining / Machine Learning, R Programming. Bookmark the permalink.

Leave a comment