Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Pythonを使った機械学習の学習

16,113 views

Published on

2017年1月27日、found it project勉強会で発表した資料です。
機械学習を勉強するためにどうPythonを役立てればいいかという話です。

Published in: Technology
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Pythonを使った機械学習の学習

  1. 1. Pythonを使った機械学習の学習 2017年1月27日 found it project セミナー 加藤公一 シルバーエッグ・テクノロジー(株)
  2. 2. 自己紹介 加藤公一(かとうきみかず) シルバーエッグ・テクノロジー(株) チーフサイエンティスト Twitter: @hamukazu 博士(情報理工学)、修士は数学 機械学習歴もPython歴も4年 趣味:筋トレ、特技:ベンチプレス
  3. 3. 今日のはなし • 機械学習の学習の話 – どのように勉強するとよいか • 私はどのように学習したか – 4年前は初心者
  4. 4. ちなみに… http://bit.ly/kimikazu20140913 http://bit.ly/kimikazu20160204 いままでPythonの高速化芸を得意としてきました。 PyCon JP 2014 ソフトウェアジャパン2016 今日はその話はしません。
  5. 5. 宣伝 http://bit.ly/yoseiml 書きました!
  6. 6. 宣伝 http://bit.ly/kagakupy 訳しました!
  7. 7. 今日の話 • 機械学習を効率よく勉強するにはどうすれば いいだろうか • ただツールを使うだけではなく内部動作にも 詳しくなるために • 理解を助けるツールとしてのPython
  8. 8. 私はどうやって勉強したか • 本(論文)を読む • 自分で実装する – 人工データで振る舞いを確認する – 内部動作を可視化する • 既存の実装を見る – ソースコードを読む – 内部データを読む
  9. 9. まずはこれ
  10. 10. さらにその前に • 線形代数 • 微積分
  11. 11. 自分で実装する • 便利なライブラリがあっても、理解のためにあ えて自分で作ってみる – 参考例:大学のクラスで学習するソートのアルゴ リズム→機能を得ることが目的ではない、便利な ライブラリならいくらでもある • 最新の論文に出ているアルゴリズムは自分 で実装せざるをえないことも – 意外と簡単につくれる
  12. 12. 人工データでの確認 I1 I2 I3 I4 I5 U1 1 1 1 U2 1 1 1 U3 1 1 1 U4 1 1 ? ? ? レコメンデーションの場合 ユーザU4には何を薦めればいい? クラスタリングの場合 これを2つのクラスタに分ける 離れた2つの点を中心に正規分布した点をそれぞれ作る こういう自明なケースで確認:単体テストとしても有効
  13. 13. 内部動作の可視化 Metropolis-Hastingsアルゴリズム(MCMCの一 種)の動作原理を説明できますか?
  14. 14. とりあえず動かしてみよう (PRMLより) 低次元のケースについて、実際に動かしてみて可視化する
  15. 15. 他の例:Lasso • Lassoの解がなぜsparseになるか説明できま すか?
  16. 16. L2ノルムの最小化 直線と共有点を持つように 円(L2球)を最小化
  17. 17. L1ノルムの最小化 直線と共有点を持つように ひし形(L1球)を最小化
  18. 18. このように… • データが単純なとき(極端な分布のとき)、次 元が低いとき、など簡単なケースで実装して 試してみる • 実用上の価値がなくても動作の理解には役 に立つ
  19. 19. 数値的な解析に便利なツール • Numpy/Scipy (これはあたりまえ) • Sympy (あまり使わない?)
  20. 20. 問題 次の機械学習でよく出てくる関数を微分せよ(制限時間各5秒)
  21. 21.
  22. 22. 数値微分はあまりよくないという話 実際にfの値を評価しながら計算すると、hが小さいとき に桁落ちが起こって精度が落ちる
  23. 23. Sympy • シンボリックな計算ができる • 代数的な演算や、微分・積分などもシンボリッ クに
  24. 24. 既存のライブラリを使ってみる • とりあえずはscikit-learn • インターフェースが統一されてる • ドキュメントも整備されている
  25. 25. みんな大好きあやめの分類 PCAで2次元に射影してからSVMで分類
  26. 26. これで喜んでていいの? 普通サポートベクタ知りたいよね?
  27. 27. サポートベクタの可視化 SVC.support_vector_でサポートベクタが取 得できる (ドキュメントに書いてある)
  28. 28. Scikit-learnのよさ • ドキュメントがよく書かれていて、内部データ 構造についても記述があるものが多い • 内部データ構造を見ることで機械学習アルゴ リズムの理解に役立つ • それでも納得しなければソースコードを読め ばいい • とにかく深掘りしやすい環境
  29. 29. しかし… • Scikit-learnがすべてではない • 機械学習ライブラリの中にはドキュメントが不 親切なものも
  30. 30. Gensim (自然言語処理のライブラリ) チュートリアルにあるLDAを使ったトピック抽出例 文書群をトピックに分類し、各トピックではどのような単語が支配的かを可視化
  31. 31. LDAについて D.M.Blei, A.Y.Ng, M.I.Jordan, "Latent Dirichlet Allocation" JMLR, vol.3, pp.993-1022 (2003) このようなグラフィカルモデルで表される 文書には潜在的なトピック群についての確率分布が割り当てられる
  32. 32. こんなデモでいいの? その他の内部パラメータを可視化しなくない?
  33. 33. そのためには • 内部データ構造について、ドキュメントにはな にも書いていない • なので、ソースコードを読まないとならない • といっても、よく整理されているので読みやす い
  34. 34. LDAのパラメータ
  35. 35. まとめ • 中身を理解したかったら手を動かしながら勉 強しよう • 理解のためのツールとしてもPythonは使える • Sympyはいいぞ
  36. 36. 私のキャリア戦略 • 「中身をよくわかっている」というのは競争力 になるのではないか – より深いチューニング – 最新の研究論文の実装・実験がスムーズに
  37. 37. 良い理論ほど実用的なものはない 「科学技術計算のためのPython―確率・統計・機械学習」より

×