flda.m 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. function v=flda(varargin)
  2. % v = flda(G1,G2)
  3. % v = flda(mean1,mean2,cov1,cov2,n1,n2)
  4. %
  5. % v is fisher's linear discriminant between the two "groups" of data
  6. % Using syntax 1
  7. % G1 is an n x d matrix
  8. % G2 is an m x d matrix
  9. % Using syntax 2
  10. % Group1 has mean mu1, covariance cov1, and n1 number of samples
  11. % Group2 has mean mu2, covariance cov2, and n2 number of samples
  12. % v is a d x 1 vector
  13. %
  14. % http://www.csd.uwo.ca/~olga/Courses//CS434a_541a//Lecture8.pdf
  15. if nargin==2
  16. X=varargin{1};
  17. Y=varargin{2};
  18. [x_n, xdim]=size(X);
  19. [y_n, ydim]=size(Y);
  20. if xdim~=ydim
  21. error
  22. end
  23. muX=nanmean(X,1);
  24. muY=nanmean(Y,1);
  25. nX=X-repmat(muX,x_n,1);
  26. nY=Y-repmat(muY,y_n,1);
  27. nX(isnan(nX))=0;
  28. nY(isnan(nY))=0;
  29. S1 = nX'*nX; % This is an estimate of the covariance matrix -> divide by x_n to get COV(X)
  30. S2 = nY'*nY;
  31. elseif nargin==6
  32. muX=varargin{1};
  33. muY=varargin{2};
  34. cx=varargin{3};
  35. cy=varargin{4};
  36. nx=varargin{5};
  37. ny=varargin{6};
  38. S1 = cx*(nx-1);
  39. S2 = cy*(ny-1);
  40. end
  41. Sw=S1+S2;
  42. % Solve eigenproblem Sb*V = Lambda*Sw*V
  43. v=Sw\(muX-muY)';