📄 lda_test.m
字号:
% =========================================================
% LDA (Linear Discriminant Analysis) 矫鼓饭捞记 概飘乏 橇肺弊伐
% 2004. 2. 3 Han Hag Yong
%
% 概飘乏俊 单捞磐甸阑 肺靛茄促.
load class1.dat;
load class2.dat;
load class3.dat;
load data.dat;
load test_data.dat;
% 绵家且 瞒盔阑 沥窍绰 q甫 涝仿罐绰促.
q =input('Input value to reduce to: ');
%q=12;
% 搬苞甫 历厘且 颇老阑 汲沥茄促.
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);
% 阿 努贰胶俊 措茄 within class 傍盒魂(Sw)阑 备茄促.
class1_cov=cov(class1);
class2_cov=cov(class2);
class3_cov=cov(class3);
% 傈眉 单捞磐俊 措窍咯 between class 傍盒魂(Sb)阑 拌魂茄促.
data_cov=cov(data);
%痹霖拌魂: 开 class_cov客 between class 傍盒魂阑 蚌茄 货肺款 漂隆 氦磐
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);
% 秒且 绊蜡 氦磐客 滚副 绊蜡氦磐甫 搬沥窍绰 窜拌捞促.
% 沥纺阑 困秦辑 绊蜡蔼阑 历厘窍扁 困秦 烙矫肺 1xfeature_num 青纺阑 父电促.
for k=1:feature_num
temp_eigen_val_class1(k) = eigen_val_class1(k,k);
temp_eigen_val_class2(k) = eigen_val_class2(k,k);
temp_eigen_val_class3(k) = eigen_val_class3(k,k);
end;
% 绊蜡氦磐 青纺阑 沥纺茄促.
for k=1:feature_num
[row1,col1] = find(temp_eigen_val_class1 == max(temp_eigen_val_class1));
ordered_eigen_vect_class1(k,:) = eigen_vect_class1(col1,:);
temp_eigen_val_class1(col1) = -10000;
[row2,col2] = find(temp_eigen_val_class2 == max(temp_eigen_val_class2));
ordered_eigen_vect_class2(k,:) = eigen_vect_class2(col2,:);
temp_eigen_val_class2(col2) = -10000;
[row3,col3] = find(temp_eigen_val_class3 == max(temp_eigen_val_class3));
ordered_eigen_vect_class3(k,:) = eigen_vect_class3(col3,:);
temp_eigen_val_class3(col3) = -10000;
end;
% 绊蜡氦磐 青纺俊 措窍咯 q俺狼 啊厘 奴 蔼阑 啊柳 凯父阑 啊廉柯促.
for n=1:q
transform_class1(n,:) = ordered_eigen_vect_class1(n,:); %Class1 transform
transform_class2(n,:) = ordered_eigen_vect_class2(n,:); %Class2 transform
transform_class3(n,:) = ordered_eigen_vect_class3(n,:); %Class3 transform
end;
%=====================================================================
% 切嚼 单捞磐甫 阿 努贰胶俊 措窍咯 绵家等 漂隆甸阑 备茄促.
% 阿 努贰胶俊 措窍咯 For 风橇甫 荤侩窍咯 阿 氦磐俊 措茄 绵家等 漂隆甸阑 茫酒辑
% 阿 努贰胶狼 氦磐甸狼 荐肺 唱穿绢辑 绵家等 阿 努贰胶狼 漂隆甸阑 乞闭阑 拌魂茄促.
% 歹固 函荐啊 阿 努贰胶肺 何磐 氦磐甫 历厘窍扁 困秦辑 荤侩等促.
% 弥辆利栏肺 阿 努贰胶狼 烙矫 氦磐阑 犁檬扁拳茄促
% 努贰胶1俊 措茄 贸府
temp_mean1=0; %函荐 檬扁拳
for n=1:num_class1_vect
temp_class1 = class1(n,:);
reduced_class1_features = transform_class1*transpose(temp_class1);
reduced_class1_features = transpose(reduced_class1_features);
temp_mean1 = temp_mean1 + reduced_class1_features;
temp_class1 = 0;
end;
% 努贰胶1 氦磐甸狼 荐肺 temp_mean阑 唱串栏肺辑 绵家等 努贰胶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_class2*transpose(temp_class2);
reduced_class2_features = transpose(reduced_class2_features);
temp_mean2 = temp_mean2 + reduced_class2_features;
temp_class2 = 0;
end;
% 努贰胶2 氦磐甸狼 荐肺 temp_mean阑 唱串栏肺辑 绵家等 努贰胶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_class3*transpose(temp_class3);
reduced_class3_features = transpose(reduced_class3_features);
temp_mean3 = temp_mean3 + reduced_class3_features;
temp_class3 = 0;
end;
% 努贰胶3 氦磐甸狼 荐肺 temp_mean阑 唱串栏肺辑 绵家等 努贰胶3 漂隆甸狼 乞闭阑 拌魂茄促.
mean_reduced_class3_features = temp_mean3/num_class3_vect;
%==============================================================
% 抛胶磐
% test_feature绰 HSBE, MSBE, or LSBE牢瘤甫 抛胶磐瞪 漂隆氦磐捞促.
for j=1:num_test_vectors %抛胶磐 漂隆 氦磐甸俊 措茄 for 风橇 矫累
temp_test_feature_vect = test_data(j,:);
% CLASS 1
reduced_test_feature_vect_class1
= transform_class1*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_class2*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_class3*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 + -