Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

ベイジアンネットワーク 条件付き確率が正しく推定されない

解決したいこと

マルチポストです、急用のためご容赦ください。。。
https://teratail.com/questions/2rtcn89nwlbwih

pythonのライブラリ「pgmpy」を使いベイジアンネットワークを構築しているが、条件付き確率(表)の値が正しく推定されない。

発生している問題・エラー

プログラム自体は回る状況だが、推定された条件付き確率の値がすべて同じ値で算出される。
image.png
親ノード、子ノードの各変数名は正しく反映できているので、なぜ条件付き確率だけ算出できていないのかが不明。

該当するソースコード

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

1Answer

Your answer might help someone💌