EMアルゴリズム書いてみた
と言ってもsyou6162せんせーの奴*1をpythonに移植しただけですが。
ソース
結果例
[-5.1171650273569842, 5.1013677734361016]
[0.98137153837597135, 16.603663427032927]
[0.29998470787211945, 0.70001529212788061]
元のが
> mu
[1] -5.071632 5.132440
> sigma
[1] 0.9019544 16.1150782
> pi
[1] 0.2999747 0.7000253
と出てるのでまあ近いかなぁと。
移植にあたって、行列計算がちょっと面倒だったのと、pythonで密度関数(dnorm)が見当たらないのと、pythonでa=1とやると整数型で扱われるのが引っかかった。scipyとかmapとか併用すればもう少し綺麗なソースになるよなぁ。