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

Scikit-learnで学ぶ機械学習入門

 Scikit-learnで学ぶ機械学習入門

Takami Sato

July 19, 2014
Tweet

Other Decks in Technology

Transcript

  1. Scikit-learnってなに? • Pythonの機械学習ライブラリ – 無料・有料含めて、コレほど充実したライブラリは他にない – ほぼデファクトスタンダード状態 (と思っている) 2014年7月19日 機械学習勉強会

    4 利点 (対R) ・高速 ・省メモリ ・Pythonなので言語基盤がしっかりしている ・検索しやすい 欠点 (対R) ・カテゴリカル変数の処理(factor型は無い) ・環境構築が面倒
  2. 環境構築 2014年7月19日 機械学習勉強会 7 • こだわりたい人 • Linuxユーザ 非商用個人ならインテルコンパイラとMKLが無料で使える それ以外は、OpenBLASが高速

    インストール方法はGithubにあげました OpenBLASはmultiprocessingとの相性が悪いので要注意 WindowsでOpenBLASは鬼門なのでやめましょう https://software.intel.com/en-us/non-commercial-software-development インストール方法はコチラ https://software.intel.com/en-us/articles/numpyscipy-with-intel-mkl?language=es http://gehrcke.de/2014/02/building-numpy-and-scipy-with-intel-compilers-and- intel-mkl-on-a-64-bit-machine/ https://github.com/anaguma2261/setup_python_with_openblas
  3. 2014年7月19日 機械学習勉強会 8 脱線:BLAS と LAPACK 数値計算をやると裏で必ずお世話になるのがこの2つ  Basic Linear

    Algebra Subprograms (BLAS) -線型代数計算を実行するライブラリの標準仕様  Linear Algebra PACKage (LAPACK) -BLAS上に構築された固有値計算などの高位な線形代数計算ライブラリ 現在様々なBLAS実装が公開されている  Intel MKL … MATLABはコレ 有償 すごく速い・高い・安心!  ATLAS … 自動チューンのBLAS BSD 速い  GotoBLAS2 … 後藤和茂氏作成のBLAS BSD かなり速い 開発停止  OpenBLAS … xianyi氏によるGotoBLAS2の後継BLAS BSD すごく速い (MATLAB, R, Octave, numpy …) 計算が遅い時、4つのどれかの導入すると幸せになれるかも? ・ ・ ・
  4. 脱線: BLASの比較 2014年7月19日 機械学習勉強会 9 引用:R BLAS: GotoBLAS2 vs OpenBLAS

    vs MKL (http://blog.felixriedel.com/2012/11/r-blas-gotoblas2-vs-openblas-vs-mkl/) 実行コード A = matrix(rnorm(n*n),n,n) A %*% A solve(A) svd(A) RのデフォルトBLASから何倍早くなったか検証してるサイトがあったので紹介  最大で11倍ほど高速化  MKLが基本的に一番高速  OpenBLASも所によってはMKLを上回ることも  マルチスレッド環境では導入は必須かも
  5. 機械学習の流れ 2014年7月19日 機械学習勉強会 11 分析対象のデータを集める。趣味でやる場合には、結構重要 最も苦痛を伴う作業。機械学習モデルに渡せる方に整形する カテゴリカル変数のダミー変数化、欠損値穴埋め、変数の作成等 問題に合わせて適当な手法を選択する。 リッジ回帰、SVM、RandomForest、決定木、k-means など

    手法のハイパーパラメータを選択する。 リッジ回帰の正則化項、 決定木の木の深さ など 尤度最大化などで学習。Scikit-learnがやってくれるので割愛 問題に合わせて適当な評価尺度を選択する。 精度、F値、平均二乗誤差、AUC など ①データの入手 ②データの前処理 ③手法選択 ④ハイパー パラメータ選択 ⑥モデル評価 精度 は十分か ⑤モデル学習 NO YES 成功! 手法を 変える パラメタを 変える
  6. データを集めて・前処理する 2014年7月19日 機械学習勉強会 12 ①データの入手 ②データの前処理 ③手法選択 ④ハイパー パラメータ選択 ⑥モデル評価

    精度 は十分か ⑤モデル学習 NO YES 成功! 手法を 変える パラメタを 変える 趣味でやると、手法は知ってても、 データが無いことが多数 いくつか、データのある場所を紹介 ◆練習用データ ・Kaggle https://www.kaggle.com/ ・ UCI Machine Learning Repository http://archive.ics.uci.edu/ml/ ◆テキストデータ(日本語) ・2ch ・Twitter Streaming API ・Wikipedia ダンプデータ ・青空文庫 前処理はひたすら頑張って下さい。 ここでどんな変数を作るかで、かなり(一番?)利きます Scikit-learnやpandasに便利関数アリ
  7. パラメータの探索 2014年7月19日 機械学習勉強会 13 ①データの入手 ②データの前処理 ③手法選択 ④ハイパー パラメータ選択 ④モデル評価

    精度 は十分か ④モデル学習 NO YES 成功! 手法を 変える パラメタを 変える この一連の流れ (良いパラメータの発見)を効率良く行う方法が 交差検定( Cross-validation ) グリッドサーチ どちらもscikit-learnにあります
  8. 交差検定 (k-fold cross validation ) 2014年7月19日 機械学習勉強会 14 ①データの入手 ②データの前処理

    ③手法選択 ④ハイパー パラメータ選択 ⑥モデル評価 精度 は十分か ⑤モデル学習 NO YES 成功! 手法を 変える パラメタを 変える 学習と評価には、学習データと検証データが必要 ただし、別々に用意すると・・・ ・検証データを学習に全く使えない ・検証データが偶然良い(悪い)可能性 交差検定をしよう!
  9. 交差検定 (k-fold cross validation ) 2014年7月19日 機械学習勉強会 15 5-fold cross

    validation のイメージ(レコードは最初にランダムに並べ替え済みとする) テスト用のレコードセット 学習用のレコードセット 学習と精度評価をk回繰り返し、平均値を精度の推定値とする手法 ・検証データを学習に全く使えない k-1回は学習に使用 ・検証データが偶然良い(悪い)可能性 k回評価で偶然性を極力排除
  10. グリッドサーチ(気合) 2014年7月19日 機械学習勉強会 16 ①データの入手 ②データの前処理 ③手法選択 ④ハイパー パラメータ選択 ⑥モデル評価

    精度 は十分か ⑤モデル学習 NO YES 成功! 手法を 変える パラメタを 変える 良いパラメータって どうやって見つけるの? グリッドサーチ(気合)です。
  11. パラメータの探索 2014年7月19日 機械学習勉強会 18 ①データの入手 ②データの前処理 ③手法選択 ④ハイパー パラメータ選択 ⑥モデル評価

    精度 は十分か ⑤モデル学習 NO YES 成功! 手法を 変える パラメタを 変える グリッドサーチ 交差検定 学習と評価 まとめると、こんな感じ
  12. パラメータの探索 2014年7月19日 機械学習勉強会 26 先ほどのパラメータ(81種)を10-fold 交差検定すると 810回学習と検証が必要 Q:クラスタ組めない A:弊社の を買って下さい

    最近はクラウド上の機械学習も有ります。 http://jp.techcrunch.com/2014/06/17/20140616microsoft-announces-azure-ml- cloud-based-machine-learning-platform-that-can-predict-future-events/
  13. ・・・とは行かない 2014年7月19日 機械学習勉強会 28 ①データの入手 ②データの前処理 ③手法選択 ④ハイパー パラメータ選択 ⑥モデル評価

    精度 は十分か ⑤モデル学習 NO YES 成功! 手法を 変える パラメタを 変える 適切な手法の選択が 機械学習で 最も重要かつ 難しい問題
  14. 実装の雰囲気 2014年7月19日 機械学習勉強会 31 import numpy from sklearn.cross_validation import cross_val_score

    #使いたい手法をインポート from sklearn.hogehoge import some_machine_learning_method for パラメータ in (グリッドサーチの探索範囲): #手法のインスタンスを生成 model = some_machine_learning_method(パラメータ) #お手軽交差検定 cv_scores = cross_val_score(model, 説明変数, 目的変数) #交差検定の各学習のスコア平均値を計算 score = numpy.mean(cv_scores) これでScikit-learnの大体の手法は、これで使えるはず リッジ回帰の例をGithubにあげました https://github.com/anaguma2261/scikit-learn-sample/blob/master/ridge_regression.py
  15. 手法の種類 • Classification (分類) – ラベルをデータで学習して、ラベルを予測 • Regression (回帰) –

    実数値をデータで学習して、実数値を予測 • Clustering (クラスタリング) – データを似ているもの同士を集めて、データの構造を発見 • Dimensional Reduction (次元削減) – データの次元を削減して、よりメタな要因を発見 (主成分分析は次元削減のひとつ) – 削減した次元をデータにして他の手法を行う (次元の呪い回避) 2014年7月19日 機械学習勉強会 32
  16. Classification (分類) • SVM (SVC, LinearSVC) – 利点 • 汎化性能が高く、少量のデータでもうまく学習出来る事がある

    • カーネルの組み合わせで様々データに対応できる – 欠点 • カーネル入れると遅い • 関数によっては、予測確率で出力できない • K-近傍法 (NearestNeighbors) – 利点 • 単純な割に精度が高い – 欠点 • 予測時にもメモリに学習データを格納する必要がある • ランダムフォレスト (RandomForestClassifier) – 利点 • 精度が高いことが多い • 並列計算しやすい • 過学習や、変数のスケールを考えずに、全て変数を入れて学習できる – 欠点 • ランダムフォレスト信者になりやすい 2014年7月19日 機械学習勉強会 33
  17. Regression (回帰) 2014年7月19日 機械学習勉強会 35 • 重回帰 (LinearRegression) – 利点

    ・・・ 速い (パラメータ無し) – 欠点 ・・・ Scikit-learnにstepwise法が無いので、使いにくい • リッジ回帰 (Ridge) – 利点 ・・・ ラッソより速い、多重線形性の影響を受けにくい – 欠点 ・・・ ラッソに比べて、変数選択力が弱い • ラッソ回帰 (Lasso) – 利点 ・・・ 少ない変数でモデルを作ってくれる – 欠点 ・・・ リッジよりは遅い、使わない変数があることを仮定している • SVR (SVR) – 利点 ・・・ カーネルで非線形性を取り込める – 欠点 ・・・ カーネルを入れると遅い • ランダムフォレスト(RandomForestRegressor) – Classificationを参照 回帰では予測値が離散になる欠点がある
  18. Clustering (クラスタリング) • K-means法(KMeans) – 利点 ・・・ 速い MiniBatchKMeansは計算をサボってるので更に速い –

    欠点 ・・・ クラスタ数を最初に与えないといけない • 階層的クラスタリング(AgglomerativeClustering) 最近実装されたので表には無い – 利点 ・・・ クラスタ数を後から色々変えられる – 欠点 ・・・ 遅い、大きいデータは階層が表示出来ないことも • 混合ガウス分布(GMM) – 利点 ・・・ 各クラスタの所属確率が出る。 – 欠点 ・・・ 正規分布を仮定する • Mean Shift ( MeanShift ) – 使用経験がないのでノーコメント 誰か教えて下さい 2014年7月19日 機械学習勉強会 36
  19. Dimensional Reduction (次元削減) 2014年7月19日 機械学習勉強会 37 Scikit-learnのフローチャートに語れる手法があまりなかったので、私がよく使う手法を紹介 • 主成分分析(PCA) –

    利点 ・・・ 速い 疎行列も扱える – 欠点 ・・・ 裏で正規分布を仮定 • 非負値行列因子分解 (NMF) – 利点 ・・・ 要因の引き算を許さないことでより特徴を抽出できる事もある – 欠点 ・・・ 非負行列限定 その他、LDAやDeep Learningなどなども