OpenBayesの使い方(2)
OpenBayesの使い方(1)の続き。今回はデータからCPTを学習する方法を紹介します。当然ながらSprinklerの元データは手に入らないので前回のBNからCPTの確率値に従ってサンプルデータを1000個生成し、新しく作ったBNのCPTをこの1000個のサンプルデータから学習させてみます。
#coding:utf-8 from OpenBayes import JoinTree from copy import deepcopy from time import time from WaterSprinkler import * # ベイジアンネットからサンプルをN個生成 # 学習用のデータとする N = 1000 # cases = [{'c':0,'s':1,'r':0,'w':1}, {...}, ...] cases = G.Sample(N) # 分布を設定してないベイジアンネットを作成 G2 = deepcopy(G) G2.InitDistributions() ie = JoinTree(G2) # パラメータを学習 t = time() ie.LearnMLParams(cases) print "Learned from %d cases in %1.3f secs" % (N, (time()-t)) # 学習されたパラメータを表示 for v in G2.all_v: print v.distribution, "\n"
まあ解説するまでもなくそのまんまです。学習データが辞書のリストってのが少し特殊な書き方でしょうか。学習されたパラメータは、元のBNのCPTとほぼ同じ値になりました!
学習と推論ができればけっこういろんなことができそうです。OpenBayesでは他にも不完全データからCPTを学習したり、構造の学習もできるようです。