読者です 読者をやめる 読者になる 読者になる

人工知能に関する断創録

人工知能、認知科学、心理学、ロボティクス、生物学などに興味を持っています。このブログでは人工知能のさまざまな分野について調査したことをまとめています。最近は、機械学習・Deep Learningに関する記事が多いです。



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を学習したり、構造の学習もできるようです。