Info
Cette question est clôturée. Rouvrir pour modifier ou répondre.
I have problem with this code
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
italic rho=0.000001:0.03:3; kappa=1; N_gau=10; N_iteration=1000; serror=0.001; ini_mean=rand(1,10); ini_sigma=rand(1,10); for g=1:10 w_i(g)=(0.1); end ini_W=w_i; for mu= 0.5
X=(2*mu.*(1+kappa).^((mu+1)./2)./kappa.^((mu-1)./2)./exp(mu.*kappa)).* rho.^(mu).*exp(-mu.*(1+kappa).*rho.^2).*besseli(mu-1, 2*mu.*sqrt(kappa.*(kappa+1)).*rho); end
function [Post_old, mean_old,sigma_old,W_old,log_lik_list]=Gaumix_EM(X,N_gau,N_iteration,serror,ini_mean,ini_sigma,ini_W)
%Gaumix_EM: EM Algorithm Applicated to Parameter Estimation for Gaussian Mixture % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % OUTPUT % % % Post_old = Posterior % % % mean_old = estimated means for each gaussian % % % sigma_old = estimated varances for each gaussian % % % W_old = estimated Weights for each gaussian % % % log_lik_list = Likelihood list for each iteration % % % % % % INPUT % % % X = random vector % % % N_gau = number of gaussian % % % N_iteration= number of maxiun iteration % % % serror = iteration stopped under the error % % % ini_mean = initial means of gaussians % % % ini_sigma = initial varances of gaussians % % % ini_W = initial Weights of gaussians % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %2007/3/30 [r,c]=size(X); if r>c X=X'; end
mX=ones(N_gau,1)*X; %[X;X;.....;X], length(X)*N_gau numX=length(X);
% switch nargin % case 3 % % end
mean_old=ini_mean; sigma_old=ini_sigma; W_old=ini_W;
log_lik_list=zeros(1,1000); N=0; % number of processing iteration sqr2pi=sqrt(2*pi); B=zeros(N_gau,numX);
while N<N_iteration N=N+1; for i=1:N_gau B(i,:)=W_old(i)*(1/(sqr2pi*sqrt(sigma_old(i))))*exp(-0.5*(X-mean_old(i)).*(X-mean_old(i))/sigma_old(i)); end
Allgau_B=sum(B); %summation al gaussian, size = 1*length(X)
%%%%%%%%%%%%%%%%%%%%%%% compute loglikelihhod %%%%%%%%%%%%%%%%%%%%%%%%% log_lik_list(N)=sum(log(Allgau_B)); % Likelihood list for each iteration %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Allgau_B=ones(N_gau,1)*Allgau_B; % size = N_gau*length(X) Post_old= B./Allgau_B;
%%%%%%%% update means and stds weights for each gaussian %%%%%%%%%%%%%% W_old=sum(Post_old,2); mean_old=sum(Post_old.*mX,2)./W_old; sigma_old= sum(Post_old.*mX.*mX,2)./W_old-mean_old.*mean_old;
W_old=W_old/numX; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if N>1&log_lik_list(N)<log_lik_list(N-1) fprintf('EM Algorithm Applicated to Parameter Estimation for Gaussian Mixture\n'); fprintf('µo´²!\n'); return; end; if N>1 & log_lik_list(N)-log_lik_list(N-1)<serror fprintf('EM Algorithm Applicated to Parameter Estimation for Gaussian Mixture\n'); str=['number of iteration = ',int2str(N),' \n']; fprintf(str); fprintf('Done. \n'); return; end;
end fprintf('EM Algorithm Applicated to Parameter Estimation for Gaussian Mixture\n'); fprintf('number of maxiun iteration reached \n');
3 commentaires
Jan
le 30 Sep 2013
You forgot to ask a question. How could we guess, what the problem is? Therefore I've closed this question. You can re-open it by adding further details.
Réponses (0)
Cette question est clôturée.
Voir également
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!