[研究] ベイジアンネットワークのチュートリアルを輪講

昨日は
A Tutorial on Learning With Bayesian Networks
http://research.microsoft.com/research/pubs/view.aspx?msr_tr_id=MSR-TR-95-06
を講座の教授に説明する輪講があった。
ベイジアンネットワークは複数の確率変数間の同時確率モデルを非循環有向グラフで表現したネットワークで、5月の人工知能学会誌でも特集されていたようだし最近注目を集めているということだ。
人気の理由は

  • データに欠損があっても学習可能であること
  • データへの過剰適合による汎化性能の低下(過学習)を自動的に回避できる

などがある。
第一点はEMアルゴリズムなどによって近似的に条件付き確率を学習することにより実現される。第二点はBayesian learning一般の特徴。
グラフ構造に制約を設けることで効率的に推論できるアルゴリズムがあり、計算機のパワーの向上によって最近実用アプリケーションも出始めている。
各確率変数に対応する条件付き確率(local distribution functions)が多項分布なら離散状態を扱える、local distribution functionをGaussianとかにすれば連続な状態も扱えるとのこと。さらに離散値の変数と連続値の変数を一つのネットワークに混在させることもできる。

ここ何日か、理論を確認するためにCommon Lispアルゴリズムを実装してみている。
Javaにはベイジアンネット用のツールボックスが在ったようだけど、自分で実装してみてはじめてわかることもあるだろうと思う。
久しぶりにプログラムを書いたけどやっぱりSBCL+Emacs+SLIMEは便利だなあ。すらすら書ける。