混合多変量正規分布から各クラスの$\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;