# LDA calaulate
## How to make LDA Classifier
If X∈R^d^ is a test data, the decsion function of LDA:

**Defined:**
$$ H = \vec W^t \vec X + b $$ $$ \vec W \in R^d \vec X \in R^d $$
$\vec W$ : weight vector of the plane
$\vec X$ : factor vector
b : bias of the plane
$\vec X$ is classified as positive if $D(X)=H = \vec W^t \vec X + b >0$
$\vec X$ is classified as negitive if $D(X)=H = \vec W^t \vec X + b <0$
**Note:**
$\vec W, \vec X$ are unknown. (by data-driven way to ditermine)
**LDA W & b are gain by:**
$$\vec W =(\bar u_1 - \bar u_2)^t ∑^{-1}$$ $$\vec b =-\cfrac{1}{2}(\vec u_1-\vec u_2)^t∑^{-1}(\vec u_1-\vec u_2)-\ln\cfrac {c_{12} π_2}{c_{21} π_1} $$
**covariance is calculated:**$$∑=\cfrac{1}{N-1}\sum^N_{i=1}(\bar u_1 - \bar u_2)(\bar u_1 - \bar u_2)^t$$
**$π_1,π_2$ is calculated:**$$π_1=\cfrac{N_2}{N_1+N_2},π_2=\cfrac{N_1}{N_1+N_2}$$
**$C_{12},C_{21}$ is default as 1 & 1:**

