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