今までに書いた「 PRML を読んで、やってみた」系の記事をまとめてみた。何か参考になれば幸い。
根本的にとても疑り深い人(教科書の類に対しては特に)なので、「こんなん書いてあるけど、ほんまかいな〜?」という姿勢が目立つ。
また、よく「手触り」という言葉が出てくる。なんというか、「感触」がわからないと気持ち悪いのだ。基本的な道具類は目をつむっていても使えるのが理想、と言えば、なんとなくでもわかってもらえるだろうか。
あと、言葉使いに無駄に小うるさい(苦笑)。多くの人にとってはどうでもいいところで妙にこだわっているかも。
下巻編はこちら。
- PRML 読んでやってみた(下巻編)
1章&2章
特に実装とかしてない。
- ディリクレ分布のパラメータが0のとき
実装ではないが、ディリクレ分布でパラメータを0とみなすというのはどういうことか、というあたりを解説してみたもの。9章や10章ではそのへんちょっと出てくるので。
3章 線形回帰モデル
ベイズ線形回帰とそのモデルエビデンスを実装してみた。
まだ R を憶えていなかったので、最初 Excel で試しているのがほほえましいw
2章で事前分布とかやったはいいが、ベイズってよくわからん……という人は、3章のベイズ線形回帰を試してみるのが手頃でお勧め。
1章でも、1.2.5〜6 で曲線フィッティングとして同じ事を手短にやっていて、実装を試すだけならそれで足りるんだけど、3章を読んでから試す方がいいと強く思っている。
というのも、PRML 図 3.7、図 3.8 とモデルエビデンスについて、自分の手を実際に動かしながら試しておいたことが、後々何かにつけて役だってくれたという実感があるから。
その点、1章のタイミングではまだろくに道具立てが揃っていないし、周辺情報とも切り離されている。PRML 1.2.5〜6 は、その存在自体に対して「気が早いよ!」と突っ込みを入れたいくらい。
4章 線形識別モデル
4章ではパーセプトロンを試した。
さっきは Excel と R だったが、今度はなんと手計算w
あまりにも簡単な更新式だったので、手でも計算できるんじゃあないか、と思ったら本当に出来てしまった、というお話。
- Perceptron を手で計算して理解してみる
- コンピュータはオー・ヘンリーとエドガー・アラン・ポーの文章を見分けられるか?(機械学習/パーセプトロン)
実のところ、「機械学習」という言葉に神秘的で高等な何かを感じている人だったので、このパーセプトロンの更新式の簡素さに衝撃を受けてしまったわけで。
単に試してみた、というのではないが、以下の記事では IRT(項目反応理論) に出てくるロジスティック回帰を確率的勾配法で解いている。
- iVoca の履歴から単語の難易度を計算
IRLS(反復重み付き最小二乗法)も試したんだけど、ブログには書きそびれている。
- PRML 4.1 の最小二乗法&フィッシャーの線形判別を試してみた
最小二乗法による識別とフィッシャーの線形判別による識別がどれくらい違うのか、というあたりを簡単に確認してみたもの。
5章 ニューラルネットワーク
ニューラルネットワーク(多層パーセプトロン) は、これ読んで実装してみたくならないわけないでしょう! というノリで実装。
ネットワーク構成をいろいろ変えてみたかったので、Ruby DSL でユニットの種類とつながり方を記述できるようにしてみたり。
- PRML§5から多層パーセプトロンの実装
- ニューラルネットワークでXORを学習させてみた
- ニューラルネットワークで分類
- Ruby で MNIST 手書き文字データを扱う
- PRML Hackathon #1
が。
せっかく柔軟に作ったのに、いろいろな条件で試そうにも実行に一昼夜とか3日とかかかってしまうと、嬉しくない。Ruby では限界あるな〜 orz*1。
というわけで、この後、軽い検証レベルは R で実装(だいぶ慣れてきたので)、大きなデータを食わせていろいろ試してみければ C++ で実装という感じにシフトしていくことに。
C++ 実装は、社内のライブラリを使っちゃっていて、今すぐ公開できないあたりが ちと難点……。
*1:で、変なもの http://d.hatena.ne.jp/n_shuyo/20091023/rxbyak 作ってみようとしたりw