機械学習を用いた予測モデル構築・評価

16,122 views
15,800 views

Published on

Published in: Technology, Education
0 Comments
87 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
16,122
On SlideShare
0
From Embeds
0
Number of Embeds
12
Actions
Shares
0
Downloads
187
Comments
0
Likes
87
Embeds 0
No embeds

No notes for slide

機械学習を用いた予測モデル構築・評価

  1. 1. 機械学習を用いた 予測モデルの構築・評価 2014年4月19日 第38回Tokyo.R @sfchaos
  2. 2. 自己紹介  TwitterID: @sfchaos  お仕事: 人工知能的な何か (データマイニング, セマンティックWeb, オントロジー, etc.) 1 RDF OWL SPARQL
  3. 3. 自己紹介  TwitterID: @sfchaos  お仕事: 人工知能的な何か (データマイニング, セマンティックWeb, オントロジー, etc.) 2 DF OWL(アール〔アウル〕と読むっぽい) SPA QL
  4. 4. アジェンダ 1. イントロダクション 2. 予測モデル構築・評価の考え方 3. 予測モデル構築・評価 基礎編 4. 予測モデル構築・評価 発展編 5. まとめ 3
  5. 5. 1. イントロダクション 4
  6. 6. はじめての予測モデル 5 アヤメの種類を予測する モデルが欲しいのよ. 明日の朝までに至急 作ってちょうだい. データがこうスッと来たら バァッといってガーンと 作ればできるでしょ?
  7. 7. 更け行く夜・・・ 6
  8. 8. できたー!! 7 > library(rpart) > library(rattle) > fit.rp <- rpart(Species ~., data=iris) > fancyRpartPlot(fit.rp)
  9. 9. 数日後・・・ 8 明日の朝までに 至急作り直してちょうだい あんたが作った予測モデル 全然あたらないじゃないのよ! ☆◎×??
  10. 10. 失敗原因は重要な作業を怠ったこと 汎化性能の検証 9 ハイパーパラメータのチューニング 属性選択 詳細については,後に詳しく説明します
  11. 11. またしても更け行く夜・・・ 10
  12. 12. できたー!! 11
  13. 13. さらに数日後・・・ 12 そういえば,世の中には いろんな機械学習の アルゴリズムが あるらしいわね. 全部やってちょうだい. 精度はまあまあ 出るようにはなってきたわ. でも・・・何かが足りないわ.
  14. 14. It’s very hard… 13
  15. 15. 本日の発表のテーマ 14 caretパッケージの使い方を交えながら, 機械学習を用いた予測モデル構築・評価の お話をします caretパッケージを用いることにより 機械学習の様々なアルゴリズムに対して 統一したフレームワークでモデル構築・評価が できるようになります
  16. 16. 2. 予測モデル構築・評価の 考え方 15
  17. 17. 予測モデル 16 目的変数 説明変数 xy )(xfy  予測モデル f 説明変数 x から目的変数 y を予測する 結果 原因 未知のデータに対する高 い予測力(汎化性能)と 安定性が求められる
  18. 18. 予測モデル 17 目的変数 y 予測の例 回帰 連続値 売上予測,電力量予測, etc. クラス分類 離散値 退会者予測,故障予測, etc.
  19. 19. 特徴量作成 (feature engineering/construction) 18 データ 目的変数 説明変数 機械学習の文脈では 特徴量,属性(feature) と呼ばれることが多い xy 特徴量生成は予測モデル構築における最重要項目の一つ
  20. 20. モデル構築・評価のスキーム (ホールドアウト検定) 19 データ 訓練 データ 検証 データ モデル 構築 予測 モデル モデル 検証 検証 結果 モデルを評価する フェーズ データを訓練用と検証用に分けて予測精度を検証 モデルを構築する フェーズ
  21. 21. モデル構築・評価のスキーム (リサンプリング/クロスバリデーション・ブートストラップ) 20 データ 訓練 データ 検証 データ モデル 構築 予測 モデル モデル 検証 検証 結果 訓練 データ 検証 データ モデル 構築 予測 モデル モデル 検証 検証 結果 ・ ・ ・ 訓練データと 検証データを 複数セット作成 検証 結果の 統合 複数セットの訓練・検証データに対して予測モデルを構築し 評価
  22. 22. ハイパーパラメータの最適化  機械学習のアルゴリズムには,ハイパーパラメータというもの があり,最適な設定値を求める必要がある.  実際は最適値ではなく,指定した探索範囲の値から最も 適切なものを選ぶことが多い. 21 ハイパーパラメータの例: 決定木の複雑さは?
  23. 23. モデルの評価 22 適合率(Precision) = TP/(TP + FP) 再現率(Recall) = TP/(TP +FN) 正解率(Accuracy) = (TP + TN)/(TP + FP + FN + TN) 特異度(Specificity) = TN/(TN + FP)  クラス分類問題のモデルは,検証データに対して ROC曲線や分割表による評価を行うことが多い. 実績 正例 負例 予測 正例 TP FP 負例 FN TN
  24. 24. 予測モデル構築の流れ 23 ハイパーパラメー タの探索範囲の 決定 各ハイパーパラ メータに対する処 理 評価指標の 算出 最適な ハイパーパラメー タの決定 データの リサンプリング モデルの フィッティング 検証データに 対する予測 特徴量の 作成
  25. 25. 3. 予測モデル構築・評価 基礎編 24
  26. 26. caretパッケージ (Classification And Regression ) 25 http://caret.r-forge.r-project.org/ 機械学習の予測モデル構築・評価を 予測モデルの種類によらず統一フレームワークで実行 carrot?
  27. 27. 作者はPfizerのデータ分析者 Max Kuhn氏 26 http://www.predictiveanalyticsworld.c om/boston/2012/speakers.php
  28. 28. インストールとロード 27 > install.packages(“caret”) > library(caret)
  29. 29. > library(mlbench) > data(Sonar) > dim(Sonar) [1] 208 61 > Sonar[1:5, c(1:5, 61)] V1 V2 V3 V4 V5 Class 1 0.0200 0.0371 0.0428 0.0207 0.0954 R 2 0.0453 0.0523 0.0843 0.0689 0.1183 R 3 0.0262 0.0582 0.1099 0.1083 0.0974 R 4 0.0100 0.0171 0.0623 0.0205 0.0205 R 5 0.0762 0.0666 0.0481 0.0394 0.0590 R 使用するデータ 28 本スライドではmlbenchパッケージの Sonarデータセットを使用
  30. 30. > inTrain <- createDataPartition(Sonar$Class, p=.8, list=FALSE) > Sonar.train <- Sonar[inTrain, ] > dim(Sonar.train) [1] 167 61 > Sonar.test <- Sonar[-inTrain, ] > dim(Sonar.test) [1] 41 61 使用するデータ 29 訓練データと検証データに 分割する
  31. 31. train関数 (予測モデルの構築・評価) 30 train(x, y, …) x: 説明変数 y: 目的変数
  32. 32. train関数の使用方法 31 > fit.svm <- + train(Class ~., data=Sonar.train, + method="svmRadial", + tuneGrid=expand.grid( + C=seq(0.5, 1.5, by=0.5), + sigma=c(0.01, 0.02)), + trControl=trainControl( + method="cv", number=10) + )
  33. 33. train関数の使用方法 (予測モデルの指定) 32 > fit.svm <- + train(Class ~., data=Sonar.train, + method="svmRadial", + tuneGrid=expand.grid( + C=seq(0.5, 1.5, by=0.5), + sigma=c(0.01, 0.02)), + trControl=trainControl( + method="cv", number=10) + ) 予測モデルの名称を引数methodに指定
  34. 34. train関数の使用方法 (予測モデルの指定) 33 > # modelLookup関数で予測モデルの名称を参照可能 > ml <- modelLookup() > ml[1:5, 1:5] model parameter label forReg forClass 1 ada iter #Trees FALSE TRUE 2 ada maxdepth Max Tree Depth FALSE TRUE 3 ada nu Learning Rate FALSE TRUE 4 AMORE layer1 Layer 1 Units TRUE TRUE 5 AMORE layer2 Layer 2 Units TRUE TRUE > length(unique(ml$model)) [1] 149 149個のモデルが利用可能 予測モデルの名称 利用可能なモデル数
  35. 35. train関数の使用方法 (ハイパーパラメータの探索範囲の指定) 34 > fit.svm <- + train(Class ~., data=Sonar.train, + method="svmRadial", + tuneGrid=expand.grid( + C=seq(0.5, 1.5, by=0.5), + sigma=c(0.01, 0.02)), + trControl=trainControl( + method="cv", number=10) + ) ハイパーパラメータの探索範囲を引数tuneGridに指定
  36. 36. train関数の使用方法 (リサンプリング方法の指定) 35 > fit.svm <- + train(Class ~., data=Sonar.train, + method="svmRadial", + tuneGrid=expand.grid( + C=seq(0.5, 1.5, by=0.5), + sigma=c(0.01, 0.02)), + trControl=trainControl( + method="cv", number=10) + ) リサンプリング方法・回数をtrControl引数に指定 10-foldの クロスバリデーション
  37. 37. train関数の実行結果 36 > fit.svm Support Vector Machines with Radial Basis Function Kernel 146 samples 60 predictors 2 classes: 'M', 'R' No pre-processing Resampling: Cross-Validated (10 fold) Summary of sample sizes: 131, 131, 131, 132, 132, 131, ... Resampling results across tuning parameters: C sigma Accuracy Kappa Accuracy SD Kappa SD 0.5 0.01 0.779 0.543 0.0887 0.183 0.5 0.02 0.787 0.562 0.0761 0.153 1 0.01 0.801 0.595 0.0937 0.187 1 0.02 0.849 0.693 0.0969 0.195 1.5 0.01 0.829 0.653 0.079 0.158 1.5 0.02 0.836 0.666 0.0726 0.146 Accuracy was used to select the optimal model using the largest value. The final values used for the model were sigma = 0.02 and C = 1.
  38. 38. train関数の実行結果 37 > fit.svm Support Vector Machines with Radial Basis Function Kernel 146 samples 60 predictors 2 classes: 'M', 'R' No pre-processing Resampling: Cross-Validated (10 fold) Summary of sample sizes: 131, 131, 131, 132, 132, 131, ... Resampling results across tuning parameters: C sigma Accuracy Kappa Accuracy SD Kappa SD 0.5 0.01 0.779 0.543 0.0887 0.183 0.5 0.02 0.787 0.562 0.0761 0.153 1 0.01 0.801 0.595 0.0937 0.187 1 0.02 0.849 0.693 0.0969 0.195 1.5 0.01 0.829 0.653 0.079 0.158 1.5 0.02 0.836 0.666 0.0726 0.146 Accuracy was used to select the optimal model using the largest value. The final values used for the model were sigma = 0.02 and C = 1. ハイパーパラメータの 値ごとの評価結果
  39. 39. train関数の実行結果 38 > fit.svm Support Vector Machines with Radial Basis Function Kernel 146 samples 60 predictors 2 classes: 'M', 'R' No pre-processing Resampling: Cross-Validated (10 fold) Summary of sample sizes: 131, 131, 131, 132, 132, 131, ... Resampling results across tuning parameters: C sigma Accuracy Kappa Accuracy SD Kappa SD 0.5 0.01 0.779 0.543 0.0887 0.183 0.5 0.02 0.787 0.562 0.0761 0.153 1 0.01 0.801 0.595 0.0937 0.187 1 0.02 0.849 0.693 0.0969 0.195 1.5 0.01 0.829 0.653 0.079 0.158 1.5 0.02 0.836 0.666 0.0726 0.146 Accuracy was used to select the optimal model using the largest value. The final values used for the model were sigma = 0.02 and C = 1. Accuracyが 最大のモデルを 最適モデルと判断
  40. 40. ハイパーパラメータの決定 39 > fit.svm$bestTune sigma C 4 0.02 1 > fit.svm$finalModel Support Vector Machine object of class "ksvm" SV type: C-svc (classification) parameter : cost C = 1 Gaussian Radial Basis kernel function. Hyperparameter : sigma = 0.02 Number of Support Vectors : 121 Objective Function Value : -56.594 Training error : 0 最適な ハイパーパラメータ (C=1,sigma=0.02) 最適なハイパーパラメー タを用いてデータ全体に 対して 構築したモデル
  41. 41. 4. 予測モデルの構築・評価 発展編 40
  42. 42. 発展編のトピック  評価指標の変更  属性選択  不均衡データへの対応 41
  43. 43. 評価指標の変更 (デフォルトの評価指標設定の構造理解) 42 > fit.svm Support Vector Machines with Radial Basis Function Kernel 146 samples 60 predictors 2 classes: 'M', 'R' No pre-processing Resampling: Cross-Validated (10 fold) Summary of sample sizes: 131, 131, 131, 132, 132, 131, ... Resampling results across tuning parameters: C sigma Accuracy Kappa Accuracy SD Kappa SD 0.5 0.01 0.779 0.543 0.0887 0.183 0.5 0.02 0.787 0.562 0.0761 0.153 1 0.01 0.801 0.595 0.0937 0.187 1 0.02 0.849 0.693 0.0969 0.195 1.5 0.01 0.829 0.653 0.079 0.158 1.5 0.02 0.836 0.666 0.0726 0.146 Accuracy was used to select the optimal model using the largest value. The final values used for the model were sigma = 0.02 and C = 1. デフォルトでは Accuracy, Kappaを出力 デフォルトでは Accuracy最大の モデルを選択
  44. 44. 評価指標の変更 (デフォルトの評価指標設定の構造理解) 43 > args(train.default) function (x, y, method = "rf", preProcess = NULL, ..., weights = NULL, metric = ifelse(is.factor(y), "Accuracy", "RMSE"), maximize = ifelse(metric == "RMSE", FALSE, TRUE), trControl = trainControl(), tuneGrid = NULL, tuneLength = 3) 評価指標は, 内部で呼ばれる train.default関数の 引数metricに指定 引数trControlの デフォルト値は trainControl関数の 引数のデフォルト値
  45. 45. > args(trainControl) function (method = "boot", number = ifelse(method %in% c(“cv”, "repeatedcv"), 10, 25), repeats = ifelse(method %in% c("cv", "repeatedcv"), 1, number), p = 0.75, initialWindow = NULL, horizon = 1, fixedWindow = TRUE, verboseIter = FALSE, returnData = TRUE, returnResamp = "final", savePredictions = FALSE, classProbs = FALSE, summaryFunction = defaultSummary, selectionFunction = "best", preProcOptions = list(thresh = 0.95, ICAcomp = 3, k = 5), index = NULL, indexOut = NULL, timingSamps = 0, predictionBounds = rep(FALSE, 2), seeds = NA, allowParallel = TRUE) 評価指標の変更 (デフォルトの評価指標設定の構造理解) 44 trainControl関数の 引数summaryFunctionが 評価結果をまとめる
  46. 46. 評価指標の変更 (評価指標の変更の方針) 45 Accuracyを採用 trainControl関数の引数 summaryFunction, train関数の引数metricに 評価指標を指定 Kappaを採用 特別な設定は不要 Yes train関数の 引数metric=“Kappa” No Yes No
  47. 47. 評価指標の変更 (関数twoClassSummaryを用いた評価)  caretパッケージが提供するもう一つの要約関数 twoClassSummaryを使用する.  twoClassSummaryは,予測モデルが出力するクラスの 確率に基づいて,AUC, Sensitivity, Specificityを計 算する. 46
  48. 48. 評価指標の変更 (関数twoClassSummaryを用いた評価) 47 > fit.svm.tcs <- + train(Class ~., data=Sonar.train, + method="svmRadial", + tuneGrid=expand.grid(C=seq(0.5, 1.5, by=0.5), + sigma=c(0.01, 0.02)), + trControl=trainControl(method="cv", number=10, + summaryFunction=twoClassSummary, + classProbs=TRUE), + metric="Sens")
  49. 49. 評価指標の変更 (関数twoClassSummaryを用いた評価) 48 > svmFit.tcs Support Vector Machines with Radial Basis Function Kernel 800 samples 41 predictors 2 classes: 'Bad', 'Good' No pre-processing Resampling: Cross-Validated (10 fold) Summary of sample sizes: 720, 720, 720, 720, 720, 720, ... Resampling results across tuning parameters: C ROC Sens Spec ROC SD Sens SD Spec SD 0.25 0.785 0.512 0.845 0.0591 0.0857 0.0484 0.5 0.786 0.496 0.864 0.0584 0.0888 0.0492 1 0.787 0.458 0.886 0.0618 0.106 0.0423 Tuning parameter 'sigma' was held constant at a value of 0.01399623 Sens was used to select the optimal model using the largest value. The final values used for the model were sigma = 0.014 and C = 0.25. 評価指標が ROC(AUC), Sensitivity, Specityになった! モデルの選択に 使用する評価指標 がSensitivityに なった!
  50. 50. 評価指標の変更 (独自の評価関数の作成)  Precision, Recall, Accuracyを算出できるように,自 作の評価関数を用意する. 49 > my.summary <- function (data, lev = NULL, model = NULL) + { + if (is.character(data$obs)) + data$obs <- factor(data$obs, levels = lev) + conf.mat <- table(data$pred, data$obs) # 分割表 + prec <- conf.mat[1,1]/sum(conf.mat[1, ]) # Precision + rec <- conf.mat[1,1]/sum(conf.mat[, 1]) # Recall + acc <- sum(diag(conf.mat))/sum(conf.mat) # Accuracy + res <- c(`Precision`=prec, `Recall`=rec, + `F-Value`=2*prec*rec/(prec+rec), `Accuracy`=acc) + res + }
  51. 51. 評価指標の変更 (独自の評価関数の作成) 50 > fit.svm.my.sm <- + train(Class ~., data=Sonar.train, + method="svmRadial", + tuneGrid=expand.grid(C=seq(0.5, 1.5, by=0.5), + sigma=c(0.01, 0.02)), + trControl=trainControl(method="cv", + number=10, summaryFunction=my.summary), + metric="Precision") trainControl関数の引 数summaryFunction に自作の要約関数を指 定 最適なモデルを選択する 指標をPrecisionに設定
  52. 52. 評価指標の変更 (独自の評価関数の作成) 51 > fit.svm.my.sm Support Vector Machines with Radial Basis Function Kernel 146 samples 60 predictors 2 classes: 'M', 'R' No pre-processing Resampling: Cross-Validated (10 fold) Summary of sample sizes: 131, 132, 131, 131, 131, 131, ... Resampling results across tuning parameters: C sigma Precision Recall F.Value Accuracy Precision SD 0.5 0.01 0.759 0.925 0.825 0.79 0.0958 0.5 0.02 0.736 0.95 0.826 0.783 0.0785 1 0.01 0.807 0.912 0.849 0.825 0.111 1 0.02 0.818 0.938 0.869 0.844 0.106 1.5 0.01 0.827 0.912 0.861 0.838 0.118 1.5 0.02 0.834 0.912 0.867 0.845 0.124 Recall SD F.Value SD Accuracy SD 0.121 0.0749 0.0942 0.0645 0.0558 0.0788 0.119 0.089 0.104 0.0659 0.0698 0.0939 0.103 0.0854 0.105 0.0844 0.091 0.114 Precision was used to select the optimal model using the largest value. The final values used for the model were sigma = 0.02 and C = 1.5. 評価指標が Precision, Recall, F値, Accuracyになっ た! モデルの選択に 使用する評価指標 がPrecisionになっ た!
  53. 53. 属性選択 (feature selection)  予測モデルが過学習(overfitting)しないように,属性を 選択する.  属性選択については,前回のTokyo.Rの@srctadaさん の発表が詳しい. 52
  54. 54. 属性選択 (feature selection)  caretは,recursive feature eliminationというラッ パー法のアルゴリズムを用意している.  日本語訳は「再帰的属性削減」? 53
  55. 55. 属性選択 (feature selection) 54 rfe(x, y, …) x: 説明変数 y: 目的変数
  56. 56. 属性選択 (feature selection) 55 > rfectrl <- rfeControl(method=“cv“, + verbose=TRUE, + returnResamp="final") > trctrl <- trainControl(method="cv", + number=10) > fit.svm.rfe <- rfe(x, y, method="svmRadial", + metric="Precision", + sizes=c(30, 50), + rfeControl=ctrl, + trControl=trctrl)
  57. 57. 属性選択 (feature selection) 56 > fit.svm.rfe Recursive feature selection Outer resampling method: Cross-Validated (10 fold) Resampling performance over subset size: Variables Precision Recall F-Value Accuracy PrecisionSD RecallSD 30 0.7397 0.8446 0.7758 0.7407 0.1314 0.1520 50 0.7797 0.9089 0.8309 0.8027 0.1093 0.1244 60 0.7833 0.9071 0.8284 0.8017 0.1195 0.1458 F-ValueSD AccuracySD Selected 0.09202 0.1104 0.07347 0.0887 0.08789 0.1010 * The top 5 variables (out of 60): V11, V12, V10, V49, V9 属性数30, 50, 60のときの 評価指標
  58. 58. 属性選択 (feature selection) 57 > fit.svm.rfe$optVariables [1] "V11" "V12" "V10" "V49" "V9" "V13" "V47" "V48" "V36" "V21" "V44" [12] "V45" "V46" "V35" "V52" "V4" "V37" "V20" "V51" "V22" "V1" "V5" [23] "V43" "V31" "V6" "V8" "V34" "V14" "V33" "V23" "V2" "V50" "V3" [34] "V42" "V32" "V19" "V58" "V7" "V28" "V53" "V27" "V59" "V15" "V38" [45] "V24" "V54" "V39" "V26" "V55" "V56" "V30" "V17" "V29" "V40" "V41" [56] "V18" "V16" "V57" "V25" "V60" 評価指標がPrecision, Recall, F値, Accuracyに なった!
  59. 59. 不均衡データへの対応  クラス分類問題で扱うデータは,往々にしてクラスのサンプ ル数に偏りがある.  このような不均衡データに対して予測モデルを構築すると, 負例の特徴を学習し,負例と予測するモデルになりやすい.  不均衡データへの代表的な対応方法は,  コスト考慮型学習  サンプリング(正例のアップサンプリング/負例のダウンサンプリング/ ハイブリッド) 58
  60. 60. 不均衡データへの対応 SVMのコスト考慮型学習,ハイブリッドのサンプリングの代 表的な手法であるSMOTEについては,以下のスライドを 参照. 59 @sfchaos, 不均衡データのクラス分類, 第20回Tokyo.R
  61. 61. 4. まとめ 60
  62. 62.  機械学習を用いて予測モデル構築・評価するにはcaret パッケージが便利!! 61
  63. 63. 参考文献  Max Kuhn and Kjell Johnson, Applied predictive modeling, Springer, 2012. 62
  64. 64. 参考文献  @dichika, caretパッケージ紹介 63 http://www.slideshare.net/dichika/tokyo- r11caret

×