ベイジアンネットワーク 条件付き確率が正しく推定されない
解決したいこと
マルチポストです、急用のためご容赦ください。。。
https://teratail.com/questions/2rtcn89nwlbwih
pythonのライブラリ「pgmpy」を使いベイジアンネットワークを構築しているが、条件付き確率(表)の値が正しく推定されない。
発生している問題・エラー
プログラム自体は回る状況だが、推定された条件付き確率の値がすべて同じ値で算出される。
親ノード、子ノードの各変数名は正しく反映できているので、なぜ条件付き確率だけ算出できていないのかが不明。
該当するソースコード
from pgmpy.models import BayesianModel
df = pd.read_csv(filename+'_2.csv', encoding="UTF-8")
model = BayesianModel([('直近OD量レベル','直後OD量レベル'),('時間帯ダミー','直後OD量レベル'),('曜日ダミー','直後OD量レベル'),('①自OD経路時間(ダミー)','直後OD量レベル'), \
('②転換OD経路時間(ダミー)','直後OD量レベル'),('③転換OD経路時間(ダミー)','直後OD量レベル'),('①自OD工事ダミー','直後OD量レベル'),('②転換OD工事ダミー','直後OD量レベル'),('③転換OD工事ダミー','直後OD量レベル')])
model.fit(df) #条件は省略。標準ではオーバーフィットに特に注意
cpds = model.get_cpds()
# 以下、CSV、TXTに条件付き確率表を吐き出す
a=str(model.get_cpds('直後OD量レベル'))
a=a.replace('-', '')
a=a.replace('+', '')
a=a.split('|')
del a[0]
# a=a.remove('\n')
outlist=[]
templist=[]
for cpd in a:
if cpd=='\n\n':
outlist.append(templist)
templist=[]
else:
templist.append(cpd)
with open(filename+"cpd.csv", "w", newline="") as f:
writer = csv.writer(f)
for cpd in outlist:
writer.writerow(cpd)
with open(filename+"cpd.txt", "w", newline="") as f:
writer = csv.writer(f)
for cpd in outlist:
writer.writerow(cpd)
自分で試したこと
データフレームのCSVファイルを新しく作り直したら、正しく算出されるときもあったので、おそらくCSVの書式などの問題かとも思いますが、イマイチこれといった原因が掴めずです。
0 likes