Rのe1071を使ってSVMを試してみる
最近,ちょっとRに注目しています.
Webをスクレイピングしてデータを集めてみたはいいけれど,その後どうしよう状態になっていて,
何かいい手段はないか探していました.
CRANを使ったライブラリが充実していることもあって,よさげな感じです.
ちょうどSVMに関するチュートリアルがあったのでやってみました.
SVM
SVMの実装にも多々あるようですが,Rで使えるSVMでググってみると結構出てくるのがe1071.
チュートリアルもあります.(SVM-Tutorial using R (e1071-package))
e1071にはnaiveBayesも入っていたりするので,使えそう.
他にもLIBLINERをR上で使えるLiblineaRもあるようです.
e1071インストール
本当にこれだけだった...
> install.packages('e1071')
irisデータで実行
上記のチュートリアルを見ながら,irisで実行してみます.
データを一部参照してみると↓のようになっています.
> iris[c(1,100,150),] Sepal.Length Sepal.Width Petal.Length Petal.Width Species 1 5.1 3.5 1.4 0.2 setosa 100 5.7 2.8 4.1 1.3 versicolor 150 5.9 3.0 5.1 1.8 virginica
Species(setosa, versicolor, virginicaの3種)に合わせて分類します.
とりあえず結果を得るために,こんな感じでやってみました.
チューニングはせずデフォルトのまま.
library(e1071) train <- seq.int(1, 150, by=2) test <- setdiff(1:150, train) iris.svm <- svm(Species~., data=iris[train,]) iris.pred <- predict(iris.svm, iris[test,]) table(iris[test,5], iris.pred)
この中にあるsvm(Species~., data=iris[train,])の"Species~."って?と思われたかもしれません.
自分もWeb上で初めて見たときは「何だこりゃ?」となりました.manを見てみると,
## S3 method for class 'formula' svm(formula, data = NULL, ..., subset, na.action = na.omit, scale = TRUE) ... formula a symbolic description of the model to be fit.
と書かれていて,"Species~."でSpeciesにフィットさせる式を表すようです.
最後の"."は全ての変数を使うことを示しているらしい.
実行すると,ほぼ正しく分類できていることが分かります.(正答率96%)
要求されたパッケージ class をロード中です iris.pred setosa versicolor virginica setosa 25 0 0 versicolor 0 25 0 virginica 0 3 22