バイオ・データ・マイニング/RでSVMを使う
をテンプレートにして作成
開始行:
*はじめに [#g88a8135]
『Rによるバイオインフォマティクスデータ解析』の7.15「SVM...
#html{{
<iframe style="width:120px;height:240px;" marginwidth="0"...
}}
*準備 [#e5c35924]
Rのインストールについては,次のページを見てください.
-[[MacでRを使う>機械学習/MacでRを使う]]
-[[WindowsでRを使う>機械学習/WindowsでRを使う]]
SVMは,''e1071パッケージ''に含まれています.
そこで,e1071パッケージをインストールします.
install.packagesコマンドを実行すると,パッケージをダウン...
#geshi(rsplus){{
install.packages("e1071")
library("e1071")
}}
ここでは,標準で使用できる''irisデータセット''を使います.
#geshi(rsplus){{
data(iris)
}}
このデータセットは,アヤメの種類(Species)をがく片の長さ...
長さと幅は連続値,種類はsetosa, versicolor, virginicaのい...
このデータセットには,setosa, versicolor, virginicaという...
ランダムに10個のデータを選択して,見てみましょう.
#geshi(rsplus){{
iris[sort(sample(1:150,10)),]
}}
#geshi(rsplus){{
Sepal.Length Sepal.Width Petal.Length Petal.Width ...
4 4.6 3.1 1.5 0.2 ...
22 5.1 3.7 1.5 0.4 ...
65 5.6 2.9 3.6 1.3 ver...
97 5.7 2.9 4.2 1.3 ver...
100 5.7 2.8 4.1 1.3 ver...
108 7.3 2.9 6.3 1.8 vi...
116 6.4 3.2 5.3 2.3 vi...
122 5.6 2.8 4.9 2.0 vi...
136 7.7 3.0 6.1 2.3 vi...
146 6.7 3.0 5.2 2.3 vi...
}}
これをランダム・サンプリングして80%を訓練データとし,のこ...
#geshi(rsplus){{
idx <- sample(nrow(iris), as.integer(nrow(iris)*0.8))
iris.train <- iris[idx,]
iris.test <- iris[-idx,]
}}
*SVM [#u50975a4]
SVM(サポート・ベクター・マシン)は二値分類を行う教師付き...
SVMが高い汎化能力を持つ理由の一つが,''カーネル・トリック...
これは,元の空間で線形分離が不可能なときでも,カーネルと...
SVMは,最初,二値分類用に開発されましたが,その語,同じ技...
そこで,最近では,分類用のSVMを''SVC''(サポート・ベクタ...
ここでは,分類用のSVM,つまりSVCのことを単にSVMと呼びます.
SVMは,高次元空間の中で,正事例と負事例を分離する超平面(...
したがって,説明変数はすべて実数値でなければなりません.
分離超平面から最も近い事例を''サポート・ベクター''といい...
#ref(hard_margin_svm_1.png,nolink,50%);
SVMは,このマージンが最も大きい分離超平面を求めます.
これを''マージン最大化''といいます.
#ref(hard_margin_svm_2.png,nolink,50%);
分離超平面で正事例と負事例を完全に分けられるならこれで良...
分けられると仮定するSVMを''ハード・マージンSVM''といい,...
ソフト・マージンSVMでは,マージンの内側からはみ出している...
マージンの内側からはみ出していない事例のスラック変数の値...
#ref(soft_margin_svm.png,nolink,50%)
ここからはソフト・マージンSVMのことを単にSVMと呼びます.
SVMの判別関数は次の式で表されます.
\[ f(\mathbf{x}) = \mathbf{x}^\mathrm{T} \mathbf{w} + b \]
ここで,[math]\mathbf{x}[/math] は説明変数ベクトル,[math...
つまり,判別関数を説明変数 [math]x_1[/math], [math]x_2[/m...
SVMは次のような [math]\mathbf{w}[/math] と [math]b[/math]...
\[ \mathrm{argmin}_{\mathbf{w}, b} C \sum_1^n \xi_i + \fr...
[math]\sum_1^n \xi_i[/math] はスラック変数の総和,つまり...
これを最小化するということは,ペナルティの総和が小さいほ...
[math]||\mathbf{w}||^2[/math] は正則化項です.
これを最小化するということは,係数の絶対値が小さいほどい...
[math]C[/math] はペナルティの総和と正則化項のどちらをどの...
[math]C[/math] が大きいとペナルティの総和を小さくしようと...
*SVMの実行 [#t5be7a25]
e1071パッケージのSVMを使うには,''svm関数''を用います.
svm関数の引数には,モデル式と訓練データを与えます.
#geshi(rsplus){{
iris.svm <- svm(Species~., data=iris.train)
}}
モデル式は,「目的変数 ~ 説明変数」という形をしていて,複...
また,この例のように,目的変数以外全部を説明変数とすると...
irisデータのSpeciesにはsetosa, versicolor, virginicaとい...
学習したモデルを表示すると次のようになります.
#geshi(rsplus){{
iris.svm
}}
#geshi(rsplus){{
Call:
svm(formula = Species ~ ., data = iris.train)
Parameters:
SVM-Type: C-classification
SVM-Kernel: radial
cost: 1
gamma: 0.25
Number of Support Vectors: 49
}}
SVM-TypeはSVMの種類を表し,C-classificationというのは,上...
''C-SVC''ともいいます.
SVM-Kernelはカーネル・トリックに用いられたカーネル(マッ...
''RBFカーネル'', ''ガウシアン・カーネル''ともいいます.
costはC-SVCのパラメーター [math]C[/math],gammaはRBFカー...
そして一番下にはサポート・ベクターの数が出ています.
*テスト・データの予測 [#x2920564]
SVMで学習したモデルを用いてテスト・データに対してカテゴリ...
予測するには,''predict関数''を使います.
predicrt関数には,学習したモデルとテスト・データを引数と...
#geshi(rsplus){{
iris.svm.pred <- predict(iris.svm, iris.test)
}}
予測結果と正解ラベルを突き合わせて表を作ります.
#geshi(rsplus){{
table(iris.svm.pred, iris.test[,5])
}}
#geshi(rsplus){{
iris.svm.pred setosa versicolor virginica
setosa 10 0 0
versicolor 0 7 1
virginica 0 0 12
}}
正解がsetosaの事例は10個すべてsetosaと予測でき,正解がver...
*チューニング [#r504e596]
そのまま実行して精度がそれほど良くなかったとしても,そこ...
パラメーターを調整したり,カーネルを変更することで,もっ...
ただし,一つの訓練データだけでチューニングを行うと,その...
気をつけましょう.
*まとめ [#z31308ae]
SVM (SVC)は高い汎化能力を持つ2値分類のための機械学習手法...
SVMに与えるデータの説明変数は全て数値でなければなりません.
e1071パッケージのsvm関数は,目標変数のカテゴリーが3種類以...
SVMはカーネル・トリックを用いることで高い汎化能力を得てい...
カーネルの種類やそのパラメーターを変えることで,より高い...
SVMと同じ技術を用いて回帰もできます.
分類のためのSVMをSVC,回帰のためのSVMをSVRといいます.
*参考文献 [#g8f00b3a]
#html{{
<iframe style="width:120px;height:240px;" marginwidth="0"...
<iframe style="width:120px;height:240px;" marginwidth="0"...
<iframe style="width:120px;height:240px;" marginwidth="0"...
<iframe style="width:120px;height:240px;" marginwidth="0"...
}}
終了行:
*はじめに [#g88a8135]
『Rによるバイオインフォマティクスデータ解析』の7.15「SVM...
#html{{
<iframe style="width:120px;height:240px;" marginwidth="0"...
}}
*準備 [#e5c35924]
Rのインストールについては,次のページを見てください.
-[[MacでRを使う>機械学習/MacでRを使う]]
-[[WindowsでRを使う>機械学習/WindowsでRを使う]]
SVMは,''e1071パッケージ''に含まれています.
そこで,e1071パッケージをインストールします.
install.packagesコマンドを実行すると,パッケージをダウン...
#geshi(rsplus){{
install.packages("e1071")
library("e1071")
}}
ここでは,標準で使用できる''irisデータセット''を使います.
#geshi(rsplus){{
data(iris)
}}
このデータセットは,アヤメの種類(Species)をがく片の長さ...
長さと幅は連続値,種類はsetosa, versicolor, virginicaのい...
このデータセットには,setosa, versicolor, virginicaという...
ランダムに10個のデータを選択して,見てみましょう.
#geshi(rsplus){{
iris[sort(sample(1:150,10)),]
}}
#geshi(rsplus){{
Sepal.Length Sepal.Width Petal.Length Petal.Width ...
4 4.6 3.1 1.5 0.2 ...
22 5.1 3.7 1.5 0.4 ...
65 5.6 2.9 3.6 1.3 ver...
97 5.7 2.9 4.2 1.3 ver...
100 5.7 2.8 4.1 1.3 ver...
108 7.3 2.9 6.3 1.8 vi...
116 6.4 3.2 5.3 2.3 vi...
122 5.6 2.8 4.9 2.0 vi...
136 7.7 3.0 6.1 2.3 vi...
146 6.7 3.0 5.2 2.3 vi...
}}
これをランダム・サンプリングして80%を訓練データとし,のこ...
#geshi(rsplus){{
idx <- sample(nrow(iris), as.integer(nrow(iris)*0.8))
iris.train <- iris[idx,]
iris.test <- iris[-idx,]
}}
*SVM [#u50975a4]
SVM(サポート・ベクター・マシン)は二値分類を行う教師付き...
SVMが高い汎化能力を持つ理由の一つが,''カーネル・トリック...
これは,元の空間で線形分離が不可能なときでも,カーネルと...
SVMは,最初,二値分類用に開発されましたが,その語,同じ技...
そこで,最近では,分類用のSVMを''SVC''(サポート・ベクタ...
ここでは,分類用のSVM,つまりSVCのことを単にSVMと呼びます.
SVMは,高次元空間の中で,正事例と負事例を分離する超平面(...
したがって,説明変数はすべて実数値でなければなりません.
分離超平面から最も近い事例を''サポート・ベクター''といい...
#ref(hard_margin_svm_1.png,nolink,50%);
SVMは,このマージンが最も大きい分離超平面を求めます.
これを''マージン最大化''といいます.
#ref(hard_margin_svm_2.png,nolink,50%);
分離超平面で正事例と負事例を完全に分けられるならこれで良...
分けられると仮定するSVMを''ハード・マージンSVM''といい,...
ソフト・マージンSVMでは,マージンの内側からはみ出している...
マージンの内側からはみ出していない事例のスラック変数の値...
#ref(soft_margin_svm.png,nolink,50%)
ここからはソフト・マージンSVMのことを単にSVMと呼びます.
SVMの判別関数は次の式で表されます.
\[ f(\mathbf{x}) = \mathbf{x}^\mathrm{T} \mathbf{w} + b \]
ここで,[math]\mathbf{x}[/math] は説明変数ベクトル,[math...
つまり,判別関数を説明変数 [math]x_1[/math], [math]x_2[/m...
SVMは次のような [math]\mathbf{w}[/math] と [math]b[/math]...
\[ \mathrm{argmin}_{\mathbf{w}, b} C \sum_1^n \xi_i + \fr...
[math]\sum_1^n \xi_i[/math] はスラック変数の総和,つまり...
これを最小化するということは,ペナルティの総和が小さいほ...
[math]||\mathbf{w}||^2[/math] は正則化項です.
これを最小化するということは,係数の絶対値が小さいほどい...
[math]C[/math] はペナルティの総和と正則化項のどちらをどの...
[math]C[/math] が大きいとペナルティの総和を小さくしようと...
*SVMの実行 [#t5be7a25]
e1071パッケージのSVMを使うには,''svm関数''を用います.
svm関数の引数には,モデル式と訓練データを与えます.
#geshi(rsplus){{
iris.svm <- svm(Species~., data=iris.train)
}}
モデル式は,「目的変数 ~ 説明変数」という形をしていて,複...
また,この例のように,目的変数以外全部を説明変数とすると...
irisデータのSpeciesにはsetosa, versicolor, virginicaとい...
学習したモデルを表示すると次のようになります.
#geshi(rsplus){{
iris.svm
}}
#geshi(rsplus){{
Call:
svm(formula = Species ~ ., data = iris.train)
Parameters:
SVM-Type: C-classification
SVM-Kernel: radial
cost: 1
gamma: 0.25
Number of Support Vectors: 49
}}
SVM-TypeはSVMの種類を表し,C-classificationというのは,上...
''C-SVC''ともいいます.
SVM-Kernelはカーネル・トリックに用いられたカーネル(マッ...
''RBFカーネル'', ''ガウシアン・カーネル''ともいいます.
costはC-SVCのパラメーター [math]C[/math],gammaはRBFカー...
そして一番下にはサポート・ベクターの数が出ています.
*テスト・データの予測 [#x2920564]
SVMで学習したモデルを用いてテスト・データに対してカテゴリ...
予測するには,''predict関数''を使います.
predicrt関数には,学習したモデルとテスト・データを引数と...
#geshi(rsplus){{
iris.svm.pred <- predict(iris.svm, iris.test)
}}
予測結果と正解ラベルを突き合わせて表を作ります.
#geshi(rsplus){{
table(iris.svm.pred, iris.test[,5])
}}
#geshi(rsplus){{
iris.svm.pred setosa versicolor virginica
setosa 10 0 0
versicolor 0 7 1
virginica 0 0 12
}}
正解がsetosaの事例は10個すべてsetosaと予測でき,正解がver...
*チューニング [#r504e596]
そのまま実行して精度がそれほど良くなかったとしても,そこ...
パラメーターを調整したり,カーネルを変更することで,もっ...
ただし,一つの訓練データだけでチューニングを行うと,その...
気をつけましょう.
*まとめ [#z31308ae]
SVM (SVC)は高い汎化能力を持つ2値分類のための機械学習手法...
SVMに与えるデータの説明変数は全て数値でなければなりません.
e1071パッケージのsvm関数は,目標変数のカテゴリーが3種類以...
SVMはカーネル・トリックを用いることで高い汎化能力を得てい...
カーネルの種類やそのパラメーターを変えることで,より高い...
SVMと同じ技術を用いて回帰もできます.
分類のためのSVMをSVC,回帰のためのSVMをSVRといいます.
*参考文献 [#g8f00b3a]
#html{{
<iframe style="width:120px;height:240px;" marginwidth="0"...
<iframe style="width:120px;height:240px;" marginwidth="0"...
<iframe style="width:120px;height:240px;" marginwidth="0"...
<iframe style="width:120px;height:240px;" marginwidth="0"...
}}
ページ名: