ベイジアンネットワークというのは複数の要因によって捉えられる事象を確率的にモデル化する手法の一つです。どっかの例でみたのは「風が吹けば桶屋が儲かる」的な事象を複雑な要因を含めて数学的にモデル化出来るわけです。
機械学習での応用としては音声認識とか障害検知とか、比較的広く使われてるみたい。人間ならふわっとうまく判断出来ることをコンピューターにやらせたいときに向いてるっぽい。
まずは入門
概要としてはこのpdfがわかりやすかった。
http://www.ne.jp/asahi/hiroki/suyari/BayesianNetworkIntro1.pdf
pebl
というpythonでベイジアンネットワークを実装するライブラリがあるのだが、チュートリアルをやってみるとSegmentation fault: 11
が出てしまい先に進めない。GitHubにissueも立っているがMac特有の問題らしく未解決で放置。
次にbayespy
というライブラリを見つけたので試してみる。
https://github.com/bayespy/bayespy
変分ベイズ法を試す
bayespy
のクイックスタートをやってみる。ベイジアンネットワークを実装したかったんだけど、どうやらクイックスタートは変分ベイズ法の実装らしいので、これでいいや。
ちなみに変分ベイズ法というのは確率モデルのベイズ推定を行うための近似解法らしい。
http://bayespy.org/en/latest/user_guide/quickstart.html
まずはインストールですが、python3系じゃないと使えないっぽい。pyenvを使っているのでしれっと3.5.1をインスコしました。
$ pip install bayespy
依存パッケージもインストール。
$ pip install "distribute>=0.6.28" $ pip install "numpy>=1.8.0" "scipy>=0.13.0" "matplotlib>=1.2" h5py
main.py
import numpy as np import bayespy.plot as bpplt from bayespy.nodes import GaussianARD, Gamma from bayespy.inference import VB data = np.random.normal(5, 10, size=(10,)) mu = GaussianARD(0, 1e-6) tau = Gamma(1e-6, 1e-6) y = GaussianARD(mu, tau, plates=(10,)) y.observe(data) Q = VB(mu, tau, y) Q.update(repeat=20) bpplt.pyplot.subplot(2, 1, 1) bpplt.pdf(mu, np.linspace(-10, 20, num=100), color='k', name=r'\mu') bpplt.pyplot.subplot(2, 1, 2) bpplt.pdf(tau, np.linspace(1e-6, 0.08, num=100), color='k', name=r'\tau') bpplt.pyplot.tight_layout() bpplt.pyplot.show()
わーい。何かできたあ。
変分ベイズ法で何かをしているのですが、ちょっと解説出来るほどには理解できていない。機械学習で使う前にベイズ統計学を勉強することにします。
WEBだとこれが易しそう。
http://logics-of-blue.com/%E3%83%99%E3%82%A4%E3%82%BA%E7%B5%B1%E8%A8%88%E5%AD%A6%E5%9F%BA%E7%A4%8E/
本も買った。