我想在 Matlab 中计算下面的公式(E-step of EM for Multinomial Mixture Model),
g 和 θ 是矩阵,θ 和 λ 具有以下约束:
但是 m 的计数超过 1593,并且当计算 θ 的乘积时,数字变得非常小,Matlab 将其保存为零。任何人都可以简化 g 公式或使用其他技巧来解决这个问题?
更新:
数据: data.txt (下载后,将文件扩展名更改为“mat”)
代码:
function EM(data)
%% initialize
K=2;
[N M]=size(data);
g=zeros(N,K);
landa=ones(K,1) .* 0.5;
theta = rand(M, K);
theta = bsxfun(@rdivide, theta, sum(theta,1))';
%% EM
for i=1:10
%% E Step
for n=1:N
normalize=0;
for k=1:K
g(n,k)=landa(k) * prod(theta(k,:) .^ data(n,:));
normalize=normalize + landa(k) * prod(theta(k,:) .^ data(n,:));
end
g(n,:)=g(n,:) ./ normalize;
end
%% M Step
for k=1:K
landa(k)=sum(g(:,k)) / N ;
for m=1:M
theta(k,m)=(sum(g(:,k) .* data(:,m)) + 1) / (sum(g(:,k) .* sum(data,2)) + M);
end
end
end
结尾