YutaroOgawa / causal_book

書籍「作りながら学ぶ! PyTorchによる因果推論・因果探索」の実装コードのリポジトリです
MIT License
113 stars 32 forks source link

P150,151のBICについて質問させてください。【訂正:BICの良さの大小が逆になっています】 #30

Open KENJI-JIN opened 3 years ago

KENJI-JIN commented 3 years ago

pgmpyのBIC計算が BICm=lm(Θm|X)-0.5km(logN) となっており、手計算したBICに-0.5かけたものになっている と書かれています。

手計算の式 image ではいいモデルほど対数尤度が大きくなる(?)ので、小さいほどいいモデルとなりそうな気がします。 (私の対数尤度の理解が間違っているかもしれません。) ↓のサイトでは上記の式で小さいほうがいいモデルとの表記があります。 https://www.jmp.com/support/help/ja/14-2/flm-statistical-details-15.shtml

ですので、上記の式に-0.5をかけた BICm=lm(Θm|X)-0.5km(logN) は大きいほどいいモデルとなりそうな気がしますが、 本には小さな値ほどいいモデルなので、 という記載があります。

お手数ですが、解説いただけないでしょうか?

YutaroOgawa commented 3 years ago

@KENJI-JIN さま

ご指摘いただき、ありがとうございます。 私の解説が逆向きになっていました。 大変申し訳ございません。

以下訂正し、本Issueに誤植ラベルを用意し、他の読者の皆様の参考にさせてください。

ーーーーーーーー p. 151 中段 ーーーーーーーー (訂正前)  先ほどの正解のDAGでのBICが-21.6 であったのに対して、-21.4 と大きな値になりました。 ここで使用しているpgmpyのBICの定義では、より小さな値になるほど(負の方向に大きな 値になるほど)良いモデルであるため、正解ではないDAGでは、正解のDAGに比べてBIC の値が悪いことが分かります。 ↓ (訂正後)  先ほどの正解のDAGでのBICが-21.6 であったのに対して、-21.4 と大きな値になりました。 ここで使用しているpgmpyのBICの定義では、より大きな値になるほど(負の方向に小さな 値になるほど)良いモデルであるため、今回はたまたま正解ではないDAGの方が、 値が良くなっています(データ数が少ないことが主たる原因と思われます)。

※7_2_bayesian_network_bic.ipynbのセル3でデータ数を増やし、

num_data = 10 を num_data = 100などにすると、誤ったモデルでは負の方向に大きなBICとなり、悪いモデルになることを確認できます。

ーーーーーーーーー 多々、クリティカルな間違えが多く、ご迷惑をおかけしております。 大変申し訳ございません。

気になった点については、このようにどんどんご指摘いただけると非常に助かります。 お手数をおかけしますが、今後ともどうぞよろしくお願いいたします。

KENJI-JIN commented 3 years ago

ご回答ありがとうございます。上記承知しました。 今後とも疑問点がありましたら質問させていただきますのでよろしくお願いいたします。

YutaroOgawa commented 3 years ago

@KENJI-JIN さま

上記少し、話と私の表現がややこしくて大変申し訳ございません。

num_data = 10 を num_data = 100などにすると、誤ったモデルでは負の方向に大きなBICとなり、悪いモデルになることを確認できます。

を丁寧に記述すると、 ーーー pgmpyのBICの定義は、「対数尤度-0.5kln(n)」となっており、一般的な対数尤度に-0.5がかけ算されています。 その結果、pgmpyにおいて当てはまりの良いモデルとは、pgmpy-BICの値が大きなモデルとなります。

逆に誤ったモデルでは負の方向に(絶対値が)大きなBICとなり、すなわち、pgmpy-BICの値が小さな値になります。 ーーー

たくさん、誠にありがとうございます。 言葉に尽くせぬほどに、感謝しております。

今後とも、遠慮なくどんどんとご質問、ご指摘をいただければ幸いです。

どうぞ宜しくお願い致します。