• Pythonで実装されたベイジアンネットワーク用のライブラリ

  • 公式ページ

  • 下記でベイジアンネットワークのグラフが作成できる(ノードとエッジは空)

from pgmpy.models import BayesianNetwork
G = BayesianNetwork()
  • ノード、エッジを追加するには、add_nodeとかadd_edgeとかを使用する。
  • 条件付き確率分布(CPD:conditional probability distribution)を追加することも可能
from pgmpy.models import BayesianNetwork
from pgmpy.factors.discrete.CPD import TabularCPD
student = BayesianNetwork([('diff', 'grades'), ('aptitude', 'grades')])
grades_cpd = TabularCPD('grades', 3, [[0.1,0.1,0.1,0.1,0.1,0.1],
...                                       [0.1,0.1,0.1,0.1,0.1,0.1],
...                                       [0.8,0.8,0.8,0.8,0.8,0.8]],
...                         evidence=['diff', 'aptitude'], evidence_card=[2, 3],
...                         state_names={'grades': ['gradeA', 'gradeB', 'gradeC'],
...                                      'diff': ['easy', 'hard'],
...                                      'aptitude': ['low', 'medium', 'high']})
student.add_cpds(grades_cpd)

上記のコードはこんな感じの条件付き確率を追加した。

diff:easyeasyeasyhardhardhard
aptitude:lowmediumhighlowmediumhigh
gradeA0.10.10.10.10.10.1
gradeB0.10.10.10.10.10.1
gradeC0.80.80.80.80.80.8
  • evidence_cardはevidenceに対応しており、各evidenceの種別数をリストで記載している。