?? 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 + -