このページはまだ書きかけです.

はじめに

『Rによるバイオインフォマティクスデータ解析』の7.15「SVM」を参考にして,RでSVMを使って学習します.

準備

Rのインストールについては,次のページを見てください.

Naïve Bayesは,e1071パッケージに含まれています. そこで,e1071パッケージをインストールします. install.packagesコマンドを実行すると,パッケージをダウンロードするサーバーを聞かれますので,リストからJapanのどれかを選択します.

install.packages("e1071")
library("e1071")

ここでは,標準で使用できるirisデータセットを使います.

data(iris)

このデータセットは,アヤメの種類(Species)を花びらの長さ(Sepal.Length),幅(Lepal.Width),がくの長さ(Petal.Length),幅(Petal.Width)によって分類する問題です. 長さと幅は連続値,種類はsetosa, versicolor, virginicaのいずれかをとる離散値です.

このデータセットには,setosa, versicolor, virginicaという3種類のアヤメについて,それぞれ50個ずつ,合計150個のデータが含まれています. ランダムに10個のデータを選択して,見てみましょう.

iris[sort(sample(1:150,10)),]

これをランダム・サンプリングして80%を訓練データとし,のこりの20%をテスト・データとします.

    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
4            4.6         3.1          1.5         0.2     setosa
22           5.1         3.7          1.5         0.4     setosa
65           5.6         2.9          3.6         1.3 versicolor
97           5.7         2.9          4.2         1.3 versicolor
100          5.7         2.8          4.1         1.3 versicolor
108          7.3         2.9          6.3         1.8  virginica
116          6.4         3.2          5.3         2.3  virginica
122          5.6         2.8          4.9         2.0  virginica
136          7.7         3.0          6.1         2.3  virginica
146          6.7         3.0          5.2         2.3  virginica

SVM

SVM(サポート・ベクター・マシン)は二値分類を行う教師付き学習の手法で,高い汎化能力を持っています.

SVMは,最初,二値分類用に開発されましたが,その語,同じ技術を使って回帰を行う手法が開発されました. そこで,最近では,分類用のSVMをSVC(サポート・ベクター分類),回帰用のSVMをSVR(サポート・ベクター回帰)と呼んで区別します.

ここでは,分類用のSVM,つまりSVCのことを単にSVMと呼びます.

SVMは,高次元空間の中で,正事例と負事例を分離する超平面(線形判別関数)を求めます. したがって,説明変数はすべて実数値でなければなりません.

SVMを簡単に説明するのは大変なので,専門書や他の解説を参照してください.

SVMの特徴の一つが,カーネル・トリックというテクニックを用いることで,高い汎化能力が得られることです. これは,元の空間で線形分離が不可能なときでも,カーネルと呼ばれる写像関数を用いて,線形分離可能な空間にマッピングすることで,線形分離を可能にするというものです.

e1071パッケージのSVMを使うには,svm関数を用います. svm関数の引数には,モデル式と訓練データを与えます.

idx <- sample(nrow(iris), as.integer(nrow(iris)*0.8))
iris.train <- iris[idx,]
iris.test <- iris[-idx,]

モデル式は,「目的変数 ~ 説明変数」という形をしていて,複数の説明変数を指定するときは記号 +(プラス)で連結します. また,この例のように,目的変数以外全部を説明変数とするときは,記号 .(ドット)で表すことができます.

iris.svm <- svm(Species~., data=iris.train)
iris.svm

このページはまだ書きかけです.

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS