2023-11-10 03:29:17 +00:00
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
% 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
|
2023-11-15 15:53:18 +00:00
|
|
|
% pi - vector of mixing coefficients
|
2023-11-10 03:29:17 +00:00
|
|
|
% m - cluster means
|
|
|
|
% S - cluster covariance matrices
|
|
|
|
% k - the number of clusters
|
2023-11-15 15:53:18 +00:00
|
|
|
% Output: h - a nxk matrix, the expectation of the hidden variable z given the data set and distribution params
|
2023-11-10 03:29:17 +00:00
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
2023-11-15 15:53:18 +00:00
|
|
|
function [h] = E_step(x, h, pi, m, S, k)
|
2023-11-10 03:29:17 +00:00
|
|
|
|
2023-11-12 17:42:19 +00:00
|
|
|
[num_data, ~] = size(x);
|
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
% TODO: perform E-step of EM algorithm
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
2023-11-15 15:53:18 +00:00
|
|
|
parts = zeros(num_data, k);
|
|
|
|
|
|
|
|
for j = 1:k
|
|
|
|
parts(:, j) = pi(j) * mvnpdf(x, m(j, :), S(:, :, j));
|
|
|
|
end
|
|
|
|
|
|
|
|
s = sum(parts);
|
|
|
|
for i = 1:num_data
|
|
|
|
h(i, :) = parts(i, :) ./ s;
|
|
|
|
end
|
2023-11-10 03:29:17 +00:00
|
|
|
|
|
|
|
end
|