📄 lda_dep.m
字号:
% ====================================================================
% 努贰胶 辆加-LDA (Linear Discriminant Analysis) 矫鼓饭捞记 橇肺弊伐
% ====================================================================
clear all
% 单捞磐甸阑 肺靛茄促.
load class1.dat;
load class2.dat;
load class3.dat;
load data.dat; % data.dat = class1.dat + class2.dat + class3.dat
load test_data.dat;
% 绵家且 瞒盔阑 沥窍绰 q 甫 涝仿罐绰促.
q =input('Input value to reduce to: ');
% 搬苞甫 历厘且 颇老阑 汲沥茄促.
FID = fopen('results','w');
[x,feature_num] = size(data);
% 漂隆 氦磐甸狼 荐甫 掘绰促.
[num_test_vectors,x] = size(test_data);
[num_class1_vect,x] = size(class1);
[num_class2_vect,x] = size(class2);
[num_class3_vect,x] = size(class3);
% 醚 单捞磐 笼钦苞 阿 努贰胶狼 乞闭阑 拌魂茄促.
data_mean=mean(data);
class1_mean=mean(class1);
class2_mean=mean(class2);
class3_mean=mean(class3);
% 阿 努贰胶俊 措茄 努贰胶郴 盒魂(Sw)阑 拌魂茄促.
class1_cov=cov(class1);
class2_cov=cov(class2);
class3_cov=cov(class3);
% 努贰胶埃 盒魂(Sb)阑 拌魂茄促.
data_cov=cov(data);
% 阿 努贰胶狼 开 傍盒魂 青纺(class_cov)苞 努贰胶埃 盒魂阑 蚌茄 货肺款 漂隆 氦磐甫 拌魂茄促.
class1_features=inv(class1_cov)*data_cov;
class2_features=inv(class2_cov)*data_cov;
class3_features=inv(class3_cov)*data_cov;
% 阿 努贰胶俊 措茄 绊蜡氦磐客 绊蜡蔼阑 茫绰促.(eig 捞侩)
[eigen_vect_class1, eigen_val_class1]=eig(class1_features);
[eigen_vect_class2, eigen_val_class2]=eig(class2_features);
[eigen_vect_class3, eigen_val_class3]=eig(class3_features);
eigen_vect_all = [eigen_vect_class1; eigen_vect_class2; eigen_vect_class3];
% 秒且 绊蜡 氦磐客 滚副 绊蜡氦磐甫 搬沥茄促.
% 促澜 内靛绰 烙矫肺 绊蜡蔼 青纺狼 措阿己盒栏肺何磐 沥纺窍扁 傈俊
% 烙矫肺 啊瘤绊 乐阑 1xfeature_num 青纺阑 父电促.
for k=1:feature_num
temp_eigen_val_all(k) = eigen_val_class1(k,k);
end;
for k=1:feature_num
temp_eigen_val_all(k+feature_num) = eigen_val_class2(k,k);
end;
for k=1:feature_num
temp_eigen_val_all(k+2*feature_num) = eigen_val_class3(k,k);
end;
% 烙矫 绊蜡蔼 青纺肺何磐 绊蜡氦磐 青纺甫 沥纺茄促.
for k=1:2*feature_num
[row,col] = find(temp_eigen_val_all == max(temp_eigen_val_all));
ordered_eigen_vect_all(k,:) = eigen_vect_all(col,:);
temp_eigen_val_class1(col) = -10000;
end;
% 沥纺等 绊蜡氦磐 青纺俊辑 绵家且 q俺肺 函券 青纺阑 父电促
for n=1:q
transform_class_all(n,:) = ordered_eigen_vect_all(n,:);
end;
%========================================================================
% 阿 努贰胶狼 切嚼 单捞磐甫 函券 青纺阑 烹窍咯 绵家茄促.
% 弊府绊 绵家等 漂隆 氦磐狼 乞闭阑 备茄促.
% 努贰胶1
temp_mean1=0; %函荐 檬扁拳
for n=1:num_class1_vect
temp_class1 = class1(n,:);
reduced_class1_features = transform_class_all*transpose(temp_class1);
reduced_class1_features = transpose(reduced_class1_features);
temp_mean1 = temp_mean1 + reduced_class1_features;
temp_class1 = 0;
end;
% 努贰胶1 漂隆甸狼 乞闭阑 拌魂茄促.
mean_reduced_class1_features = temp_mean1/num_class1_vect;
% 努贰胶2
temp_mean2=0; %函荐 檬扁拳
for n=1:num_class2_vect
temp_class2 = class2(n,:);
reduced_class2_features = transform_class_all*transpose(temp_class2);
reduced_class2_features = transpose(reduced_class2_features);
temp_mean2 = temp_mean2 + reduced_class2_features;
temp_class2 = 0;
end;
% 努贰胶2 漂隆甸狼 乞闭阑 拌魂茄促.
mean_reduced_class2_features = temp_mean2/num_class2_vect;
% 努贰胶3
temp_mean3=0; %函荐 檬扁拳
for n=1:num_class3_vect
temp_class3 = class3(n,:);
reduced_class3_features = transform_class_all*transpose(temp_class3);
reduced_class3_features = transpose(reduced_class3_features);
temp_mean3 = temp_mean3 + reduced_class3_features;
temp_class3 = 0;
end;
% 努贰胶3 漂隆甸狼 乞闭阑 拌魂茄促.
mean_reduced_class3_features = temp_mean3/num_class3_vect;
%==============================================================
% 抛胶飘
for j=1:num_test_vectors %抛胶磐 漂隆 氦磐甸俊 措茄 for 风橇 矫累
temp_test_feature_vect = test_data(j,:);
% CLASS 1
reduced_test_feature_vect_class1 = transform_class_all*transpose(temp_test_feature_vect);
reduced_test_feature_vect_class1 = transpose(reduced_test_feature_vect_class1);
class1_distance = reduced_test_feature_vect_class1 - mean_reduced_class1_features;
% CLASS 2
reduced_test_feature_vect_class2 = transform_class_all*transpose(temp_test_feature_vect);
reduced_test_feature_vect_class2 = transpose(reduced_test_feature_vect_class2);
class2_distance = reduced_test_feature_vect_class2 - mean_reduced_class2_features;
% CLASS 3
reduced_test_feature_vect_class3 = transform_class_all*transpose(temp_test_feature_vect);
reduced_test_feature_vect_class3 = transpose(reduced_test_feature_vect_class3);
class3_distance = reduced_test_feature_vect_class3 - mean_reduced_class3_features;
% 阿 努贰胶俊 措茄 芭府狼 农扁甫 茫绰促.
mag_class1_distance =0;
mag_class2_distance =0;
mag_class3_distance =0;
for n=1:q
squared1 = class1_distance(n) * class1_distance(n);
mag_class1_distance = mag_class1_distance + squared1; %芭府狼 农扁阑 茫绰促.
squared2 = class2_distance(n) * class2_distance(n);
mag_class2_distance = mag_class2_distance + squared2; %芭府狼 农扁阑 茫绰促.
squared3 = class3_distance(n) * class3_distance(n);
mag_class3_distance = mag_class3_distance + squared3; %芭府狼 农扁阑 茫绰促.
end;
% 抛胶飘 单捞磐啊 绢蠢 努贰胶俊 加窍绰瘤狼 搬沥篮 弥家芭府阑 烹秦辑 搬沥茄促.
distance_vect=[mag_class1_distance, mag_class2_distance, mag_class3_distance];
if min(distance_vect)==distance_vect(1)
fprintf(FID,'Class 1\n');
end;
if min(distance_vect)==distance_vect(2)
fprintf(FID,'Class 2\n');
end;
if min(distance_vect)==distance_vect(3)
fprintf(FID,'Class 3\n');
end;
end; % 漂隆 氦磐甸狼 荐父怒 风橇甫 倒赴 for 巩狼 场
fclose all;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -