2017-07-05 21 views
2

2つの正規分布の線形結合があるとしましょう。私は結果をmultimodal distributionと呼ぶと思います。マルチモーダル分布のフィッティング

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.mlab as mlab 

ls = np.linspace(0, 60, 1000) 

distribution = mlab.normpdf(ls, 0, 5) + mlab.normpdf(ls, 20, 10) 
distribution = (distribution * 1000).astype(int) 
distribution = distribution/distribution.sum() 

plt.plot(ls, distribution) 

enter image description here

あなたが見ることができるように、我々はパラメータ(mu1 = 0, s1 = 5)(mu2 = 20, s2 = 10)を持つ2つの正規分布の線形結合をしています。しかしもちろん、私たちは通常これらのパラメータを事前に知らない。

これらのパラメータ(musとsigmas)をどのように見積もり、適合させることができるかを知りたいと思います。私はこれを可能にする方法があると確信していますが、私はまだ見つけることができませんでした。

+1

何あなたがフィットさせたいパラメータですか?どのような形でデータが生まれますか? (サンプル値、ヒストグラムなど) –

+0

サンプルx1、x2、x3、.... xn? –

答えて

2

あなたが記述する問題は、特殊ケースのGaussian Mixture modelです。これらのパラメータを推定するには、いくつかのサンプルが必要です。サンプルがなくてもカーブが与えられていれば、カーブに基づいていくつかのサンプルを作成できます。次に、Expectation–maximization algorithmを使用してパラメータを見積もることができます。 Scikit-learnには、それを可能にする方法があります:sklearn.mixture.GaussianMixture。あなたのサンプルを提供するだけで、コンポーネントの数(n_components)はあなたのケースでは2であり、あなたのケースではfullとなる共分散型があります。共分散行列に関する事前の仮定がないからです。

+0

ああ!私はすでにそれを知っているべきだと分かっていた!私は最尤法を探していましたが、どういうわけか私はそれを見落としました!ありがとう、これは動作するはずです:) – displayname

+0

ちょっと:)私は私の元のものへのフォローアップの質問を持っています。たぶんあなたは[見てみたいです](https://stats.stackexchange.com/questions/289490/how-can-i-model-such-a-distribution-consisting-of-a-mix-of-different- distributio)それで? – displayname

1

Expectation Maximizationアルゴリズムを使用します。

これは、混合成分のモデルにフィットすることを可能にする反復手法です。 scikit-学ぶには非常に便利な実装があります:GaussianMixture

私はそれは大変な作業にこのアルゴリズムのためのデータを構造化する方法を見つけ出すことが見いださので、私はあなたのためのサンプルを設定します。 https://nbviewer.jupyter.org/gist/lhk/e566e2d6b67992eca062f9d96e2a14a2

+0

[こちらを手伝ってください]可能性はありますか(https://stats.stackexchange.com/questions/289490/how-can-i-model-such-a-distribution-consisting-of-a-mix-of -different-distributio)も同様ですか?問題は、これからのフォローアップです。私は "国境"の事例は考慮しなかった。 – displayname