Excel でベイス線形回帰

こっちが本番。


パターン認識機械学習」(PRML) 上巻 p152〜p154 の分布図を書いちゃうところまで含めて Excel でやってみた。
細かい説明は後にして、実際に動いているところを。

観測する訓練データが増えていくと、分布が徐々にとがっていく PRML p154 の図が再現できた。
追記】大事なこと忘れてた。上記動作は逐次学習っぽく見えているが、実は毎回無情報事前分布からデータセット全体で最学習している(エクセルだと逐次の方が面倒だったので……)。書籍では逐次学習なので、そこは異なっている。
それにしても逐次と一括で結果はどれくらい変わってくるんだろう。ガウス分布を用いる場合は期待値は同一になりそうだけど、共分散はどうかなあ。


黄色セルは可変なので、αやβを書き換えれば、ハイパーパラメータがどういう風に効いてくるか、ということも試せる。


可変を明示していないが、S^-1 と m に入っている式を消して適当な値を入力すれば、対応するガウス分布を描画してくれるので、そこも ふむふむポイント。
個人的には「ガウス分布の共分散行列」というものがいまいち実感を掴みにくかったのだが、その逆行列 S^-1 の変化の推移を見ていると、なんとなくわかるような気がしてくる。


実際の Excel ファイルも勢いで配布。


http://github.com/shuyo/iir/tree/5fd994465ec97205633b9216c8c93e366e976ab6/misc


ただし xlsx ファイルなので Excel 2007 以降対応。
xls に変換してみたんだけど、3D 効果によってつけられていた影が無くなってしまって、分布図が かわいそうな子になってしまったので……


色々どうやって実装しているか、細かいところはファイル見てね、ということで大きいところで。

  • 分布図は、2次の正規分布を 0.1 間隔で計算した表(分布図の後に見えてる奴)を「3D等高線グラフ」に食わせて生成。2Dの等高線グラフでもよいのだが、そちらでは等高線の間隔を指定することがどうしても出来なかったので、3Dグラフをほぼ真上の視点から見る形にした。
  • 訓練データは f(x)=a_0+a_1x, a_0=-0.3, a_1=0.5, x∈[-1,1] に σ=0.2 のガウスノイズを加えたものを下記のようにして生成。動画では、これを「値貼り付け」でその下の観測データエリアにどんどんペーストしていってる。そのまま式ごと貼り付けてしまうと、なにか編集操作するたびに乱数が再計算されてしまうので……(まあ、それはそれで楽しいが)
A B
1 rand_x rand_t
2 =RAND()*2-1 =-0.3+0.5*A2+NORMSINV(RAND())*0.2

ちなみに。
Excel でこれを実装するには、行列の積なども自分で四則算に書き下さなければならない*1
ので、φとかΦとかSとかΣとかtとかtとかa_0とかαとかβとかm_0とかm_Nとか、もう似たようなパラメータてんこ盛りを落とし込んでいるうちに、どれがどういうパラメータかというのを覚えてしまった、というのが一番の実利かな。


んー、いや、一番は「やっぱりR覚えよう……」としみじみ実感したことかもしれない(苦笑)。

*1:行列の積の関数も実はちゃんと用意されてるが、セルに書き下さないといけないので今回の場合は使えない。行列式逆行列の関数はちゃんと使わせてもらった。