差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

memo:r:rmachinelearning [2013/07/14 04:01]
hasegawa
memo:r:rmachinelearning [2016/07/17 04:22]
ライン 1: ライン 1:
-====== Rで機械学習 ====== 
- 
-===== 分割表 Confusion Matrix ===== 
-クラス分類結果を評価するときに,モデルによる推定値と観測値を表形式で整理した分割表とそこから算出される各種の有効性指標が良く使われる. 
-日本語の参考文献としては,例えば,元田ら:データマイニングの基礎,第1版,オーム社,2006.の201ページからが参考になる. 
- 
-標準環境で分割表を作るには,table()関数を使う. 
-また,library(caret)中のconfusionMatrix()関数を使えば,色々な有効性指標を自動的に算出してくれる.ただし,多クラス分類の場合は"​one versus all"​アプローチによる算出であることに注意. 
- 
-実行例 
- 
-``` 
-library(randomForest);​library(caret) 
-data <- iris 
- 
-## データをランダムに並べ替え 
-data <- data[sample(1:​nrow(data),​replace=F),​] 
- 
-## データの半分を学習用データ,残りの半分を検証用データに分割 
-data.learn <- data[1:​(nrow(data)/​2),​] 
-data.test <- data[((nrow(data)/​2)+1):​nrow(data),​] 
- 
-## ランダムフォレストで分類モデルを作成 
-model.rf <- randomForest(Species~.,​ data=data.learn,​ type="​class"​) 
- 
-## 作成したモデルで予測 
-predicted <- predict(model.rf,​ data=data.test) 
- 
-## 観測値 
-observed <- factor(data.test$Species) 
- 
-## [Tips] 観測値の因子水準を使って,予測値を因子に変換 
-predicted <- factor(predicted,​levels=levels(observed)) 
- 
-## table関数を使って分割表を作成 
-table(predicted,​observed) 
- 
-## confusionMatrix関数を使って分割表を作成 
-confusionMatrix(predicted,​observed) 
- 
-``` 
- 
-実行結果 
- 
-``` 
-> table(predicted,​observed) 
-            observed 
-predicted ​   setosa versicolor virginica 
-  setosa ​        ​10 ​         8         8 
-  versicolor ​     9          8         9 
-  virginica ​      ​5 ​         9         9 
- 
-> confusionMatrix(predicted,​observed) 
-Confusion Matrix and Statistics 
- 
-            Reference 
-Prediction ​  ​setosa versicolor virginica 
-  setosa ​        ​10 ​         8         8 
-  versicolor ​     9          8         9 
-  virginica ​      ​5 ​         9         9 
- 
-Overall Statistics 
-                                          ​ 
-               ​Accuracy : 0.36            ​ 
-                 95% CI : (0.2523, 0.4791) 
-    No Information Rate : 0.3467 ​         ​ 
-    P-Value [Acc > NIR] : 0.4469 ​         ​ 
-                                          ​ 
-                  Kappa : 0.0408 ​         ​ 
- ​Mcnemar'​s Test P-Value : 0.8611 ​         ​ 
- 
-Statistics by Class: 
- 
-                     ​Class:​ setosa Class: versicolor Class: virginica 
-Sensitivity ​                ​0.4167 ​           0.3200 ​          ​0.3462 
-Specificity ​                ​0.6863 ​           0.6400 ​          ​0.7143 
-Pos Pred Value              0.3846 ​           0.3077 ​          ​0.3913 
-Neg Pred Value              0.7143 ​           0.6531 ​          ​0.6731 
-Prevalence ​                 0.3200 ​           0.3333 ​          ​0.3467 
-Detection Rate              0.1333 ​           0.1067 ​          ​0.1200 
-Detection Prevalence ​       0.3467 ​           0.3467 ​          ​0.3067 
-``` 
- 
-[Tips] 観測値の因子水準を使って,予測値を因子に変換 
-  predicted <- factor(predicted,​levels=levels(observed)) 
-こうしておくことで,分類結果にあるクラスが含まれないような場合にも,クラス数×クラス数の正方行列で出力させることが出来る. 
- 
- 
-===== predict()関数の挙動 ===== 
-predict()関数は最低限モデル作成時に使用した説明変数があれば結果を返す. 
-その他に目的変数や余計な変数があっても,説明変数さえあれば結果を返す. 
- 
-  library("​randomForest"​) 
-  ​ 
-  data <- iris 
-  model <- randomForest(Species ~ ., data=data) 
-  ​ 
-  # モデル作成時と同一の変数を持つデータ -> OK 
-  pred <- predict(model,​data) 
-  table(observed = data$Species,​ estimated = pred) 
-  ​ 
-  # 目的変数を削除したデータ -> OK 
-  data1 <- data[,1:4] 
-  pred1 <- predict(model,​data1) 
-  table(observed = data$Species,​ estimated = pred1) 
-  ​ 
-  # 新規に変数を追加したデータ -> OK 
-  data2 <- data 
-  data2$newvar <- data[,1] 
-  pred2 <- predict(model,​data2) 
-  table(observed = data$Species,​ estimated = pred2) 
-  ​ 
-  # 説明変数を削除したデータ -> NG 
-  data3 <- data[,2:5] 
-  pred3 <- predict(model,​data3) 
-  ​ 
-  # 説明変数の名前を変更したデータ -> NG 
-  data4 <- data 
-  names(data4) <- c("​a","​b","​c","​d","​e"​) 
-  names(data4) 
-  pred4 <- predict(model,​data4) 
  
memo/r/rmachinelearning.txt · 最終更新: 2016/07/17 04:22 (外部編集)
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0

- Rental Orbit Space -