【R】e1701のSVM
2020年6月29日
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を決め打ちで使います。チューニングのパラメータはcost
とgamma
です。チューニングするためのあたりを付けるために、まずは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