--- p.282-------------------------------------------------
supervised learning for classification
LDA, 決定木, SVM分類器の参考サイト:
http://tjo.hatenablog.com/entry/2014/01/06/190456
(分離イメージ)
https://ja.wikipedia.org/wiki/%E6%B1%BA%E5%AE%9A%E6%9C%A8
(決定木)
http://www.sist.ac.jp/~kanakubo/research/neuro/supportvectormachine.html
http://www.r.dl.itc.u-tokyo.ac.jp/~nakagawa/SML1/kernel1.pdf
(SVM)
-----------------------------------------------------------------------------
データ生成
> library(MASS) MASSライブラリ準備
> load('cancer.rda') cancer.rdaのロード(このページに添付)
> ls()
[1] "mldata" 変数名確認
> dim(mldata)
[1] 83 2309
> train_row <- sample(1:83,60) 要素1-83から60個をランダム抽出
> train_row
[1] 68 61 72 66 24 21 11 47 78 59 12 14 22 18 60 41 46 19
[19] 58 40 34 30 1 5 80 67 20 17 54 13 64 49 69 52 39 83
[37] 28 81 51 82 4 56 55 57 62 77 37 9 42 43 27 73 53 26
[55] 50 16 36 10 33 8
> train <- mldata[train_row,] 訓練データをランダムに60行抽出
> test <- mldata[-train_row,] train_row番号を取除き23行抽出
> dim(train)
[1] 60 2309
> dim(test)
[1] 23 2309
> summary(mldata) tumor列の分類ラベルを確認(83行分)
: : : tumor
Min. :0.0430 Min. :0.0678 Min. :0.0446 BL:11
1st Qu.:0.2553 1st Qu.:0.4343 1st Qu.:0.1502 EW:29
Median :0.3450 Median :0.6512 Median :0.2481 NB:18
Mean :0.4590 Mean :0.6977 Mean :0.2806 RM:25
[ reached getOption("max.print") -- omitted 2 rows ]
> testClass <- test$tumor testのtumor正解ラベルを保存しておく
> test$tumor <- NULL これから分類するのでNULLを代入しておく
============= LDA ======================================
> myLD <- lda(tumor ~ ., train) LDAを訓練データで学習
Warning message:
In lda.default(x, grouping, ...) : variables are collinear
<注意>
lda引数は、モデル式定義をtumor以外の全て(tumor~.) を表す
http://cse.naro.affrc.go.jp/takezawa/r-tips/r/71.html
> testRes_lda <- predict(myLD,test) 学習済LDAでtestデータを予測
> sum(testRes_lda$class==testClass) LDAによる分類正解数を計算
[1] 10
> sum(testRes_lda$class!=testClass) LDAによる分類間違い数を計算
[1] 13
======= DecisionTree ======================================
> library(rpart)
> myDT <- rpart(tumor~ ., data = train , control = rpart.control(minsplit=10))
> plot(myDT,uniform=T,margin=0.12) デフォルトで文字切れるのでパラメータ指定する
> text(myDT,use.n=T)
> testout_dt <- predict(myDT, newdata=test)
> classes_dt <- round(testout_dt)
> head(classes_dt)
BL EW NB RM
1 0 0 1 0
15 1 0 0 0
18 1 0 0 0
28 0 1 0 0
31 0 1 0 0
36 0 1 0 0
======= SVM ======================================
> install.packages('e1071')
Installing package into ‘C:/Users/ekaminuma/Documents/R/win-library/3.1’
(as ‘lib’ is unspecified)
trying URL 'http://cran.rstudio.com/bin/windows/contrib/3.1/e1071_1.6-6.zip'
Content type 'application/zip' length 814888 bytes (795 KB)
opened URL
downloaded 795 KB
package ‘e1071’ successfully unpacked and MD5 sums checked
The downloaded binary packages are in
> library(e1071)
> mySVM <- svm(tumor~., data=train)
> testout_svm <- predict(mySVM, test)
> testout_svm
1 15 18 28 31 36 37 38 41 43 45 47 48 50 53 58 67 68 69 75 81 84 85
EW EW BL EW EW EW EW EW EW EW NB EW EW BL BL NB NB NB RM RM RM RM EW
Levels: BL EW NB RM
===========================================
宿題irisデータで、「LDA, DecitionTree, SVM」の分類結果を求める
> dim(iris)
[1] 150 5
150行のうち、100行を訓練に、50行をテストに使うこと。
-----------------------------------------------------------------------------------------------------
ランダムフォレスト、ロジスティック回帰の参考サイト
http://tjo.hatenablog.com/entry/2013/04/11/190155