**Note:**
1. $\vec u_1$ , $\vec u_2$ are mean vector of positive &negative training data, respective.
1. ∑ is the covering matrix of the training data
1. $π_1,π_2$ are priori probability(先驗水平)
1. $c_{12},c_{21}$ are the perally for the first class training error
## Matlab use LDA calaulate iris dataset
**iris dataset:**
由左至右分別為特徵一、二、三、四 及類別標籤
```
5.1000000e+000 3.5000000e+000 1.4000000e+000 2.0000000e-001 1
4.9000000e+000 3.0000000e+000 1.4000000e+000 2.0000000e-001 1
4.7000000e+000 3.2000000e+000 1.3000000e+000 2.0000000e-001 1
4.6000000e+000 3.1000000e+000 1.5000000e+000 2.0000000e-001 1
5.0000000e+000 3.6000000e+000 1.4000000e+000 2.0000000e-001 1
5.4000000e+000 3.9000000e+000 1.7000000e+000 4.0000000e-001 1
4.6000000e+000 3.4000000e+000 1.4000000e+000 3.0000000e-001 1
5.0000000e+000 3.4000000e+000 1.5000000e+000 2.0000000e-001 1
4.4000000e+000 2.9000000e+000 1.4000000e+000 2.0000000e-001 1
4.9000000e+000 3.1000000e+000 1.5000000e+000 1.0000000e-001 1
5.4000000e+000 3.7000000e+000 1.5000000e+000 2.0000000e-001 1
4.8000000e+000 3.4000000e+000 1.6000000e+000 2.0000000e-001 1
4.8000000e+000 3.0000000e+000 1.4000000e+000 1.0000000e-001 1
4.3000000e+000 3.0000000e+000 1.1000000e+000 1.0000000e-001 1
5.8000000e+000 4.0000000e+000 1.2000000e+000 2.0000000e-001 1
5.7000000e+000 4.4000000e+000 1.5000000e+000 4.0000000e-001 1
5.4000000e+000 3.9000000e+000 1.3000000e+000 4.0000000e-001 1
5.1000000e+000 3.5000000e+000 1.4000000e+000 3.0000000e-001 1
5.7000000e+000 3.8000000e+000 1.7000000e+000 3.0000000e-001 1
5.1000000e+000 3.8000000e+000 1.5000000e+000 3.0000000e-001 1
5.4000000e+000 3.4000000e+000 1.7000000e+000 2.0000000e-001 1
5.1000000e+000 3.7000000e+000 1.5000000e+000 4.0000000e-001 1
4.6000000e+000 3.6000000e+000 1.0000000e+000 2.0000000e-001 1
5.1000000e+000 3.3000000e+000 1.7000000e+000 5.0000000e-001 1
4.8000000e+000 3.4000000e+000 1.9000000e+000 2.0000000e-001 1
5.0000000e+000 3.0000000e+000 1.6000000e+000 2.0000000e-001 1
5.0000000e+000 3.4000000e+000 1.6000000e+000 4.0000000e-001 1
5.2000000e+000 3.5000000e+000 1.5000000e+000 2.0000000e-001 1
5.2000000e+000 3.4000000e+000 1.4000000e+000 2.0000000e-001 1
4.7000000e+000 3.2000000e+000 1.6000000e+000 2.0000000e-001 1
4.8000000e+000 3.1000000e+000 1.6000000e+000 2.0000000e-001 1
5.4000000e+000 3.4000000e+000 1.5000000e+000 4.0000000e-001 1
5.2000000e+000 4.1000000e+000 1.5000000e+000 1.0000000e-001 1
5.5000000e+000 4.2000000e+000 1.4000000e+000 2.0000000e-001 1
4.9000000e+000 3.1000000e+000 1.5000000e+000 1.0000000e-001 1
5.0000000e+000 3.2000000e+000 1.2000000e+000 2.0000000e-001 1
5.5000000e+000 3.5000000e+000 1.3000000e+000 2.0000000e-001 1
4.9000000e+000 3.1000000e+000 1.5000000e+000 1.0000000e-001 1
4.4000000e+000 3.0000000e+000 1.3000000e+000 2.0000000e-001 1
5.1000000e+000 3.4000000e+000 1.5000000e+000 2.0000000e-001 1
5.0000000e+000 3.5000000e+000 1.3000000e+000 3.0000000e-001 1
4.5000000e+000 2.3000000e+000 1.3000000e+000 3.0000000e-001 1
4.4000000e+000 3.2000000e+000 1.3000000e+000 2.0000000e-001 1
5.0000000e+000 3.5000000e+000 1.6000000e+000 6.0000000e-001 1
5.1000000e+000 3.8000000e+000 1.9000000e+000 4.0000000e-001 1
4.8000000e+000 3.0000000e+000 1.4000000e+000 3.0000000e-001 1
5.1000000e+000 3.8000000e+000 1.6000000e+000 2.0000000e-001 1
4.6000000e+000 3.2000000e+000 1.4000000e+000 2.0000000e-001 1
5.3000000e+000 3.7000000e+000 1.5000000e+000 2.0000000e-001 1
5.0000000e+000 3.3000000e+000 1.4000000e+000 2.0000000e-001 1
7.0000000e+000 3.2000000e+000 4.7000000e+000 1.4000000e+000 2
6.4000000e+000 3.2000000e+000 4.5000000e+000 1.5000000e+000 2
6.9000000e+000 3.1000000e+000 4.9000000e+000 1.5000000e+000 2
5.5000000e+000 2.3000000e+000 4.0000000e+000 1.3000000e+000 2
6.5000000e+000 2.8000000e+000 4.6000000e+000 1.5000000e+000 2
5.7000000e+000 2.8000000e+000 4.5000000e+000 1.3000000e+000 2
6.3000000e+000 3.3000000e+000 4.7000000e+000 1.6000000e+000 2
4.9000000e+000 2.4000000e+000 3.3000000e+000 1.0000000e+000 2
6.6000000e+000 2.9000000e+000 4.6000000e+000 1.3000000e+000 2
5.2000000e+000 2.7000000e+000 3.9000000e+000 1.4000000e+000 2
5.0000000e+000 2.0000000e+000 3.5000000e+000 1.0000000e+000 2
5.9000000e+000 3.0000000e+000 4.2000000e+000 1.5000000e+000 2
6.0000000e+000 2.2000000e+000 4.0000000e+000 1.0000000e+000 2
6.1000000e+000 2.9000000e+000 4.7000000e+000 1.4000000e+000 2
5.6000000e+000 2.9000000e+000 3.6000000e+000 1.3000000e+000 2
6.7000000e+000 3.1000000e+000 4.4000000e+000 1.4000000e+000 2
5.6000000e+000 3.0000000e+000 4.5000000e+000 1.5000000e+000 2
5.8000000e+000 2.7000000e+000 4.1000000e+000 1.0000000e+000 2
6.2000000e+000 2.2000000e+000 4.5000000e+000 1.5000000e+000 2
5.6000000e+000 2.5000000e+000 3.9000000e+000 1.1000000e+000 2
5.9000000e+000 3.2000000e+000 4.8000000e+000 1.8000000e+000 2
6.1000000e+000 2.8000000e+000 4.0000000e+000 1.3000000e+000 2
6.3000000e+000 2.5000000e+000 4.9000000e+000 1.5000000e+000 2
6.1000000e+000 2.8000000e+000 4.7000000e+000 1.2000000e+000 2
6.4000000e+000 2.9000000e+000 4.3000000e+000 1.3000000e+000 2
6.6000000e+000 3.0000000e+000 4.4000000e+000 1.4000000e+000 2
6.8000000e+000 2.8000000e+000 4.8000000e+000 1.4000000e+000 2
6.7000000e+000 3.0000000e+000 5.0000000e+000 1.7000000e+000 2
6.0000000e+000 2.9000000e+000 4.5000000e+000 1.5000000e+000 2
5.7000000e+000 2.6000000e+000 3.5000000e+000 1.0000000e+000 2
5.5000000e+000 2.4000000e+000 3.8000000e+000 1.1000000e+000 2
5.5000000e+000 2.4000000e+000 3.7000000e+000 1.0000000e+000 2
5.8000000e+000 2.7000000e+000 3.9000000e+000 1.2000000e+000 2
6.0000000e+000 2.7000000e+000 5.1000000e+000 1.6000000e+000 2
5.4000000e+000 3.0000000e+000 4.5000000e+000 1.5000000e+000 2
6.0000000e+000 3.4000000e+000 4.5000000e+000 1.6000000e+000 2
6.7000000e+000 3.1000000e+000 4.7000000e+000 1.5000000e+000 2
6.3000000e+000 2.3000000e+000 4.4000000e+000 1.3000000e+000 2
5.6000000e+000 3.0000000e+000 4.1000000e+000 1.3000000e+000 2
5.5000000e+000 2.5000000e+000 4.0000000e+000 1.3000000e+000 2
5.5000000e+000 2.6000000e+000 4.4000000e+000 1.2000000e+000 2
6.1000000e+000 3.0000000e+000 4.6000000e+000 1.4000000e+000 2
5.8000000e+000 2.6000000e+000 4.0000000e+000 1.2000000e+000 2
5.0000000e+000 2.3000000e+000 3.3000000e+000 1.0000000e+000 2
5.6000000e+000 2.7000000e+000 4.2000000e+000 1.3000000e+000 2
5.7000000e+000 3.0000000e+000 4.2000000e+000 1.2000000e+000 2
5.7000000e+000 2.9000000e+000 4.2000000e+000 1.3000000e+000 2
6.2000000e+000 2.9000000e+000 4.3000000e+000 1.3000000e+000 2
5.1000000e+000 2.5000000e+000 3.0000000e+000 1.1000000e+000 2
5.7000000e+000 2.8000000e+000 4.1000000e+000 1.3000000e+000 2
6.3000000e+000 3.3000000e+000 6.0000000e+000 2.5000000e+000 3
5.8000000e+000 2.7000000e+000 5.1000000e+000 1.9000000e+000 3
7.1000000e+000 3.0000000e+000 5.9000000e+000 2.1000000e+000 3
6.3000000e+000 2.9000000e+000 5.6000000e+000 1.8000000e+000 3
6.5000000e+000 3.0000000e+000 5.8000000e+000 2.2000000e+000 3
7.6000000e+000 3.0000000e+000 6.6000000e+000 2.1000000e+000 3
4.9000000e+000 2.5000000e+000 4.5000000e+000 1.7000000e+000 3
7.3000000e+000 2.9000000e+000 6.3000000e+000 1.8000000e+000 3
6.7000000e+000 2.5000000e+000 5.8000000e+000 1.8000000e+000 3
7.2000000e+000 3.6000000e+000 6.1000000e+000 2.5000000e+000 3
6.5000000e+000 3.2000000e+000 5.1000000e+000 2.0000000e+000 3
6.4000000e+000 2.7000000e+000 5.3000000e+000 1.9000000e+000 3
6.8000000e+000 3.0000000e+000 5.5000000e+000 2.1000000e+000 3
5.7000000e+000 2.5000000e+000 5.0000000e+000 2.0000000e+000 3
5.8000000e+000 2.8000000e+000 5.1000000e+000 2.4000000e+000 3
6.4000000e+000 3.2000000e+000 5.3000000e+000 2.3000000e+000 3
6.5000000e+000 3.0000000e+000 5.5000000e+000 1.8000000e+000 3
7.7000000e+000 3.8000000e+000 6.7000000e+000 2.2000000e+000 3
7.7000000e+000 2.6000000e+000 6.9000000e+000 2.3000000e+000 3
6.0000000e+000 2.2000000e+000 5.0000000e+000 1.5000000e+000 3
6.9000000e+000 3.2000000e+000 5.7000000e+000 2.3000000e+000 3
5.6000000e+000 2.8000000e+000 4.9000000e+000 2.0000000e+000 3
7.7000000e+000 2.8000000e+000 6.7000000e+000 2.0000000e+000 3
6.3000000e+000 2.7000000e+000 4.9000000e+000 1.8000000e+000 3
6.7000000e+000 3.3000000e+000 5.7000000e+000 2.1000000e+000 3
7.2000000e+000 3.2000000e+000 6.0000000e+000 1.8000000e+000 3
6.2000000e+000 2.8000000e+000 4.8000000e+000 1.8000000e+000 3
6.1000000e+000 3.0000000e+000 4.9000000e+000 1.8000000e+000 3
6.4000000e+000 2.8000000e+000 5.6000000e+000 2.1000000e+000 3
7.2000000e+000 3.0000000e+000 5.8000000e+000 1.6000000e+000 3
7.4000000e+000 2.8000000e+000 6.1000000e+000 1.9000000e+000 3
7.9000000e+000 3.8000000e+000 6.4000000e+000 2.0000000e+000 3
6.4000000e+000 2.8000000e+000 5.6000000e+000 2.2000000e+000 3
6.3000000e+000 2.8000000e+000 5.1000000e+000 1.5000000e+000 3
6.1000000e+000 2.6000000e+000 5.6000000e+000 1.4000000e+000 3
7.7000000e+000 3.0000000e+000 6.1000000e+000 2.3000000e+000 3
6.3000000e+000 3.4000000e+000 5.6000000e+000 2.4000000e+000 3
6.4000000e+000 3.1000000e+000 5.5000000e+000 1.8000000e+000 3
6.0000000e+000 3.0000000e+000 4.8000000e+000 1.8000000e+000 3
6.9000000e+000 3.1000000e+000 5.4000000e+000 2.1000000e+000 3
6.7000000e+000 3.1000000e+000 5.6000000e+000 2.4000000e+000 3
6.9000000e+000 3.1000000e+000 5.1000000e+000 2.3000000e+000 3
5.8000000e+000 2.7000000e+000 5.1000000e+000 1.9000000e+000 3
6.8000000e+000 3.2000000e+000 5.9000000e+000 2.3000000e+000 3
6.7000000e+000 3.3000000e+000 5.7000000e+000 2.5000000e+000 3
6.7000000e+000 3.0000000e+000 5.2000000e+000 2.3000000e+000 3
6.3000000e+000 2.5000000e+000 5.0000000e+000 1.9000000e+000 3
6.5000000e+000 3.0000000e+000 5.2000000e+000 2.0000000e+000 3
6.2000000e+000 3.4000000e+000 5.4000000e+000 2.3000000e+000 3
5.9000000e+000 3.0000000e+000 5.1000000e+000 1.8000000e+000 3
```
以類別2與類別3的第3特徵與第4特徵做分類
```
%% 讀取.txt資料
dataSet = load('iris.txt');
rawData = dataSet(:,1:4); % 原始資料,75筆資料 x 4個特徵
label = dataSet(:,5); % 75筆資料所對應的標籤
%% Part1、LDA
% 選取每類別前半,合併為training set
train_positive = rawData(51: 75, 3: 4);
train_negitive = rawData(101: 125, 3: 4);
% 選取每類別後半,合併為test set
test_positive = rawData(76: 100, 3: 4);
test_negitive = rawData(126:150, 3: 4);
c12=1; c21=1;
[w, b] = LDA(train_positive', train_negitive', c12, c21);
[TP, FP] = LDA_classificate(test_positive', w, b, true);
[TN, FN] = LDA_classificate(test_negitive', w, b, false);
classification_rate = (TP + TN)/length([test_positive; test_negitive]);
fprintf('前25類做training data 分類率 : %.4f \n', classification_rate)
plot(train_positive(:,1), train_positive(:,2), 'ro',...
test_positive(:,1), test_positive(:,2), 'r*',...
train_negitive(:,1), train_negitive(:,2), 'go',...
test_negitive(:,1), test_negitive(:,2), 'g*');
x= linspace(max(min([train_positive; train_negitive])),max(max([train_positive; train_negitive])));
y= (w(1)*x + b)/(-1* w(2));
plot(x,y)
title('LDA Plot');
legend('train positive', 'test positive','train negitive', 'test negitive', 'classification');
xlabel('Feature3');
ylabel('Feature4');
axis tight
set(gcf,'position',[0 0 500 500])
saveas(gcf, 'Part 1-1.png');
[w, b] = LDA(test_positive', test_negitive', c12, c21);
[TP, FN] = LDA_classificate(train_positive', w, b, true);
[TN, FP] = LDA_classificate(train_negitive', w, b, false);
classification_rate = (TP + TN)/length([test_positive; test_negitive]);
fprintf('後25類做training data 分類率 : %.4f \n', classification_rate)
close all;
plot(train_positive(:,1), train_positive(:,2), 'ro',...
test_positive(:,1), test_positive(:,2), 'r*',...
train_negitive(:,1), train_negitive(:,2), 'go',...
test_negitive(:,1), test_negitive(:,2), 'g*');
x= linspace(max(min([train_positive; train_negitive])),max(max([train_positive; train_negitive])));
y= (w(1)*x + b)/(-1* w(2));
plot(x,y)
title('LDA Plot');
legend('train positive', 'test positive','train negitive', 'test negitive', 'classification');
xlabel('Feature3');
ylabel('Feature4');
axis tight
set(gcf,'position',[0 0 500 500])
saveas(gcf, 'Part 1-2.png');
```
**output:**
```
前25類做training data 分類率 : 0.9400
後25類做training data 分類率 : 0.9400
```
前25類做training data

