本文章参考机器学习周志华
基本原理
使用LDA对iris数据集进行降维处理
main.m
clear;clc;
% D = cell(150,6);
D = [1 5.1 3.5 1.4 0.2 1 ;
2 4.9 3 1.4 0.2 1 ;
3 4.7 3.2 1.3 0.2 1 ;
4 4.6 3.1 1.5 0.2 1 ;
5 5 3.6 1.4 0.2 1 ;
6 5.4 3.9 1.7 0.4 1 ;
7 4.6 3.4 1.4 0.3 1 ;
8 5 3.4 1.5 0.2 1 ;
9 4.4 2.9 1.4 0.2 1 ;
10 4.9 3.1 1.5 0.1 1 ;
11 5.4 3.7 1.5 0.2 1 ;
12 4.8 3.4 1.6 0.2 1 ;
13 4.8 3 1.4 0.1 1 ;
14 4.3 3 1.1 0.1 1 ;
15 5.8 4 1.2 0.2 1 ;
16 5.7 4.4 1.5 0.4 1 ;
17 5.4 3.9 1.3 0.4 1 ;
18 5.1 3.5 1.4 0.3 1 ;
19 5.7 3.8 1.7 0.3 1 ;
20 5.1 3.8 1.5 0.3 1 ;
21 5.4 3.4 1.7 0.2 1 ;
22 5.1 3.7 1.5 0.4 1 ;
23 4.6 3.6 1 0.2 1 ;
24 5.1 3.3 1.7 0.5 1 ;
25 4.8 3.4 1.9 0.2 1 ;
26 5 3 1.6 0.2 1 ;
27 5 3.4 1.6 0.4 1 ;
28 5.2 3.5 1.5 0.2 1 ;
29 5.2 3.4 1.4 0.2 1 ;
30 4.7 3.2 1.6 0.2 1 ;
31 4.8 3.1 1.6 0.2 1 ;
32 5.4 3.4 1.5 0.4 1 ;
33 5.2 4.1 1.5 0.1 1 ;
34 5.5 4.2 1.4 0.2 1 ;
35 4.9 3.1 1.5 0.2 1 ;
36 5 3.2 1.2 0.2 1 ;
37 5.5 3.5 1.3 0.2 1 ;
38 4.9 3.6 1.4 0.1 1 ;
39 4.4 3 1.3 0.2 1 ;
40 5.1 3.4 1.5 0.2 1 ;
41 5 3.5 1.3 0.3 1 ;
42 4.5 2.3 1.3 0.3 1 ;
43 4.4 3.2 1.3 0.2 1 ;
44 5 3.5 1.6 0.6 1 ;
45 5.1 3.8 1.9 0.4 1 ;
46 4.8 3 1.4 0.3 1 ;
47 5.1 3.8 1.6 0.2 1 ;
48 4.6 3.2 1.4 0.2 1 ;
49 5.3 3.7 1.5 0.2 1 ;
50 5 3.3 1.4 0.2 1 ;
51 7 3.2 4.7 1.4 2 ;
52 6.4 3.2 4.5 1.5 2 ;
53 6.9 3.1 4.9 1.5 2 ;
54 5.5 2.3 4 1.3 2 ;
55 6.5 2.8 4.6 1.5 2 ;
56 5.7 2.8 4.5 1.3 2 ;
57 6.3 3.3 4.7 1.6 2 ;
58 4.9 2.4 3.3 1 2 ;
59 6.6 2.9 4.6 1.3 2 ;
60 5.2 2.7 3.9 1.4 2 ;
61 5 2 3.5 1 2 ;
62 5.9 3 4.2 1.5 2 ;
63 6 2.2 4 1 2 ;
64 6.1 2.9 4.7 1.4 2 ;
65 5.6 2.9 3.6 1.3 2 ;
66 6.7 3.1 4.4 1.4 2 ;
67 5.6 3 4.5 1.5 2 ;
68 5.8 2.7 4.1 1 2 ;
69 6.2 2.2 4.5 1.5 2 ;
70 5.6 2.5 3.9 1.1 2 ;
71 5.9 3.2 4.8 1.8 2 ;
72 6.1 2.8 4 1.3 2 ;
73 6.3 2.5 4.9 1.5 2 ;
74 6.1 2.8 4.7 1.2 2 ;
75 6.4 2.9 4.3 1.3 2 ;
76 6.6 3 4.4 1.4 2 ;
77 6.8 2.8 4.8 1.4 2 ;
78 6.7 3 5 1.7 2 ;
79 6 2.9 4.5 1.5 2 ;
80 5.7 2.6 3.5 1 2 ;
81 5.5 2.4 3.8 1.1 2 ;
82 5.5 2.4 3.7 1 2 ;
83 5.8 2.7 3.9 1.2 2 ;
84 6 2.7 5.1 1.6 2 ;
85 5.4 3 4.5 1.5 2 ;
86 6 3.4 4.5 1.6 2 ;
87 6.7 3.1 4.7 1.5 2 ;
88 6.3 2.3 4.4 1.3 2 ;
89 5.6 3 4.1 1.3 2 ;
90 5.5 2.5 4 1.3 2 ;
91 5.5 2.6 4.4 1.2 2 ;
92 6.1 3 4.6 1.4 2 ;
93 5.8 2.6 4 1.2 2 ;
94 5 2.3 3.3 1 2 ;
95 5.6 2.7 4.2 1.3 2 ;
96 5.7 3 4.2 1.2 2 ;
97 5.7 2.9 4.2 1.3 2 ;
98 6.2 2.9 4.3 1.3 2 ;
99 5.1 2.5 3 1.1 2 ;
100 5.7 2.8 4.1 1.3 2 ;
101 6.3 3.3 6 2.5 3 ;
102 5.8 2.7 5.1 1.9 3 ;
103 7.1 3 5.9 2.1 3 ;
104 6.3 2.9 5.6 1.8 3 ;
105 6.5 3 5.8 2.2 3 ;
106 7.6 3 6.6 2.1 3 ;
107 4.9 2.5 4.5 1.7 3 ;
108 7.3 2.9 6.3 1.8 3 ;
109 6.7 2.5 5.8 1.8 3 ;
110 7.2 3.6 6.1 2.5 3 ;
111 6.5 3.2 5.1 2 3 ;
112 6.4 2.7 5.3 1.9 3 ;
113 6.8 3 5.5 2.1 3 ;
114 5.7 2.5 5 2 3 ;
115 5.8 2.8 5.1 2.4 3 ;
116 6.4 3.2 5.3 2.3 3 ;
117 6.5 3 5.5 1.8 3 ;
118 7.7 3.8 6.7 2.2 3 ;
119 7.7 2.6 6.9 2.3 3 ;
120 6 2.2 5 1.5 3 ;
121 6.9 3.2 5.7 2.3 3 ;
122 5.6 2.8 4.9 2 3 ;
123 7.7 2.8 6.7 2 3 ;
124 6.3 2.7 4.9 1.8 3 ;
125 6.7 3.3 5.7 2.1 3 ;
126 7.2 3.2 6 1.8 3 ;
127 6.2 2.8 4.8 1.8 3 ;
128 6.1 3 4.9 1.8 3 ;
129 6.4 2.8 5.6 2.1 3 ;
130 7.2 3 5.8 1.6 3 ;
131 7.4 2.8 6.1 1.9 3 ;
132 7.9 3.8 6.4 2 3 ;
133 6.4 2.8 5.6 2.2 3 ;
134 6.3 2.8 5.1 1.5 3 ;
135 6.1 2.6 5.6 1.4 3 ;
136 7.7 3 6.1 2.3 3 ;
137 6.3 3.4 5.6 2.4 3 ;
138 6.4 3.1 5.5 1.8 3 ;
139 6 3 4.8 1.8 3 ;
140 6.9 3.1 5.4 2.1 3 ;
141 6.7 3.1 5.6 2.4 3 ;
142 6.9 3.1 5.1 2.3 3 ;
143 5.8 2.7 5.1 1.9 3 ;
144 6.8 3.2 5.9 2.3 3 ;
145 6.7 3.3 5.7 2.5 3 ;
146 6.7 3 5.2 2.3 3 ;
147 6.3 2.5 5 1.9 3 ;
148 6.5 3 5.2 2 3 ;
149 6.2 3.4 5.4 2.3 3 ;
150 5.9 3 5.1 1.8 3 ;
];
D1 = D(1:50,:);
D2 = D(51:100,:);
D3 = D(101:150,:);
wei = 2;
%全局散度矩阵
X = zeros(150,4);
for i = 1:4
X(:,i) = D(:,i+1);
end
St = zeros(4,4);
for i = 1:size(D,1)
St = St+(D(i,2:5)'-mean(X)')*(D(i,2:5)'-mean(X)')';
end
Data = cell(1,3);
Data{1} = D1;
Data{2} = D2;
Data{3} = D3;
%类内散度矩阵
Sw = zeros(4,4);
for i = 1:3
mui = mean(Data{1,i});
mui = mui(2:5);
for j = 1:size(Data{1,i},1)
Sw = Sw+(Data{1,i}(j,2:5)'-mui')*(Data{1,i}(j,2:5)'-mui')';
end
end
%类间散度矩阵
Sb = zeros(4,4);
for i = 1:3
mui = mean(Data{1,i});
mui = mui(2:5);
Sb = Sb+size(Data{1,i},1)*(mui'-mean(X)')*(mui'-mean(X)')';
end
%求Sw逆Sb的特征向量和特征值
[V,DD] = eig(inv(Sw)*Sb);
temp = sort(DD,'descend');
times = 0;
for i = 1:size(temp,1)
for j = 1:size(temp,2)
if temp(i,j)~=0
times = times+1;
t(times) = temp(i,j);
end
if times>=wei
break
end
end
end
for i = 1:length(t)
[~,col(i)] = find(DD==t(i));
end
w = V(:,col);
%%对数据降维
D_new = zeros(size(D,1),wei);
for i = 1:size(D,1)
D_new(i,:) = D(i,2:5)*w;
end
figure(2)
hold on
D_new1 = D_new(1:50,:);
D_new2 = D_new(51:100,:);
D_new3 = D_new(101:150,:);
scatter(D_new1(:,1),D_new1(:,2),'r');
scatter(D_new2(:,1),D_new2(:,2),'g');
scatter(D_new3(:,1),D_new3(:,2),'b');