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

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