48 lines
No EOL
1.4 KiB
Matlab
48 lines
No EOL
1.4 KiB
Matlab
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% Name: E_step.m
|
|
% Input: x - a nxd matrix (nx3 if using RGB)
|
|
% Q - vector of values from the complete data log-likelihood function
|
|
% h - a nxk matrix, the expectation of the hidden variable z given the data set and distribution params
|
|
% pi - vector of mixing coefficients
|
|
% m - cluster means
|
|
% S - cluster covariance matrices
|
|
% k - the number of clusters
|
|
% Output: h - a nxk matrix, the expectation of the hidden variable z given the data set and distribution params
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
function [h] = E_step(x, h, pi, m, S, k)
|
|
|
|
[num_data, ~] = size(x);
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% perform E-step of EM algorithm
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
parts = zeros(num_data, k);
|
|
|
|
for i = 1:k
|
|
parts(:, i) = pi(i) * mvnpdf(x, m(i, :), S(:, :, i));
|
|
end
|
|
|
|
s = sum(parts);
|
|
for j = 1:num_data
|
|
h(j, :) = parts(j, :) ./ s;
|
|
end
|
|
|
|
|
|
% parts = zeros(k);
|
|
%
|
|
% denom = 0;
|
|
% for i = 1:k
|
|
% N = mvnpdf(x, m(i, :), S(:, :, i));
|
|
% for j = 1:num_data
|
|
% parts(i) = parts(i) + pi(i) * N(j);
|
|
% end
|
|
% denom = denom + parts(i);
|
|
% end
|
|
%
|
|
% for i = 1:k
|
|
% h(:, i) = parts(i) ./ denom;
|
|
% end
|
|
|
|
|
|
|
|
end |