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)
結果はこちら。
カーネルの種類の選択がカギですね。ガウシアンカーネルはとても表現力が高いように思えます。