【R】e1701のSVM

1. はじめに

e1071は統計領域で扱う様々な関数群を含むパッケージです。今回は、高性能な判別器として広く普及が進む、SVMを使ってみます。

2. インストール

CRANからインストールします。

install.packages(e1071)

3. データ

caretパッケージに入っているBloodBrainというデータを使います。目的変数をlogBBBとして、svm関数による回帰を行います。データを読み込み、一つのデータフレームにまとめます。

library(e1071)
library(caret)
data(BloodBrain, package="caret")
dat <- cbind(bbbDescr, logBBB)

4. 使ってみる

4.1 あたりをつける

カーネル関数は、radial, sigmoid, polynomial, linearを指定できます。デフォルトのradialを決め打ちで使います。チューニングのパラメータはcostgammaです。チューニングするためのあたりを付けるために、まずはsvmを実行してみます。

logBBB.svm <- svm(logBBB~., data=dat)
summary(logBBB.svm)

Call:
svm(formula = logBBB ~ ., data = dat)


Parameters:
   SVM-Type:  eps-regression 
 SVM-Kernel:  radial 
       cost:  1 
      gamma:  0.007462687 
    epsilon:  0.1 


Number of Support Vectors:  178

cost:1, gamma:0.007462687 となりました。

4.2 チューニングしてみる

あたりを付けたところ、cost:1, gamma:0.007462687 となりましたので、その周辺でチューニングしてみます。

logBBB.svm.tune <- tune.svm(logBBB~., data=dat, gamma = 2^(-8:-2), cost=2^(-1:2))
summary(logBBB.svm.tune)

Parameter tuning of ‘svm’:

- sampling method: 10-fold cross validation 

- best parameters:
     gamma cost
 0.0078125    4

- best performance: 0.2507203 

- Detailed performance results:
        gamma cost     error dispersion
1  0.00390625  0.5 0.3021723  0.1618952
2  0.00781250  0.5 0.3004726  0.1599227
3  0.01562500  0.5 0.3285242  0.1699263
4  0.03125000  0.5 0.4187650  0.2039826
5  0.06250000  0.5 0.5246573  0.2423437
6  0.12500000  0.5 0.5824811  0.2627521
7  0.25000000  0.5 0.6034361  0.2675260
8  0.00390625  1.0 0.2836363  0.1494346
9  0.00781250  1.0 0.2754260  0.1514792
10 0.01562500  1.0 0.2941699  0.1591616
11 0.03125000  1.0 0.3727850  0.1892919
12 0.06250000  1.0 0.4857126  0.2264543
13 0.12500000  1.0 0.5618156  0.2553568
14 0.25000000  1.0 0.5928454  0.2628633
15 0.00390625  2.0 0.2642614  0.1425705
16 0.00781250  2.0 0.2569366  0.1479968
17 0.01562500  2.0 0.2717410  0.1516792
18 0.03125000  2.0 0.3456678  0.1729539
19 0.06250000  2.0 0.4646357  0.2093818
20 0.12500000  2.0 0.5506301  0.2428396
21 0.25000000  2.0 0.5860906  0.2536212
22 0.00390625  4.0 0.2540766  0.1417956
23 0.00781250  4.0 0.2507203  0.1433959
24 0.01562500  4.0 0.2719788  0.1515800
25 0.03125000  4.0 0.3436324  0.1699465
26 0.06250000  4.0 0.4618038  0.2046490
27 0.12500000  4.0 0.5494340  0.2393802
28 0.25000000  4.0 0.5859083  0.2512247

この結果、最もよいパラメータは、cost: 4, gamma: 0.0078125でした。

4.3 学習

上のパラメータを使って、学習します。

logBBB.svm.best <- svm(logBBB~., data=dat, gammma=0.0078125, cost=4)

4.4 予測

導出したモデルで予測してみます。

set.seed(1234)
predict(logBBB.svm.best, dat[sample(1:length(bbbDescr), 6),-135])
> predict(logBBB.svm.best, dat[sample(1:length(bbbDescr), 6),-135])
         28          80         101         111          98         103 
-1.26201167 -0.49798437  0.08196234  0.39801556  0.27192683 -0.25776946 

Add a Comment

メールアドレスが公開されることはありません。