見出し画像

R言語学習 #04:SVMでIrisデータを分類

前回「Rによるデータマイニング」という本を参考にロジスティック回帰でスパム判定をするコードを実装しました。今回はより正確な予測ができるSVM(サポートベクターマシーン)でデータの分類を行います。「Rによるデータマイニング」の内容だと自環境ではエラーが出てしまったので、代わりに「R言語でSVM(Support Vector Machine)による分類学習」を参考にさせていただきました。

SVMは回帰分析とは異なり、異なるクラスターの偏差が最も遠くなる超平面と探す、というアルゴリズムで分類をおこなう手法です。ロジスティック回帰よりもかなり正確な予測ができますが、モデルの構造から判断基準を読み取るのが難しいというブラックボックスの特徴があります。複数のクラスターを分類するのに有効な教師なし学習の手法です。

今回はR言語付属のIrisデータセットを利用しています。またsample関数を使って無作為抽出のやり方の予習も兼ねてます。

#SVMを使った分類にはKernlabというライブラリを使う
library(ggplot2)
library(dplyr)
library(MASS)
library(kernlab)
setwd("C:/Users/user/Desktop/統計学習用資料")

#irisデータを読み込み、ランダムに抽出→1/1割合で学習・テスト用データに分割
head(iris)
rowdata<-nrow(iris)
random_ids<-sample(rowdata,rowdata*0.5)
random_ids
#学習データを作成
iris_training<-iris[random_ids, ]
iris_training

#予測データを作成
iris_predicting<-iris[-random_ids, ]
iris_predicting

#ksvm関数(SVMを実装)でトレーニングデータを学習 → species以外のすべてを学習に使用
iris_svm<-ksvm(Species ~., data=iris_training )
iris_svm

#predict関数で予測データを評価
result_predict<-predict(iris_svm, iris_predicting)
result_predict

予測結果と正解との比較
table(result_predict,iris_predicting$Species)

学習データの誤差は2.67%、汎用誤差は3.97%という、ニューラルネットワークに次ぐ制度の分類器を作ることができました。Irisデータと同程度のデータをR言語で手早く分類するにはSVMを作るのが有効ですね。


いいなと思ったら応援しよう!