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

37
Pythonを使った機械学習の学習 2017127found it project セミナー 加藤公一 シルバーエッグ・テクノロジー(株)

Upload: kimikazu-kato

Post on 15-Feb-2017

1.292 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Pythonを使った機械学習の学習

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

2017年1月27日 found it project セミナー

加藤公一 シルバーエッグ・テクノロジー(株)

Page 2: Pythonを使った機械学習の学習

自己紹介

加藤公一(かとうきみかず) シルバーエッグ・テクノロジー(株) チーフサイエンティスト Twitter: @hamukazu 博士(情報理工学)、修士は数学 機械学習歴もPython歴も4年 趣味:筋トレ、特技:ベンチプレス

Page 3: Pythonを使った機械学習の学習

今日のはなし

• 機械学習の学習の話

–どのように勉強するとよいか

• 私はどのように学習したか

– 4年前は初心者

Page 4: Pythonを使った機械学習の学習

ちなみに…

http://bit.ly/kimikazu20140913

http://bit.ly/kimikazu20160204

いままでPythonの高速化芸を得意としてきました。

PyCon JP 2014 ソフトウェアジャパン2016

今日はその話はしません。

Page 5: Pythonを使った機械学習の学習

宣伝

http://bit.ly/yoseiml

書きました!

Page 6: Pythonを使った機械学習の学習

宣伝

http://bit.ly/kagakupy

訳しました!

Page 7: Pythonを使った機械学習の学習

今日の話

• 機械学習を効率よく勉強するにはどうすればいいだろうか

• ただツールを使うだけではなく内部動作にも詳しくなるために

• 理解を助けるツールとしてのPython

Page 8: Pythonを使った機械学習の学習

私はどうやって勉強したか

• 本(論文)を読む

• 自分で実装する

–人工データで振る舞いを確認する

–内部動作を可視化する

• 既存の実装を見る

– ソースコードを読む

–内部データを読む

Page 9: Pythonを使った機械学習の学習

まずはこれ

Page 10: Pythonを使った機械学習の学習

さらにその前に

• 線形代数

• 微積分

Page 11: Pythonを使った機械学習の学習

自分で実装する

• 便利なライブラリがあっても、理解のためにあえて自分で作ってみる

–参考例:大学のクラスで学習するソートのアルゴリズム→機能を得ることが目的ではない、便利なライブラリならいくらでもある

• 最新の論文に出ているアルゴリズムは自分で実装せざるをえないことも

–意外と簡単につくれる

Page 12: Pythonを使った機械学習の学習

人工データでの確認

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を使った機械学習の学習

内部動作の可視化

Metropolis-Hastingsアルゴリズム(MCMCの一種)の動作原理を説明できますか?

Page 14: Pythonを使った機械学習の学習

とりあえず動かしてみよう

(PRMLより)

低次元のケースについて、実際に動かしてみて可視化する

Page 15: Pythonを使った機械学習の学習

他の例:Lasso

• Lassoの解がなぜsparseになるか説明できますか?

Page 16: Pythonを使った機械学習の学習

L2ノルムの最小化

直線と共有点を持つように 円(L2球)を最小化

Page 17: Pythonを使った機械学習の学習

L1ノルムの最小化

直線と共有点を持つように ひし形(L1球)を最小化

Page 18: Pythonを使った機械学習の学習

このように…

• データが単純なとき(極端な分布のとき)、次元が低いとき、など簡単なケースで実装して試してみる

• 実用上の価値がなくても動作の理解には役に立つ

Page 19: Pythonを使った機械学習の学習

数値的な解析に便利なツール

• Numpy/Scipy (これはあたりまえ)

• Sympy (あまり使わない?)

Page 20: Pythonを使った機械学習の学習

問題

次の機械学習でよく出てくる関数を微分せよ(制限時間各5秒)

Page 21: Pythonを使った機械学習の学習

Page 22: Pythonを使った機械学習の学習

数値微分はあまりよくないという話

実際にfの値を評価しながら計算すると、hが小さいときに桁落ちが起こって精度が落ちる

Page 23: Pythonを使った機械学習の学習

Sympy

• シンボリックな計算ができる

• 代数的な演算や、微分・積分などもシンボリックに

Page 24: Pythonを使った機械学習の学習

既存のライブラリを使ってみる

• とりあえずはscikit-learn

• インターフェースが統一されてる

• ドキュメントも整備されている

Page 25: Pythonを使った機械学習の学習

みんな大好きあやめの分類

PCAで2次元に射影してからSVMで分類

Page 26: Pythonを使った機械学習の学習

これで喜んでていいの? 普通サポートベクタ知りたいよね?

Page 27: Pythonを使った機械学習の学習

サポートベクタの可視化

SVC.support_vector_でサポートベクタが取得できる (ドキュメントに書いてある)

Page 28: Pythonを使った機械学習の学習

Scikit-learnのよさ

• ドキュメントがよく書かれていて、内部データ構造についても記述があるものが多い

• 内部データ構造を見ることで機械学習アルゴリズムの理解に役立つ

• それでも納得しなければソースコードを読めばいい

• とにかく深掘りしやすい環境

Page 29: Pythonを使った機械学習の学習

しかし…

• Scikit-learnがすべてではない

• 機械学習ライブラリの中にはドキュメントが不親切なものも

Page 30: Pythonを使った機械学習の学習

Gensim (自然言語処理のライブラリ)

チュートリアルにあるLDAを使ったトピック抽出例

文書群をトピックに分類し、各トピックではどのような単語が支配的かを可視化

Page 31: Pythonを使った機械学習の学習

LDAについて D.M.Blei, A.Y.Ng, M.I.Jordan, "Latent Dirichlet Allocation" JMLR, vol.3, pp.993-1022 (2003)

このようなグラフィカルモデルで表される

文書には潜在的なトピック群についての確率分布が割り当てられる

Page 32: Pythonを使った機械学習の学習

こんなデモでいいの?

その他の内部パラメータを可視化しなくない?

Page 33: Pythonを使った機械学習の学習

そのためには

• 内部データ構造について、ドキュメントにはなにも書いていない

• なので、ソースコードを読まないとならない

• といっても、よく整理されているので読みやすい

Page 34: Pythonを使った機械学習の学習

LDAのパラメータ

Page 35: Pythonを使った機械学習の学習

まとめ

• 中身を理解したかったら手を動かしながら勉強しよう

• 理解のためのツールとしてもPythonは使える

• Sympyはいいぞ

Page 36: Pythonを使った機械学習の学習

私のキャリア戦略

• 「中身をよくわかっている」というのは競争力になるのではないか

–より深いチューニング

–最新の研究論文の実装・実験がスムーズに

Page 37: Pythonを使った機械学習の学習

良い理論ほど実用的なものはない

「科学技術計算のためのPython―確率・統計・機械学習」より