📄 partial_emsteps.m
字号:
%%%% Perform partial EM steps with initial values %%%%%
%%%% for a' & theta calculated from candidate_selection %%%%%
%%%% %%%%%
%%%%%% Kostas Blekas, 19 Dec. 2001 %%%%%
%%%%%% please contact at kblekas@cc.uoi.gr in case of problems %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [new_a,new_mpr,parL] = partial_EMsteps(mpr_init,fi,thesh,a,n,L,W,stopem,maxstep,new_seq,alpha)
for j=1:n
for t=1:W
sp(t) = mpr_init(thesh(j,t),t);
end
new_fi(j) = prod(sp);
end
parL_new = sum(log((1-a) .* fi + a .* new_fi));
parL = 0.01 * parL_new;
step_em = 1;
c_mot = ones(L,W);
while ( (abs(parL_new/parL - 1.000) > stopem) & (step_em<maxstep) )
parL = parL_new;
Znew = (new_fi .* a) ./ (fi .* (1-a) + new_fi .*a);
a = sum(Znew)/n;
for i=1:W
for j=1:L
c_mot(j,i) = sum(Znew(find(new_seq(:,i)==alpha(j))));
end
mpr_init(:,i) = c_mot(:,i) ./ sum((c_mot(:,i)));
end
for i=1:n
for j=1:W
sp(j)=mpr_init(thesh(i,j),j);
end
new_fi(i) = prod(sp);
end
parL_new = sum(log(fi .* (1-a) + new_fi .* a));
step_em = step_em + 1;
end
fprintf('Running partial_EM steps and obtain par_LogL = %f) \n',parL_new);
new_a = a;
parL = parL_new;
new_mpr = mpr_init;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -