2

混合多変量正規分布から各クラスの$\mu $、$ \ sigma $、$ \pi$を決定するアルゴリズムを作成しようとしています。

アルゴリズムを部分的に終了します。ランダムな推測値($ \ mu $、$ \ sigma $、$ \ pi $)を実際の値の近くに設定すると機能します。しかし、実際の値から遠く離れた値を設定すると、アルゴリズムが収束しません。シグマは0$(2.30760684053766e-24 2.30760684053766e-24)$になります。

問題は共分散計算だと思いますが、これが正しい方法かどうかはわかりません。私はこれをウィキペディアで見つけましたここに画像の説明を入力してください。私のアルゴリズムをチェックしていただければ幸いです。特に共分散部分。

良い一日を、ありがとう、

2 mixture gauss
size x  = [400, 2] (400 point 2 dimension gauss)
mu = 2 , 2 (1 row = first gauss mu, 2 row = second gauss mu)

    for i = 1 : k
        gaussEvaluation(i,:) = pInit(i) * mvnpdf(x,muInit(i,:), sigmaInit(i, :) * eye(d));
        gaussEvaluationSum = sum(gaussEvaluation(i, :));

        %mu calculation
        for j = 1 : d
            mu(i, j) = sum(gaussEvaluation(i, :) * x(:, j)) / gaussEvaluationSum;
        end
       %sigma calculation methode 1
       %for j = 1 : n 
        %    v = (x(j, :) - muNew(i, :));
        %    sigmaNew(i) = sigmaNew(i) + gaussEvaluation(i,j) * (v * v');
        %end
        %sigmaNew(i) = sigmaNew(i) / gaussEvaluationSum;

        %sigma calculation methode 2
        sub = bsxfun(@minus, x, mu(i,:));
        sigma(i,:) = sum(gaussEvaluation(i,:) * (sub .* sub)) / gaussEvaluationSum;

        %p calculation

        p(i) = gaussEvaluationSum / n;
4

1 に答える 1

2

2つのポイント:ガウス混合EMを正しく実装した場合でもこれを観察できますが、あなたの場合、コードは正しくないようです。

まず、これは、ガウス分布の混合をフィッティングするときに対処しなければならない問題です。混合物の1つの成分が単一の点に崩壊し、その結果、成分の平均がその点になり、分散が0になる場合があります。これは「特異点」として知られています。したがって、可能性も無限大になります。

このデッキのスライド42を確認してください:http ://www.cs.ubbcluj.ro/~csatol/gep_tan/Bishop-CUED-2006.pdf

評価している尤度関数は対数凹関数ではないため、EMアルゴリズムは異なる初期値を持つ同じパラメーターに収束しません。上記のリンクは、パラメーターに前項または正則化項を設定するなど、この過剰適合の問題を回避するためのいくつかの解決策も提供します。また、異なる開始パラメーターを使用して複数回実行し、分散0のコンポーネントの結果を過剰に適合したものとして破棄するか、使用しているコンポーネントの数を減らすことも検討できます。

あなたの場合、あなたの方程式は正しいです。ウィキペディアの共分散更新の計算は、上記のリンクのスライド45の計算と同じです。ただし、2次元空間にいる場合、各コンポーネントの平均は長さ2のベクトルであり、共分散は2x2の行列である必要があります。したがって、平均を格納する2x2行列と、共分散を格納する2x2行列があるため、(2つのコンポーネントの)コードは間違っています。2x2x2のマトリックスである必要があります。

于 2013-03-07T17:38:28.703 に答える