我尝试编写一个算法,从混合多元正态分布中确定每个类的 $\mu$, $\sigma$,$\pi$。
我部分完成了算法,当我将随机猜测值($\mu$,$\sigma$,$\pi$)设置为接近真实值时,它会起作用。但是当我将值设置为远离真实值时,算法不会收敛。sigma 为 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;