前提
マルチポストです、急用のためご容赦ください。。。
https://qiita.com/ohnomycolapart3/questions/883e11ff0321c11a026f
pythonのライブラリ「pgmpy」を使いベイジアンネットワークを構築しているが、条件付き確率(表)の値が正しく推定されない。
発生している問題・エラーメッセージ
プログラム自体は回る状況だが、推定された条件付き確率の値がすべて同じ値で算出される。
親ノード、子ノードの各変数名は正しく反映できているので、なぜ条件付き確率だけ算出できていないのかが不明。
該当のソースコード
python
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の書式などの問題かとも思いますが、イマイチこれといった原因が掴めずです。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
0 コメント