問題タブ [mixture-model]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
314 参照

matlab - gmdistribution.fit ビン サイズの変更

私は現在、ガウス混合モデルを使用して、matlab にあるデータに適合させています。gmdistribution.fit 関数を使用していますが、フィットに関して質問があります。

次のコードは、PDF の生成に使用されます。

この例は、私の最悪のデータ セットの 1 つに当てはまります。

写真

つまり、私の 3 次 GMM には標準偏差 (SD) が大きい 2 つのモードがありますが、3 次モードはピークが高く、SD が小さいです。

ECDFhist 関数でビンのサイズを変更できるのと同じように、gmdist.fit(options) のオプションを変更する方法など、ビンの幅を増やす (ビンの数を減らす) 方法はありますか?

どんな助けでも大歓迎です!!

どうもありがとう、M

0 投票する
1 に答える
1496 参照

python - Python - Curve_fit はガウスの合計に適合していないようです

ここで、任意の数のガウス分布の合計を返す関数を定義しました。

次に、指定されたパラメーター セットの x および y データを生成し、curve_fit に、生成セットに一致する初期パラメーターでこのデータを適合させるように依頼します。単一ガウスと複数ガウスの両方を含むさまざまなセットでこれを試しました。

解ですでに適合を開始していると思われるにもかかわらず、すべてのパラメータ セットが非適合を示します。(上記の単一ガウス):

関数自体は正常に動作することを知っています。関数を使用してプロットし、その有効性を検証したからです。

0 投票する
1 に答える
980 参照

algorithm - Matlab: gmdistribution を使用しないガウス混合モデルの EM

特定のデータセットで 4 つのコンポーネントを使用してガウス混合モデルをトレーニングする必要があります。このセットは 3 次元で、300 個のサンプルが含まれています。

問題は、 であるため、対数尤度を使用して収束を確認できないことです-Inf。これは、責任の式でガウスを評価する際にゼロ値が丸められた結果です (E ステップを参照)。

私の EM アルゴリズムの実装がこれまでのところ正しいかどうか教えてもらえますか? そして、丸められたゼロ値の問題をどのように説明するのでしょうか?

これが EM アルゴリズムの私の実装です (1 回の反復):

最初に、kmeans を使用してコンポーネントの平均と共分散を初期化しました。

E-ステップでは、次の式を使用して責任を計算しています 責任

対応するコードは次のとおりです。

Nk(k)は、M ステップで指定された式を使用して計算されます。

Mステップ

現在の責任を使用してパラメータを再推定する

収束を確認するために、次の式を使用して対数尤度が計算されます。 対数尤度

loglikelihoodこれは、E ステップの-Inf一部のgm(k,i)値がゼロであるためです。したがって、対数は明らかに負の無限大です。

どうすればこの問題を解決できますか?

Matlabの精度を上げることで解決できますか?

または、私の実装に何か問題がありますか?

0 投票する
2 に答える
83 参照

r - mixAK getProfiles バグ?

誰かがここで私をまっすぐにしてくれることを願っています。

ビネットからhttp://www.jstatsoft.org/v59/i12/paper、9ページ...

...ドキュメント化された出力 (9 ページ) が得られるので、これまでのところすべて順調です。次に、被験者ごとに1つのdata.frameを与えることになっています(11ページから)。

それで、それをテストするために...

最初のサブセットを正しく提供します(おそらくより有用なインデックスではなく、id = 2ですが)。

ただし、もう少し深く掘り下げると、少なくとも私にとっては、サブセットが同期していないように見えます. たとえば、次の結果を検査することによって...

ここに表示されるだけで...

前のサブセットの最後のエントリから始まる次のようになります。サブセットの終わりがこぼれ、すべてが少し乱雑になります。

結果をプロットすると、同じ効果が示されます...

...明確な反転を示しています。

どこかで明らかな何かを見逃したに違いない....

0 投票する
1 に答える
9008 参照

algorithm - ガウス混合モデルの EM アルゴリズムの実装

EM アルゴリズムを使用して、特定のデータセットで 4 つのコンポーネントを含むガウス混合モデルをトレーニングしたいと考えています。このセットは 3 次元で、300 個のサンプルが含まれています。

rank(sigma) = 2問題は、EM アルゴリズムの約 6 ラウンド後、共分散行列 sigma が matlab ( 3 ではなく)に従って特異値に近くなることです。これは、ガウス分布を評価する複雑な値のような望ましくない結果につながりますgm(k,i)

さらに、ガウスのログを使用してアンダーフローの問題を説明しました - E-step を参照してください。これが正しいかどうかはわかりませんが、責任 p(w_k | x^(i), theta) の exp を別の場所に持っていく必要があるかどうかはわかりません。

私の EM アルゴリズムの実装がこれまでのところ正しいかどうか教えてもらえますか? そして、特異共分散シグマに近い問題をどのように説明するのでしょうか?

これが EM アルゴリズムの私の実装です。

最初に、kmeans を使用してコンポーネントの平均と共分散を初期化しました。

E-stepでは、次の式を使用して責任を計算しています。

責任

w_k は k ガウス成分です。

x^(i) は単一のデータポイント (標本)

theta は、ガウス混合モデルのパラメータを表します: mu、Sigma、pi。

対応するコードは次のとおりです。

Nk(k)は、M ステップで指定された式を使用して計算され、M ステップで新しい確率を計算するために使用されp(k)ます。

Mステップ

現在の責任を使用してパラメータを再推定する

収束を確認するために、次の式を使用して対数尤度が計算されます。

対数尤度

