% implements Classify, return the predicted class for each row (we'll call each row x) in data % by computing the posterior probability that x is in class 1 vs. class 2 then % these posterior probabilities are compared using the log odds. function [predictions] = Classify(data, m1, m2, S1, S2, pc1, pc2) [num_rows, d] = size(data); % calculate P(x|C) * P(C) for both classes % pxC1 = 1/(power(2*pi, d/2) * power(det(S1), 1/2)) * exp(-1/2 * (data-m1) * inv(S1) * (data-m1)'); % pxC2 = 1/(power(2*pi, d/2) * power(det(S2), 1/2)) * exp(-1/2 * (data-m2) * inv(S2) * (data-m2)'); pxC1 = zeros(num_rows,1); pxC2 = zeros(num_rows,1); for i = 1:num_rows x = data(i,:); pxC1(i) = 1/(power(2*pi, d/2) * power(det(S1), 1/2)) * exp(-1/2 * (x-m1) * inv(S1) * (x-m1)'); pxC2(i) = 1/(power(2*pi, d/2) * power(det(S2), 1/2)) * exp(-1/2 * (x-m2) * inv(S2) * (x-m2)'); end % pxC1 = mvnpdf(data, m1, S1); % pxC2 = mvnpdf(data, m2, S2); % P(C|x) = (P(x|C) * P(C)) / common factor pC1x = pxC1 * pc1; pC2x = pxC2 * pc2; % calculate log odds, if > 0 then data(i) belongs to class c1, else, c2 log_odds = log(pC1x) - log(pC2x); % get predictions from log odds calculation predictions = zeros(num_rows,1); for i = 1:num_rows if log_odds(i) > 0 predictions(i) = 1; else predictions(i) = 2; end end end % Function end