Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Rで機械学習の実践ガイド #0.5/Practical Guide For Machine Learning with R #0.5

Rで機械学習の実践ガイド #0.5/Practical Guide For Machine Learning with R #0.5

ハイパーリンク等があるためなるべくpdfをダウンロードしてご覧ください
https://tokyor.connpass.com/event/176318/

S-Katagiri

May 23, 2020
Tweet

More Decks by S-Katagiri

Other Decks in Programming

Transcript

  1. 自己紹介 • 業界 3 年目の新米機械学習エンジニアです • @ill_identified, 個人ブログ • 主語の大きな話が好き

    •『計量経済学と機械学習の関係』(Tokyo.R #80) •『経済学と反事実分析』(Tokyo.R #83) • R の発表で R の話をしてないのになぜか出禁にならない •『計量経済学と機械学習の関係』(Tokyo.R #80) •『経済学と反事実分析』(Tokyo.R #83) 4
  2. 「データ分析」はどういう流れでやるべきか •「データ分析のデザインパターン」は昔からあるテーマ [1] • KDD, SEMMA, CRISP-DM など • それぞれ違う表現で同じことを言ってるように思える…

    •「何度も試行錯誤する」というコンセンサスができている? • PDCA とか OODA みたいな 図 1: 異口同音のポンチ絵 (左から順に [6, 16]) • でも具体的に何をやればいいの? 8
  3. まず機械学習を勉強しよう • 理論/実践のバランスが良い大本命 [9] とタイトル詐欺 [17] • チュートリアル的な構成かつ R を使ったもの

    • 無料のものも多い [16](邦訳有料)[7](カンパ方式) など • だれか [4, 11, 14] の翻訳出して • Python 向けの本もある [8] • 限定的なトピックの良書は他にも多数あり 9
  4. 何が足りないか • カステラ本 [9] の弱点 • ちょっと古い • 既存ライブラリの使い方とかは書いてない •

    ちょっと難しすぎる? • 翻訳版が高い (が買う価値はある) (個人の感想です) • [17] の弱点 • 初心者向けと見せかけて大リーグ養成ギブス的な何か • アルゴリズムの詳しい説明が中心 • 無料系 [7, 4, 11, 14] の弱点 • 初歩的な話だけ/予測モデルの話がなかったり • アルゴリズムの紹介だけで終わっていたり • 書きかけだったり 10
  5. 今回扱う範囲と扱わない範囲 • 用途を絞って機械学習プラットフォームを考える • 予測モデルとしての機械学習のモデルのあてはめ • データ分析データサイエンス人工知能の一部分 • 以下は範囲外 •『三国志で学ぶデータ分析』

    • 予測モデルを作る話ではない • システムアーキテクチャ, ハードウェア • 重要 [10] だが R から外れてしまう • 機械学習の理論 - なぜやるのか/やってはいけないか • ⻑くなりすぎるので次回 • (複数回に分けて後でまとめてどっかで公開する予定) 13
  6. (再掲)「データ分析」はどういう流れでやるべきか •「データ分析のデザインパターン」は昔からあるテーマ [1] • KDD, SEMMA, CRISP-DM など • それぞれ違う表現で同じことを言ってるように思える…

    •「何度も試行錯誤する」というコンセンサスができている? • PDCA とか OODA みたいな 図 2: 異口同音のポンチ絵 (左から順に [6, 16]) • また主語の大きい話しやがって 14
  7. プラットフォームを求める理由 線形回帰/一般化線形回帰 (GLM) data(iris) lm(Sepal.Length ~ ., data = df)

    glm(Species ~ ., data = df, family=gaussian()) L1/L2 正則化 require(glmnet) equation <- Sepal.Length ~ . y <- model.response(equation, iris) X <- model.matrix(equation, iris) glmnet(X, y, ...) XGBoost 15
  8. バラバラの構文を覚えられない • モデル/アルゴリズムによって構文が全く違う • この辺はマシな部類 • 入力 (データフレーム) 出力 (予測値)

    の形式は同じなのに • 何度も作り直すこと前提の機械学習でこれはめんどくさい • 過去の提案『glmnet を glm みたいに使う』 • 忘れてください, もっといいものがあります 16
  9. どんなプラットフォームがいいのか • caret, mlr, scikit-learn 開発者の API デザイン論 [12, 15,

    5] • いずれも不揃いなインターフェースを問題視 • Scikit-learn の場合: • インターフェースの「一貫性」 「部品化」などが重要 •「前処理」 「学習」等のブロックを組み合わせたフローで表現 INPUT モデル 標準化 OUTPUT INPUT 特徴量選択 モデル 前処理1 前処理2 OUTPUT • 参考: 『Python でのデータ分析作業をスマートにするために』 17
  10. 主なパッケージ • caret • mlr(mlr3) • tidymodels • 汎用的な「プラットフォーム」と呼べるのはこの 3

    つ • パッケージというよりプロジェクト? • これ以外は機能が限定的 18
  11. caret と mlr • mlr のデザインを気に入ったので今回は mlr を解説 • ただし互いに設計思想似ている

    • インターフェースのみの提供 • 画一的な構文で lm(), glmnet(), xgboost() を呼び出し可 • mlr は 160 種類のアルゴリズムをサポート • 自分で新たに定義することも可 • 使う時に参考になる: • mlr の公式ドキュメントと nozma 氏によるダイジェスト •『モデルを跨いでデータを見たい』(Tokyo.R #76) でも言及 • caret の公式ドキュメント 19
  12. mlr の特徴 • 機械学習の作業フローを以下 5 種類の役割に厳密に分類 • caret はここまで徹底していない •

    オプションの豊富さも mlr が上回る [2] 1. task : どのデータや変数を使うか 2. learner: どのモデルやアルゴリズムを使うか • mlr ではモデルの定義を learner, 学習結果を model と呼ぶ 3. resampler : 訓練‧検証データをどう分けるか • e.g., ホールドアウトか交差検証か 4. tuner: ハイパーパラメータの調整 5. performence: モデルをどう評価するか 20
  13. mlr の最も単純な使用例 data("BostonHousing", package="mlbench") task <- makeRegrTask( data = BostonHousing,

    target = "medv") learner1 <- makeLearner( "regr.glmnet", alpha = 1) model1 <- train(learner1, task) prediction <- predict(model1, task) performance(prediction) 1. 回帰タスク定義 2. glmnet(L2) を定義 3. 学習 4. 予測結果出力 5. 当てはまり確認 (デフォルトは MSE) mse 21.90246 21
  14. 少し複雑な例: 前処理のラッピング • mlrCPO パッケージを使う例 • 特徴量の標準化 • 目的変数の対数変換 (対数線形モデル)

    • %>% ではなく %>>% であることに注意 learner2 <- cpoScale(center=T, scale=T) %>>% cpoLogTrafoRegr() %>>% makeLearner("regr.glmnet", alpha = 0) model2 <- train(learner2, task) performance(predict(model2, task)) 22
  15. より複雑な例: resampler と tuner • tuner と resampler を挿入 •

    正則化パラメータを自動調整したい • k-fold 交差検証とランダムサーチで探索 num_ps <- makeParamSet( makeNumericParam("lambda", lower = 0, upper = .3)) ctrl <- makeTuneControlRandom(maxit = 10) rdesc <- makeResampleDesc("CV", iters = 3) tuner <- tuneParams(learner, task = task, resampling = rdesc, par.set = num_ps, control = ctrl) learner2 <- makeLearner("regr.glmnet", alpha = 1, par.vals = tuner$x) 23
  16. さらに複雑な例: 複数モデルの比較 • これまでの各モデルの性能を比較 • 学習器ごとに異なる id が必要 learner1 <-

    setLearnerId(learner1, "m1") learner2 <- setLearnerId(learner2, "m2") learner3 <- setLearnerId(learner3, "m3") comparison <- benchmark( list(learner1, learner2, learner3), task) print(comparison) 24
  17. その他の機能 • 学習曲線や分類平面の視覚化機能あり • パラメータをベイズ最適化で決めたい • mlrMBOパッケージが有効 [3] • mlr

    組み込みと上記を統合したmlrHyperoptも • 前処理の機能がショボい • mlrCPOパッケージで改善 • 学習曲線や残差診断のグラフ作成機能も充実 • nozma 氏の資料で大まかに分かるはず • 便利でしょ? • 使いたくなりましたよね? 25
  18. mlr3 に注目せよ! • mlr は 2019 年からメンテナンスモードに移行 • 最近の技術と相性が悪い箇所を改良 [13]

    • data.table など外部パッケージとの連携 • パイプライン機能の拡張 • よりオブジェクト指向な構文に mlr3 mlr3 mlr3verse tasks, learners, train-test-eval, resample, benchmark Visualization Data Formats Utilities ML Tasks ML Pipelines Learners Feature Selection Tuning mlr3 Popular learners, ranger, xgboost, glmnet, svm, ... learners Many more learners, organized as Github extension packages github.com/mlr3learners mlr3 Connecting Keras to mlr3 keras mlr3 Feature Filtering filters mlr3 Wrapper Feature Selection fswrap mlr3 Hyperparameter Tuning tuning mlr3 Hyperparameter Tuning hyperband Bayesian Optimization mbo Parameter Sets paradox Time-Series & Functional Data time Probabilistic Learning & Survival Analysis proba Spatial learners & resampling spatiotemporal Time-series forecasting & resampling forecast Clustering cluster Learning with Ordinal Targets ordinal Performance Measures measures Devel Helper Functions misc DBs as Data Backends db mlr3 Visualization viz Preprocessing, pipelines & ensembles pipelines mlr3 Stable Maturing Experimental Planned mlr3 mlr3 mlr3 mlr3 mlr3 mlr3 mlr3 mlr3 mlr3 図 3: tidyverse めいたパッケージ群 ([13] より) 27
  19. mlr3 の簡単な使用例 • さっきの mlr と同じことを mlr3 でやる • 一旦

    R を再起動 (mlr と競合?) • mlr と違い学習器の定義は個別に読み込む • とりあえず mlr3learners でよく使うやつを読み込む • learner <- lrn("regr.glmnet", alpha = 1) でも良い require(mlr3) require(mlr3learners) data("BostonHousing", package="mlbench") task <- TaskRegr$new( id = "t1", backend = BostonHousing, target = "medv") learner <- mlr_learners$get("regr.glmnet") learner$param_set$values <- list(alpha = 1) learner$train(task) 28
  20. エラーの原因 エラー: <TaskRegr:t1> has the following unsupported feature types: factor

    > p r i n t ( task ) <TaskRegr : t1 > (506 x 14) * Target : medv * Properties : − * Features ( 1 3 ) : − dbl ( 1 2 ) : age , b , crim , dis , indus , l s t a t , nox , − f c t ( 1 ) : chas • よく見ると factor 型変数が入っている • 暗黙の型変換をしなくなった 29
  21. mlr3pipelines の書き方 • 前処理の定義 • po(): mlr3pipelines で定義された変換器の呼び出し • 部品の接続

    • %>>%/$add_pipeop(): 直列つなぎ • gunion(): 並列つなぎ • 定義した学習器のグラフ表示 • $plot() learner <- po("scale") %>>% po("encode") %>>% lrn("regr.glmnet", alpha = 1) learner$train(task) pred <- learner$predict(task) pred$regr.glmnet.output$score() 31
  22. mlr と比べた mlr3 の所感 • より適用範囲を広げている • オブジェクト指向な構文を徹底 • オブジェクト指向といいつつ日和ってない?

    • パッケージ細かく分けすぎ? • mlr3learner: 学習器の定義 • mlr3pipelines: パイプライン • paradox / mlr3tuning: パラメータ調整 • mlr3viz: グラフ作成 • 面倒くさいなら mlr3verse でまとめて読み込み • 一部まだ開発中 • 教師なし学習 • 生存時間分析 • 時系列データ向けの機能 33
  23. tidymodels とは • 一連のプロジェクト • 広義の tidyverse? • 役に立つ資料: 全貌をまとめた日本語の資料はない

    •『tidymodels によるモデル構築と運用』 • 俯瞰するなら一番良い • 個別の解説はdropou009 氏のブログも参考なりそう • コアパッケージはだいたい mlr の task, learner, resampler, tuner, performance に対応 図 4: mlr に対応するパッケージ群 34
  24. mlr3 vs tidymodels mlr3(mlr) tidyomodels (+ verse) ⻑所 役割分担が厳格 前処理が柔軟

    サポート学習器豊富 (mlr) tidyverse の延⻑で書ける (個 別の部品だけ使うことも可) 開発が活発 短所 前処理の自由度低い サブプロジェクト多すぎ 情報が少ない %>% 使いすぎ (個人の感想で す) モデル名を覚えづらい 対応してる機械学習モデル少 • mlr3 は機械学習特化 (当てはまりの良いモデル追求) • tidymodels は多種多様な分析を想定? 35
  25. #0.5 機械学習プラットフォームでわかったこと • caret: 今は古くなっている • mlr: ドキュメントもある程度充実して使いやすい • mlr3:

    面白いがまだ開発途上 • tidymodels: 人気の tidyverse と同じノリで書ける •「徹底比較」するには時間が足りなかった • やっぱり風呂敷広げすぎ畳めてないじゃん 次の #2 で分かること, それはまだ混沌の中…… それが…機械学習…! 36
  26. [1] Azevedo, Ana and Manuel Filipe dos Santos (2008) “KDD,

    SEMMA and CRISP-DM: A Parallel Overview,” in IADIS European Conf. Data Mining. [2] Bischl, Bernd, Michel Lang, Lars Kotthoff, Julia Schiffner, Jakob Richter, Erich Studerus, Giuseppe Casalicchio, and Zachary M. Jones (2016) “Mlr: Machine Learning in R,” Journal of Machine Learning Research, Vol. 17, No. 170, pp. 1–5, retrieved from here. [3] Bischl, Bernd, Jakob Richter, Jakob Bossek, Daniel Horn, Janek Thomas, and Michel Lang (2018) “mlrMBO: A Modular Framework for Model-Based Optimization of Expensive Black-Box Functions,” December, arXiv: 1703.03373. [4] Boehmke, Brad and Brandon M. Greenwell (2019) Hands-on Machine Learning with R, Chapman & Hall/CRC the R Series, Boca Raton: CRC Press, retrieved from here. [5] Buitinck, Lars, Gilles Louppe, Mathieu Blondel, Fabian Pedregosa, Andreas Mueller, Olivier Grisel, Vlad Niculae, Peter Prettenhofer, Alexandre Gramfort, Jaques Grobler, Robert Layton, Jake VanderPlas, Arnaud Joly, Brian Holt, and Gaël Varoquaux (2013) “API Design for 36
  27. Machine Learning Software: Experiences from the Scikit-Learn Project,” in ECML

    PKDD Workshop: Languages for Data Mining and Machine Learning, pp. 108–122. [6] Chapman, Peter, Janet Clinton, Randy Kerber, Tom Khabaza, Thomas Reinartz, C. Russell H. Shearer, and Robert Wirth (2000) “CRISP-DM 1.0: Step-by-Step Data Mining Guide.” [7] Chatzidimitriou, Kyriakos, Themistoklis Diamantopoulos, Papamichail Michail, and Andreas Symeonidis (2018) “Practical Machine Learning in R,” June, retrieved from here. [8] Géron, Aurélien (2017) Hands-on Machine Learning with Scikit-Learn and TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems, (下田倫大‧⻑尾高弘訳, 『scikit-learn と TensorFlow による 実践機械学習』 ,オライリー‧ジャパン,2018 年). [9] Hastie, Trevor, Robert Tibshriani, and Jerome Friedman (2009) The Elements of Statistical Learning: Data Mining, Inference, and Prediction: Springer, 2nd edition, retrieved from here, (杉山将‧井出 剛‧神嶌敏弘‧栗田多喜夫‧前田英作‧井尻善久‧岩田具治‧金森敬 文‧兼村厚範‧鳥山昌幸‧河原吉伸‧木村昭悟‧小⻄嘉典‧酒井智弥‧ 36
  28. 鈴木大慈‧竹内一郎‧玉木徹‧出口大輔‧冨岡亮太‧波部⻫‧前田新 一‧持橋大地‧山田誠訳, 『統計的学習の基礎 —データマイニング‧推 論‧予測—』 ,共立出版,2014 年). [10] Hazelwood, Kim,

    Sarah Bird, David Brooks, Soumith Chintala, Utku Diril, Dmytro Dzhulgakov, Mohamed Fawzy, Bill Jia, Yangqing Jia, Aditya Kalro, James Law, Kevin Lee, Jason Lu, Pieter Noordhuis, Misha Smelyanskiy, Liang Xiong, and Xiaodong Wang (2018) “Applied Machine Learning at Facebook: A Datacenter Infrastructure Perspective,” in 2018 IEEE International Symposium on High Performance Computer Architecture (HPCA), Vol. 2018-Febru, pp. 620–629, Vienna: IEEE, February, DOI: 10.1109/HPCA.2018.00059. [11] Irizarry, Rafael A. (2019) Introduction to Data Science: Data Analysis and Prediction Algorithms with R, Boca Raton: CRC Press, retrieved from here. [12] Kuhn, Max (2008) “Building Predictive Models in R Using the Caret Package,” Journal of Statistical Software, Vol. 28, No. 5, DOI: 10.18637/jss.v028.i05. [13] mlr-Org. Team (2019) “Ml3 Manual,” retrieved from here. 36
  29. [14] Sarafian, Ron (2019) “Introduction to Data Science,” June, retrieved

    from here. [15] Schiffner, Julia, Bernd Bischl, Michel Lang, Jakob Richter, Zachary M. Jones, Philipp Probst, Florian Pfisterer, Mason Gallo, Dominik Kirchhoff, Tobias Kühn, Janek Thomas, and Lars Kotthoff (2016) “Mlr Tutorial,” September, arXiv: 1609.06146. [16] Wickham, Hadley and Garrett Grolemund (2016) R for Data Science: Import, Tidy, Transform, Visualize, and Model Data, Sebastopol, CA: O’Reilly, first edition edition, retrieved from here, (黒川利明‧大橋真也 訳, 『R で始めるデータサイエンス』 ,オライリー‧ジャパン,2017 年) . [17] 杉山将 (2013) 『イラストで学ぶ機械学習: 最小二乗法による識別モデ ル学習を中心に』 ,講談社,東京, retrieved from here. 36