YutaroOgawa / causal_book

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

第6章LiNGAM 6_3_lingamコードについて #35

Open booskabooboo opened 2 years ago

booskabooboo commented 2 years ago

LiNGAMは非ガウスを前提とするとありますが、コード上のノイズをガウスN(0, 1)としても、求められるB_estも変わらず、よって構造方程式係数推定にも影響がありません。これはどのように理解したらよいのですか?

YutaroOgawa commented 2 years ago

@booskabooboo さま

ご質問いただきありがとうございます。

LiNGAMは独立成分分析(ICA:Independent Component Analysis)をベースとしており、 ICAに非ガウス性が求められます。

以下、LiNGAMの提唱者、清水先生のスライドのp. 67 - 68 あたりがイメージがつきやすいです。 http://www.ar.sanken.osaka-u.ac.jp/~sshimizu/papers/BSJ2012_Tutorial_final_web.pdf

今回それでもガウスノイズでうまく推定できた理由は、大変申し訳ございません。 私には分からないのです。

可能性としては、 ・ノイズが小さすぎた もしくは 大きすぎた ・今回の構造が本当にたまたまうまくいっただけ

でしょうか。。。

回答になっておらず、大変申し訳ございませんが、どうぞよろしくお願い致します。

booskabooboo commented 2 years ago

早速のご回答ありがとうございました。 それぞれのノイズのσを大きく異なるものとしてもやはり推定できてしまいました。 ICAの計算論理をちらっと見るとガウス性だと識別できないはずなのに、できてしまっている。 理由はあると思うのですが不思議ですね。

YutaroOgawa commented 2 years ago

@booskabooboo さま

早速のご対応をありがとうございます。

・プログラムにバグがないか確認する(ノイズを特性を変えたはずだが、実は反映されていなかった等)

その他、 ・異なる構造方程式で試してみる

がやれることとしてはありますが、お手間をかけますね。

私も本状況では思い当たる節がなく、 ずばりと回答できず、大変申し訳ございません。