My favorites | Sign in
Project Logo
                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% LDA Perform a linear discriminant analysis
%
% Inputs: TrainData,TestData - Train,test data arranged in columns
% TrainClass,TestClass - vectors of class membership
% Outputs:PeTrain,PeTest - probability of error
% TrainPredict,TestPredict - predicted values
% Wg,Cg - LDA weights
% (c) Kevin Englehart,1997
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function [PeTrain,PeTest,TrainPredict,TestPredict,Wg,Cg] = lda(TrainData,TestData,TrainClass,TestClass);
clear C N K Mi Ptrain Ptest sc Ate Atr errtr Cinv Pphi AAte errte nete
N = size(TrainData,1);
Ptrain = size(TrainData,2);
Ptest = size(TestData,2);

sc = std(TrainData(:));
TrainData = TrainData + sc./1000.*randn(size(TrainData));

K = max(TrainClass);

%%-- Compute the means and the pooled covariance matrix --%%
C = zeros(N,N);
for l = 1:K;
idx = find(TrainClass==l);
Mi(:,l) = mean(TrainData(:,idx)')';
C = C + cov((TrainData(:,idx)-Mi(:,l)*ones(1,length(idx)))');
end

C = C./K;
Pphi = 1/K;
Cinv = inv(C);

%%-- Compute the LDA weights --%%
for i = 1:K
Wg(:,i) = Cinv*Mi(:,i);
Cg(:,i) = -1/2*Mi(:,i)'*Cinv*Mi(:,i) + log(Pphi)';
end

%%-- Compute the decision functions --%%
Atr = TrainData'*Wg + ones(Ptrain,1)*Cg;
Ate = TestData'*Wg + ones(Ptest,1)*Cg;

errtr = 0;
AAtr = compet(Atr');
errtr = errtr + sum(sum(abs(AAtr-ind2vec(TrainClass))))/2;
netr = errtr/Ptrain;
PeTrain = 1-netr;

TrainPredict = vec2ind(AAtr);

errte = 0;
AAte = compet(Ate');
errte = errte + sum(sum(abs(AAte-ind2vec(TestClass))))/2;
nete = errte/Ptest;
PeTest = 1-nete;

TestPredict = vec2ind(AAte);

return;
Show details Hide details

Change log

r30 by openprosthetics on Jun 19, 2008   Diff
[No log message]
Go to: 
Project members, sign in to write a code review

Older revisions

All revisions of this file

File info

Size: 1689 bytes, 61 lines
Hosted by Google Code