後25類做training data

**function LDA**
```
function [W, b] = LDA(u1, u2, c12, c21)
u1_avg = zeros(size(u1(:,1)));
u2_avg = zeros(size(u2(:,1)));
for count=1:length(u1(1,:))
u1_avg = u1_avg + u1(:,count);
end
u1_avg = u1_avg/length(u1(1,:));
for count=1:length(u2(1,:))
u2_avg = u2_avg + u2(:,count);
end
u2_avg = u2_avg/length(u2(1,:));
%計算covariance
all_u = [u1, u2];
u_bar = zeros(size(all_u(:,1)));
for count=1:length(all_u(1,:))
u_bar = u_bar + all_u(:,count);
end
u_bar = u_bar/length(all_u(1,:));
covariance = 0;
for count=1:length(all_u(1,:))
covariance = covariance + (all_u(:,count) - u_bar) * (all_u(:,count) - u_bar)';
end
covariance = covariance/(length(all_u(1,:))-1);
%pi1 & pi2
pi1 = size(u1(1)) / (size(u1(1))+size(u2(1)));
pi2 = size(u2(1)) / (size(u1(1))+size(u2(1)));
W = (u1_avg - u2_avg)'*inv(covariance);
b = (-1/2)*(u1_avg - u2_avg)' * inv(covariance) * (u1_avg + u2_avg) - log((c12 * pi2)/(c21 * pi1))/log(exp(1));
end
```
**function classifier**
```
function [CorrectCount, FalseCount] = LDA_classificate(point, w, b, positive)
CorrectCount = 0;
FalseCount = 0;
for count=1:length(point(1,:))
H = w * point(:,count) + b;
if positive == 1
if H>0
CorrectCount = CorrectCount +1;
else
FalseCount = FalseCount +1;
end
else
if H<0
CorrectCount = CorrectCount +1;
else
FalseCount = FalseCount +1;
end
end
end
end
```