function [Cen,cinv,ppri]=mltrain_uni(Pr,Tr) % Usage: [Cen,cinv,ppri]=mltrain_uni(Pr,Tr) % ML- Maximum Likelihood Classifier training program % Modified from ML.m % Pr: training set feature vector K by N % Tr: training set target vector K by S % [1 0 ... 0] is class 1, [0 ... 0 1] is class S % S: number of classes % N: feature vector dimension % K: # of feature vectors in training set % Cen: an array of Mean vector of each class % cinv: an array of inverse of covariance matrix of each class % ppri: a priori probability of each class % Pr is K x N, Tr is K x S [K,N]=size(Pr); [tmp,S]=size(Tr); for ns=1:S, % for each class idx=find(Tr(:,ns)==1); % indices of class ns Nc(ns)=length(idx); % # of training samples in class ns F=Pr(idx,:); % feature vectors Nc(ns) x N if Nc(ns)> 1, Cen{ns}=mean(F)'; % N x 1 mean vector of class ns t1=F'-Cen{ns}*ones(1,Nc(ns)); % subtract the mean vector N x Nc(ns) C=(1/Nc(ns))*t1*t1'; % covariance matrix of class ns cinv{ns}=pinv(C); % inverse of covariance matrix, use pseudo inverse % incase C is singular elseif Nc(ns)==1; % singular case Cen{ns}=F'; cinv{ns}=eye(N); end end ppri=Nc/K; % prior probability vector