Your SlideShare is downloading. ×
アンサンブル学習
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

アンサンブル学習

16,076
views

Published on

第21回R勉強会@東京(#TokyoR)の発表資料.

第21回R勉強会@東京(#TokyoR)の発表資料.

Published in: Technology

0 Comments
27 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
16,076
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
219
Comments
0
Likes
27
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Transcript

    • 1. アンサンブル学習2012.03.10 Tokyo.R #21 by @holidayworking 1
    • 2. アジェンダ• 自己紹介• アンサンブル学習• アンサンブル学習アルゴリズム • バギング • ブースティング • ランダムフォレスト• R での実行方法 2
    • 3. 自己紹介• Hidekazu Tanaka• システムエンジニア• 好きなもの • T-SQUARE • F1
    • 4. アンサンブル学習とは 4
    • 5. アンサンブル学習とは• 学習器の性能は汎化能力(未学習データに対する予測能力)で評価• 汎化能力を向上させるためには • 単一の学習器の性能を向上させる方法 • 個々に学習した複数の学習器を何らかの形で融合させて汎化能力を 向上させる方法 5
    • 6. アンサンブル学習とは• 学習器の性能は汎化能力(未学習データに対する予測能力)で評価• 汎化能力を向上させるためには • 単一の学習器の性能を向上させる方法 • 個々に学習した複数の学習器を何らかの形で融合させて汎化性能を 向上させる方法 6
    • 7. アンサンブル学習の分類• アンサンブルする学習器の複雑さという基準で (i)複雑な学習器を独立に学習し、それらをアンサンブルする形態 (ii)単純な学習器を逐次的に学習し、それらをアンサンブルする形態•アンサンブル学習器の種類という観点では (a)同じ学習器で学習した結果をアンサンブルする形態 (b)異なる学習器で学習した結果をアンサンブルする形態•今回紹介するアンサンブル学習アルゴリズムは •バギング、ランダムフォレストは(i)(a) •ブースティングは(ii)(a) 7
    • 8. なぜ,アンサンブル学習は有効か?• アンサンブルの方法として,単純に弱学習器の多数決とする.• 2値判別問題では, (m + 1)/2 個以上の弱学習器が誤判定を起こすと,多数決によりアンサンブルの判定は誤りとなる.• 各弱学習器が統計的に独立とし,かつ弱学習器の誤り確率を一律✓ とすると,m 個の弱学習器の内,k 個の分類器の判定が誤る確率は P (k) =m Ck ✓k (1 ✓)m k 8
    • 9. なぜ,アンサンブル学習は有効か? 0.2 m = 21, ✓ = 0.3 0.18 0.16 0.14 0.12P(k) 0.1 0.08 0.06 0.04 0.02 0 0 5 10 15 20 9 k
    • 10. なぜ,アンサンブル学習は有効か? 0.2 m = 21, ✓ = 0.3 0.18 0.16 0.14 0.12P(k) 0.1 0.08 0.06 0.04 0.02 0 0 5 10 15 20 9 k
    • 11. なぜ,アンサンブル学習は有効か? 0.2 m = 21, ✓ = 0.3 0.18 0.16 0.14 極めて直感的な説明であることに注意 0.12 詳細な解析はされていないらしいP(k) 0.1 0.08 0.06 0.04 0.02 0 0 5 10 15 20 9 k
    • 12. 代表的なアンサンブル学習アルゴリズム• バギング• ブースティング• ランダムフォレスト 10
    • 13. バギング 11
    • 14. バギングとは•1996年 Breiman によって提案•ブートストラップ法により弱学習器を構築し、それから最終的な学習器を構築する方法 学習サンプル 復元抽出サンプル 復元抽出サンプル 復元抽出サンプル 弱学習器 弱学習器 弱学習器 学習器 12
    • 15. バギングのアルゴリズム1.以下の手順を B 回繰り返す. a.データからm 回復元抽出して、新しいデータを作る. b.弱学習器 h を構築する.2. B 個の弱学習器 h を用いて最終的な学習器を構築する. •判別問題の場合: H(x) = argmax|{i|hi = y}| B X •回帰問題の場合: H(x) = 1 hi B i=1 13
    • 16. ブースティング 14
    • 17. ブースティングとは• ブースティングとは逐次的に弱学習器を構築するアンサンブル学習アルゴリズム• ブースティングのルーツは、機械学習方式を解析する理論的な枠組である「確率的近似学習(PAC learning)」• 最初にブースティングの問題を提案したのは Kearns と Valiant• 1989年 Schapire によって理論的に保証されたアルゴリズム• 1990年 Freund によって効率的である意味最適なアルゴリズム• 1995年 Freund と Schapire が AdaBoost を考案 • 初期のアルゴリズムの問題を改良• 以降、様々なブースティングアルゴリズムが提案 15
    • 18. AdaBoost のアルゴリズム入力 (x1 , u1 ), . . . , (xm , ym ) where xi 2 X, yi 2 Y = { 1, +1}初期化 重みの初期値を      とする. D1 (i) = 1/m繰り返し t = 1, . . . , T として,以下の手順を繰り返す. 1.確率分布 Dt に従う弱学習器 ht : X ! { 1, +1} を構築する. 2.弱学習器 ht の誤り率 ✏t を計算する. X ✏t = Prx⇠Dt [ft (xi ) 6= yi ] = Dt (i) i:ht (xi )6=yi 3.弱学習器 ht の重要度 ↵t を計算 1 1 ✏t ↵t = log( ) 4.重みを更新する. ⇢ 2 ✏t Dt (i) e ↵t if ht (xi ) = yi Dt+1 (i) = ⇥ Zt e ↵t if ht (xi ) 6= yi Dt (i)exp( ↵t yi ht (xi )) = Zt! XT出力 H(x) = sign ↵t ht (x) 16 t=1
    • 19. 様々なブースティングアルゴリズム• 多値判別問題に対応したアルゴリズム • AdaBoost.M1 • AdaBoost.M2• MadaBoost : フィルタリングに適したアルゴリズム• U-Boost : 同時確率分布を推定するためのアルゴリズム 17
    • 20. ブースティングを勉強したい人へ• ブースティング―学習アルゴリズ ムの設計技法• 著者 • 金森敬文 • 畑埜晃平 • 渡辺治• 値段 • 3,990円 18
    • 21. ランダムフォレスト 19
    • 22. ランダムフォレストとは• 2001年 Breiman によって提案• 決定木を弱学習器とするアンサンブル学習アルゴリズム 学習サンプル 復元抽出サンプル 復元抽出サンプル 復元抽出サンプル 決定木 決定木 決定木 学習器 20
    • 23. ランダムフォレストのアルゴリズム1.以下の手順を B 回繰り返す. a.訓練データからブートストラップサンプルを作成する. b.ブートストラップサンプルから決定木 Tiを構築する.このとき, 指定したノード数 nmin になるまで,以下の手順を繰り返す. i. p 個の説明変数から m 個の変数をランダムに選択する. ii. m 個の説明変数から最も良い変数を分岐ノードとする.2. B 個の決定木 Ti を用いて最終的な学習器を構築する •判別問題の場合は多数決 •回帰問題の場合は平均 21
    • 24. アルゴリズムの補足• パラメータ nmin と m をどう決めれば良いのか? p • 判別問題の場合: nmin = 1, m = p • 回帰問題に場合: nmin = 5, m = p/3• バギングとランダムフォレストの違いは? • バギングでは説明変数を全て使う • ランダムフォレストでは説明変数をランダムサンプリングして使う 22
    • 25. ランダムフォレストの特徴• 精度が高い• 説明変数が数百,数千でも効率的に動作• 目的変数に対する説明変数の重要度を推定• 事例の近似度を求めることができる• 外れ値の特定をすることができる• 欠損値の推定• 欠損値を持つデータでも有効に動作• 個体数がアンバランスでもエラーバランスが保たれる 23
    • 26. OOB データとは?• Out-Of-Bag の略• ブートストラップサンプルから約3分の1を取り除いたデータのこと • 残りのデータで決定木を構築する• 決定木を構築した後に OOB データでテストを行う.その誤判定率を OOB 推定値と呼ぶ. 24
    • 27. 説明変数の重要度の推定方法構築した決定木と OOB データを使うことで説明変数の重要度を推定することできる. XT 1 Im = (At BT ) T t=1T : 決定木の個数A : OOB データを決定木に適用した時の正答数B : ランダムに変数 m を並び替えた OOB データを決定木に 適用した時の正答数 25
    • 28. DNAデータにおける説明変数の重要度 0.6 0.55 0.5Variable Importance 0.45 0.4 0.35 0.3 0.25 0.2 0.15 0.1 0.05 0 20 40 60 80 100 120 140 160 180 Variable 26
    • 29. DNAデータにおける説明変数の重要度 0.6 0.55 0.5Variable Importance 0.45 0.4 0.35 0.3 0.25 0.2 0.15 0.1 0.05 0 20 40 60 80 100 120 140 160 180 Variable 26
    • 30. 事例の近似度の計算方法1.各決定木ごとに以下の手順を繰り返す. a.決定木に訓練データと OOB データを適用する. b.事例 xn と xk が同じ終端ノードに存在した場合を,近似度      )   prox(xn , xk を1増加させる.2.最終的な結果は prox(xn , xk ) を決定木の個数で割って正規化したもの とする. 27
    • 31. 外れ値の特定方法1.クラス j に属する事例 n と残りの事例の近似度の平均値を求める. X ¯ P (n) = prox2 (n, k) ↵(k)=j2. out(n) を以下のように定義する. ¯ out(n) = N/P (n)3.各クラスにおける out(n) の中央値と絶対偏差を計算する.4.最終的な結果は out(n) から中央値を引き,絶対偏差で割ったものと する. 28
    • 32. iris データにおける外れ値 60 50 40outlyingness 30 20 10 0 29 0 50 100 150
    • 33. R での実行方法 30
    • 34. パッケージ• バギング • adabag • ipred• ブースティング • ada • adabag• ランダムフォレスト • randomForest 31
    • 35. adabag パッケージ• バギングとブースティングが実装されているパッケージ • Breimans Bagging • Freund and Schapires Adaboost.M1 • AdaBoost-SAMME• 弱学習器として決定木(rpart パッケージ)が使われる• 関数 • bagging • boosting 32
    • 36. bagging 関数使い方 bagging(formula, data, mfinal = 100, control)引数 mfinal 弱学習器の個数 control rpart.control 関数 33
    • 37. bagging 関数の実行例> set.seed(50)> tr.num <- sample(4601, 2500)> spam.train <- spam[tr.num,]> spam.test <- spam[-tr.num,]> spam.ba <- bagging(type~., data=spam.train)> spam.bap <- predict(spam.ba, spam.test)> spam.bap$confusion Observed ClassPredicted Class nonspam spam nonspam 1208 124 spam 74 695> spam.bap$error[1] 0.09424084 34
    • 38. boosting 関数使い方 boosting(formula, data, boos = TRUE, mfinal = 100, coeflearn = Breiman, control)引数 mfinal 弱学習器の個数 重要度 ↵t の計算方法 coeflearn   Breiman : ↵t = 1/2log((1 ✏t )/✏t )   Freund : ↵t = log((1 ✏t )/✏t ) control rpart.control 関数 35
    • 39. boosting 関数の実行例> spam.ad <- boosting(type~., data=spam.train)> spam.adp <- predict(spam.ad, newdata=spam.test)> spam.adp$confusion Observed ClassPredicted Class nonspam spam nonspam 1232 46 spam 50 773> spam.adp$error[1] 0.04569253 36
    • 40. randomForest パッケージ使い方 randomForest(formula, data=NULL, ..., subset, na.action=na.fail)引数 ntree 弱学習器の個数 mtry 分岐に用いる説明変数の個数 importance 説明変数の重要度を計算するか? proximity 個体の近似度を計算するか? 37
    • 41. randomForest の実行例> spam.rf <- randomForest(type~., data=spam.train, na.action="na.omit")> spam.rfp<-predict(spam.rf, spam.test[,-58])> (spam.rft<-table(spam.test[,58], spam.rfp)) spam.rfp nonspam spam nonspam 1240 42 spam 75 744> sum(diag(spam.rft))/sum(spam.rft)[1] 0.9443122 38
    • 42. 決定木の個数と誤判別率の関係> plot(spam.rf) spam.rf nonspam 0.10 0.08 Error oob 0.06 spam 0.04 0 100 200 300 400 500 39 trees
    • 43. 説明変数の重要度 spam.rf > varImpPlot(spam.rf)charExclamation charExclamationremove charDollarcapitalAve removehp freecharDollar capitalAvefree capitalLongcapitalLong youredu hpcapitalTotal moneyour capitalTotalgeorge ouryour younum1999 num000money georgere hplyou eduhpl num1999charRoundbracket charRoundbracketmeeting businessnum000 allbusiness internetwill willnum650 reinternet emailfont overpm receivetechnology mailnum85 creditreceive addresscredit num650 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0 50 100 150 MeanDecreaseAccuracy MeanDecreaseGini 40
    • 44. アルゴリズムの比較• アンサンブル学習アルゴリズムの比較をしたい • バギング • ブースティング • ランダムフォレスト 41
    • 45. アルゴリズムの比較• アンサンブル学習アルゴリズムの比較をしたい caretパッケージを使う! • バギング • ブースティング • ランダムフォレスト 41
    • 46. caret パッケージとは?• classification and regression training の略• 100以上の機械学習アルゴリズムを一つのスキームで評価することできる• 詳細は第11回R勉強会@東京(Tokyo.R#11)の @dichika さんの発表資料を参照 42
    • 47. モデルの作成と評価> rpartFit <- train(trainDescr, trainMDRR, method="rpart", preProcess=c("center", "scale"), trControl=fitControl)> bagFit <- train(trainDescr, trainMDRR, method="treebag" preProcess=c("center", "scale"), trControl=fitControl)> adaFit <- train(trainDescr, trainMDRR, method="ada" preProcess=c("center", "scale"), trControl=fitControl)> rfFit <- train(trainDescr, trainMDRR, method="rf" preProcess=c("center", "scale"), trControl=fitControl)> allPred <- extractPrediction(list(rpartFit, bagFit, adaFit, rfFit), testX=testDescr, testY=testMDRR)> testPred <- subset(allPred, dataType=="Test")> tp_rpart <- subset(testPred, model=="rpart")> tp_bag <- subset(testPred, model=="treebag")> tp_rf <- subset(testPred, model=="rf") https://gist.github.com/2006235 43
    • 48. モデルの比較①> confusionMatrix(tp_rpar$pred, tp_rpa$obs) > confusionMatrix(tp_bag$pred, tp_bag$obs)Confusion Matrix and Statistics Confusion Matrix and Statistics Reference ReferencePrediction Active Inactive Prediction Active Inactive Active 132 51 Active 129 32 Inactive 17 64 Inactive 20 83 Accuracy : 0.7424 Accuracy : 0.803 95% CI : (0.6852, 0.7941) 95% CI : (0.7499, 0.8493) No Information Rate : 0.5644 No Information Rate : 0.5644 P-Value [Acc > NIR] : 1.514e-09 P-Value [Acc > NIR] : 2.566e-16 Kappa : 0.4579 Kappa : 0.5946 Mcnemars Test P-Value : 6.285e-05 Mcnemars Test P-Value : 0.1272 Sensitivity : 0.8859 Sensitivity : 0.8658 Specificity : 0.5565 Specificity : 0.7217 Pos Pred Value : 0.7213 Pos Pred Value : 0.8012 Neg Pred Value : 0.7901 Neg Pred Value : 0.8058 Prevalence : 0.5644 Prevalence : 0.5644 Detection Rate : 0.5000 Detection Rate : 0.4886 Detection Prevalence : 0.6932 Detection Prevalence : 0.6098 Positive Class : Active Positive Class : Active 44
    • 49. モデルの比較②> confusionMatrix(tp_ada$pred, tp_ada$obs) > confusionMatrix(tp_rf$pred, tp_rf$obs)Confusion Matrix and Statistics Confusion Matrix and Statistics Reference ReferencePrediction Active Inactive Prediction Active Inactive Active 133 33 Active 133 31 Inactive 16 82 Inactive 16 84 Accuracy : 0.8144 Accuracy : 0.822 95% CI : (0.7622, 0.8594) 95% CI : (0.7704, 0.8662) No Information Rate : 0.5644 No Information Rate : 0.5644 P-Value [Acc > NIR] : < 2e-16 P-Value [Acc > NIR] : < 2e-16 Kappa : 0.6161 Kappa : 0.6325 Mcnemars Test P-Value : 0.02227 Mcnemars Test P-Value : 0.04114 Sensitivity : 0.8926 Sensitivity : 0.8926 Specificity : 0.7130 Specificity : 0.7304 Pos Pred Value : 0.8012 Pos Pred Value : 0.8110 Neg Pred Value : 0.8367 Neg Pred Value : 0.8400 Prevalence : 0.5644 Prevalence : 0.5644 Detection Rate : 0.5038 Detection Rate : 0.5038 Detection Prevalence : 0.6288 Detection Prevalence : 0.6212 Positive Class : Active Positive Class : Active 45
    • 50. 考察精度の比較 決定木 Bagging Boosting RF 0.7424 0.803 0.8144 0.822 46
    • 51. 考察精度の比較 決定木 Bagging Boosting RF 0.7424 0.803 0.8144 0.822 ランダムフォレストが高い! 46
    • 52. まとめ• アンサンブル学習• アンサンブル学習アルゴリズム • バギング • ブースティング • ランダムフォレスト• Rにおける実行方法 • adabag • randomForest 47
    • 53. 参考文献• 上田修功. アンサンブル学習の新展開. 電子情報通信学会技術研究報告. PRMU, パターン認識・ メディア理解, Vol. 102, No. 379, pp. 31‒36, 2002.• Y. Freund, R.E. Schapire, 阿部直樹. ブースティング入門. 人工知能学会誌, Vol. 14, pp. 771‒780, 1999.• Random forests - classification description• T. Hastie, R. Tibshirani, J. Friedman. The Elements of Statistical Learning --- Data Mining, Inference, and Prediction Second Edition. Springer, 2009.• 金森 敬文, 竹之内 高志, 村田 昇. パターン認識. Rで学ぶデータサイエンス (Vol. 5). 共立出版, 2009. 48
    • 54. ご清聴有難う御座いました 49

    ×