📄 mix.m
字号:
function [Z] = mix(x,k,iterations);% Simple function to do EM for a mixture of Gaussians.% by Carl Edward Rasmussen, 2006-01-18.D = 2;% Initialise parametersn = length(x); % number of observationsp = ones(1,k)/k; % mixing proportionsmu = randn(D,k); % meansfor i=1:k s2(1:D,1:D,i) = -10*diag(log(rand(D,1))); % variancesendZ = [];for t=1:iterations % Do the E-step: figure(1) hold off plot(x(:,1),x(:,2),'+'); hold on for i=1:k draw_ellipse(mu(:,i),s2(:,:,i),'r'); end for i=1:k di = x-repmat(mu(:,i)',n,1); Q(:,i)=p(i)*exp(-sum(di'.*(inv(s2(:,:,i))*di'),1)/2)'/sqrt(det(s2(:,:,i))); end Z(t) = sum(log(sum(Q/(2*pi),2))); figure(2) plot(Z)% waitforbuttonpress fprintf('Iteration: %i log likelihood: %4.3e\r', t, Z(t)); Q = Q ./ (sum(Q,2)*ones(1,k)); % Normalise % Do the M-step: for i=1:k di = x-repmat(mu(:,i)',n,1); mu(:,i) = sum(x.*repmat(Q(:,i),1,D),1)'/sum(Q(:,i))'; di = x-repmat(mu(:,i)',n,1); s2(:,:,i)=(di'*(di.*repmat(Q(:,i),1,D)))/sum(Q(:,i)); end p = sum(Q,1)/sum(sum(Q));end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -