R SVM (サポートベクターマシン)

SVM(サポートベクターマシーン)という方法による、グループ分けの例。データはサンプルで適当に生成したものです。渦巻き状に2つのグループのデータ分布しているとしても、両者を自動的に見分けてくれます。SVMはやや複雑な数学を用いますが、精度が非常に良いと言われています。

library(kernlab) #ksvm
library(mlbench) #mlbench.spirals
dat <- mlbench.spirals(400,cycles=1.2,sd=0.07) #400個の学習データを作成
x <- dat$x #入力データ
y <- dat$classes #ラベル

#線形カーネル
linsvm <- ksvm(x,y,type="C-svc",kernel="vanilladot")

#ガウシアンカーネル
rbfsvm <- ksvm(x,y,type="C-svc",kernel="rbfdot")

op <- par(no.readonly=TRUE) # 現在のグラフィックスパラメータ値をopに退避する par(mfcol=c(1,2),ps=16,lwd=2)
plot(linsvm,data=x) plot(rbfsvm,data=x)
par(op)

結果はこちら。

f:id:nakhirot:20140117142000p:plain

f:id:nakhirot:20140117141939p:plain

カーネルの種類の選択がカギですね。ガウシアンカーネルはとても表現力が高いように思えます。