% [sLDA WLDA M WPCA]=mylda(data,class,n)
% this function written by muhammet balcilar
% yildiz technical university computer engineering department
% istanbul turkiye 2011
% this function convert data from its original space to LDA space
% if number of data samples is less than number of diamension, PCA is
% implemented for reducing number of diamension to #samples-1.
% after PCA, LDA is implemented for reducing diamention to n.
% data is consist of M rows(sample size), N cols(dimensions)
% class is consist of M rows(sample size), 1 cols , each element of class
% is shows class number of each data sample
% (class number must be integer 1 to classsize)
% n is the number of outputs data diamensions.(optionally)
% sLDA is consist of M rows(sample size) n cols(new dimensions)
% WPCA is translate matrix which convert to original space to PCA space
% M is the mean vector of training set
% WLDA is the translate matrix which convert to original space to LDA space
% exaple: there are 4 samples which have 5 diamensions.first two samples
% are member of class 1 others are member of class 2.
% Train= [5.6,5.7,5.5,5.7 5.6;
% 5.7,5.3,5.1,5.0 5.2;
% 10.6,9.9,10.4,10.7 10.2;
% 10.7,9.8,9.9,10 10];
% [sLDA WLDA M WPCA]=mylda(Train,Class)
% Test= [4.9 5.5 4.8 5.7 5];
% LDATEST = (Test-M)*WPCA*WLDA
Muhammet (2021). Linear Discriminant Analysis Code (https://www.mathworks.com/matlabcentral/fileexchange/33768-linear-discriminant-analysis-code), MATLAB Central File Exchange. Retrieved .
to make it work. with many classes minor changes needed:
% LDA start
mU=mean(InputData)';% mean of each variable
for i=1:length(ClassLabel) % number of classes
n=[n length(I)]; %-----------------
mK=[mK ort]; % mean of each variables at each class
UU(:,I(j))=InputDataInv(:,I(j))-ort; %each class is mean-centered by its own mean
% UU = InputDataInv but mean centered by:each class is mean-centered by its own mean
%mK = mean of each variables at each class
%mU =mean of each variable
mmK(:,i)=mK(:,i)-mU; % each class means are substracted from variable-means of input-dataset
SB=SB+ n(i)*mmK(:,i)*mmK(:,i)'; % each class means are substracted from variable-means of input-dataset
WLDA=w(:,SortOrder); % number of dimensions in LDA is nClasses-1
@Waleed Maswadeh how many classes u had. Did it work can u help me
works like a charm...........Thanks
Did not run, "not enough input arguments"
how i interpret the output of this step
LDATEST = (Test-M)*WPCA*WLDA
Thanks for the code!!
Thanks alot for the code.
I have 10 classes in handwritten digit recognition case. But this program results in a vector which are not the label of the classes. Please Help
this program runs with multi class too.
Find the treasures in MATLAB Central and discover how the community can help you!Start Hunting!