def K2(bn, data, ed=None):
"""
K2 is bayesian posterior probability of structure given the data,
where N'ijk = 1.
"""
counts_dict = mle_fast(bn, data, counts=True, np=True)
a_ijk = []
k2 = 1
for rv, value in counts_dict.items():
nijk = value['cpt']
nijk_prime = 1
k2 *= gamma(nijk+nijk_prime)/gamma(nijk_prime)
nij_prime = nijk_prime*(len(cpt)/bn.card(rv))
nij = np.mean(nijk.reshape(-1, bn.card(rv)), axis=1) # sum along parents
k2 *= gamma(nij_prime) / gamma(nij+nij_prime)
return k2
评论列表
文章目录