ガウス混合モデルの EM アルゴリズムの Matlab 実装に何か問題がありますか?


以前のトラブル:

問題は、 であるため、対数尤度を使用して収束を確認できないことです-Inf。これは、責任の式でガウスを評価する際に丸められたゼロ値に起因します (E ステップを参照)。

私の EM アルゴリズムの実装がこれまでのところ正しいかどうか教えてもらえますか? そして、丸められたゼロ値の問題をどのように説明するのでしょうか?

これが EM アルゴリズムの私の実装です。

最初に、kmeans を使用してコンポーネントの平均と共分散を初期化しました。

E-ステップでは、次の式を使用して責任を計算しています 責任

対応するコードは次のとおりです。

Nk(k)は、M ステップで指定された式を使用して計算されます。

Mステップ

現在の責任を使用してパラメータを再推定する

収束を確認するために、次の式を使用して対数尤度が計算されます。 対数尤度

最初のラウンドの後、loglikelihood約 700 です。2 番目のラウンドでは、E ステップの-Inf一部のgm(k,i)値がゼロであるためです。したがって、対数は明らかに負の無限大です。

ゼロの値もゼロにsumGM等しいため、行列 muand内のすべての NaN エントリにつながります。sigma

どうすればこの問題を解決できますか? 私の実装に何か問題があるかどうか教えてもらえますか? 何とかMatlabの精度を上げることで解決できるでしょうか?


編集:

gm(k,i) の exp() 項のスケーリングを追加しました。残念ながら、これはあまり役に立ちません。さらに数ラウンド後、まだアンダーフローの問題が発生します。

さらに、kmeans は、平均が M ステップで計算される次のラウンドとはまったく異なる平均を初期化することに気付きました。

kmeans:

Mステップ後:

次のラウンドでmuはまったく変わりません。ラウンド2と同じままです。

これは gm(k,i) のアンダーフローが原因ではないでしょうか? 私のスケーリングの実装が間違っているか、アルゴリズムの実装全体がどこかで間違っています:(


編集2

4 ラウンド後NaN、値を取得し、gm をさらに詳しく調べました。1 つのサンプルのみ (および 0.5 係数なし) を見るgmと、すべてのコンポーネントでゼロになります。matlab に入れgm(:,1) = [0 0 0 0]ます。これにより、sumGM はゼロに等しくなります -> NaN は、I がゼロで除算されるためです。で詳細を説明しました

まず第一に、手段は変更されていないようで、kmeans の初期化と比較して完全に異なります。

そして、すべてのサンプル (ここのような最初のサンプルだけでなく) の出力によると、1 つのガウス成分のみに対応しますgm(:,1)。サンプルはすべてのガウス成分に「部分的に分散」されるべきではありませんか?


EDIT3:

したがって、 mu が変更されない問題は、M-step: の最初の行にあると思いますmu = zeros(K,3);

アンダーフローの問題を説明するために、現在、ガウスのログを使用しようとしています:

新しい問題は、共分散行列シグマです。Matlab の主張: 警告: 行列が特異値に近いか、スケーリングが不適切です。結果が不正確になる場合があります。

6 ラウンド後、gm (ガウス分布) の虚数を取得します。

更新された E-Step は次のようになります。

0 投票する
0 に答える
73 参照

algorithm - Matlab を使用したガウス混合モデルの EM アルゴリズムの実装

EM アルゴリズムを使用して、特定のデータセットで 4 つのコンポーネントを含むガウス混合モデルをトレーニングしたいと考えています。このセットは 3 次元で、300 個のサンプルが含まれています。

rank(sigma) = 2問題は、EM アルゴリズムの約 6 ラウンド後、共分散行列 sigma が matlab ( 3 ではなく)に従って特異値に近くなることです。これは、ガウス分布を評価する複雑な値のような望ましくない結果につながりますgm(k,i)

さらに、ガウスのログを使用してアンダーフローの問題を説明しました - E-step を参照してください。これが正しいかどうかはわかりませんが、責任 p(w_k | x^(i), theta) の exp を別の場所に持っていく必要があるかどうかはわかりません。

私の EM アルゴリズムの実装がこれまでのところ正しいかどうか教えてもらえますか? そして、特異共分散シグマに近い問題をどのように説明するのでしょうか?

これが EM アルゴリズムの私の実装です。

最初に、kmeans を使用してコンポーネントの平均と共分散を初期化しました。

E-stepでは、次の式を使用して責任を計算しています。

責任

w_k は k ガウス成分です。

x^(i) は単一のデータポイント (標本)

theta は、ガウス混合モデルのパラメータを表します: mu、Sigma、pi。

対応するコードは次のとおりです。

Nk(k)は、M ステップで指定された式を使用して計算され、M ステップで新しい確率を計算するために使用されp(k)ます。

Mステップ

現在の責任を使用してパラメータを再推定する

収束を確認するために、次の式を使用して対数尤度が計算されます。

対数尤度

ガウス混合モデルの EM アルゴリズムの Matlab 実装に何か問題がありますか?

0 投票する
1 に答える
1619 参照

python - python GMMHMMの説明

私はガウス混合うーんについて読んでいて、それを実装したいと思っています。hmmlearn パッケージを使用していますが、scikit-learn から廃止されたことを知っています。ドキュメントでは、GMMHMM コンストラクターに次のものが必要であると記載されています。

私が進めるべきだと私が理解している方法は次のとおりです。1)最初にscikit-learnを使用してGMMトレーニングを実行します2)hmmをトレーニングするためにGMMオブジェクトをGMMHMMコンストラクターに渡します。

これは正しいですか、何か不足していますか?

ありがとう。