📄 fisherplot.m
字号:
%Fisher算法
clear all
num_class=79; %类别数
num_inclass=3; %每一类的样本数
num_all=num_class*num_inclass; %所有样本数
%num_test=4;
m=100; %期望的行数
n=60; %期望的列数
M=m*n;
%num=308;
%X=readimage(num_class,num_inclass,m,n); %读入图像
%load image_data_77; %读入图像
%X_test=readimagetest(num_class,num_test,m,n); %读入测试样本
load image_data_79;
load imagetest_data_20;
ratio_fisher=zeros(1,17);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% pca算法
%sum_Y=zeros(M,1);
%mean_Y=zeros(M,1);
%Y_change=zeros(M,num_all);
sum_X=zeros(M,1);
mean_X=zeros(M,1);
X_change=zeros(M,num_all);
project_temp=zeros(M,num_all-1);
pro_temp=zeros(M,(num_all-num_class));
for i=1:num_all
sum_X=sum_X+X(:,i);
end
mean_X=sum_X/num_all;
for i=1:num_all
X_change(:,i)=X(:,i)-mean_X;
end
temp=(X_change')*X_change;
[V_st,D_st]=eig(temp);
%D_max=max(D);
for i=2:num_all
%project_temp(:,i)=1/sqrt(D_max(i))*X_change*V(:,i);
project_temp(:,i)=X_change*V_st(:,i);
end
for i=1:(num_all-num_class)
pro_temp(:,i)=project_temp(:,num_all-i+1);
end
project=pro_temp';
%for i=1:num_all
% sum_X=sum_X+X(:,i);
%end
%mean_X=sum_X/num_all;
%for i=1:num_all
% X_change(:,i)=X(:,i)-mean_X;
%end
X_pca=project*X_change;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% lda算法
sum_lda=zeros((num_all-num_class),1);
mean_lda=zeros((num_all-num_class),1);
sum_inclass=zeros((num_all-num_class),num_class);
mean_inclass=zeros((num_all-num_class),num_class);
sw_inclass=zeros((num_all-num_class),(num_all-num_class));
sw=zeros((num_all-num_class),(num_all-num_class));
sb=zeros((num_all-num_class),(num_all-num_class));
project_lda_temp=zeros((num_all-num_class),(num_class-1));
for i=1:num_all
sum_lda=sum_lda+X_pca(:,i);
end
mean_lda=sum_lda/num_all;
for i=1:num_class
for j=1:num_inclass
sum_inclass(:,i)=sum_inclass(:,i)+X_pca(:,(i-1)*num_inclass+j);
end
mean_inclass(:,i)=sum_inclass(:,i)/num_inclass;
end
for i=1:num_class
sw_inclass=0;
for j=1:num_inclass
sw_inclass=sw_inclass+(X_pca(:,(i-1)*num_inclass+j)-mean_inclass(:,i))*(X_pca(:,(i-1)*num_inclass+j)-mean_inclass(:,i))';
end
sw=sw+sw_inclass;
end
for i=1:num_class
sb=sb+(mean_inclass(:,i)-mean_lda)*(mean_inclass(:,i)-mean_lda)';
end
[V,D]=eig(inv(sw)*sb);
for nn=5:5:85
%nn=num_class-1;
for i=1:nn
project_lda_temp(:,i)=V(:,i);
end
project_lda=project_lda_temp';
X_lda=project_lda*X_pca;
min=1;
distance=zeros(1,num_all);
remember=zeros(1,num_class);
distance_all=zeros(num_class,num_all);
for i=1:num_class
X_test_change=X_test(:,i)-mean_X;
X_test_pca=project*X_test_change;
X_test_lda=project_lda*X_test_pca;
for j=1:num_all
temp=(X_test_lda-X_lda(:,j))'*(X_test_lda-X_lda(:,j));
distance(1,j)=sqrt(temp);
end
for j=1:num_all
if distance(1,j)<distance(1,min)
min=j;
end
end
remember(1,i)=min;
end
result_class=zeros(1,num_class);
num_recognition=0;
for i=1:num_class
remainder=mod(remember(1,i),num_inclass);
quotient=fix(remember(1,i)/num_inclass);
if(remainder==0)
result_class(1,i)=quotient;
else
result_class(1,i)=quotient+1;
end
if(result_class(1,i)==i)
num_recognition=num_recognition+1;
end
end
ratio_recognition=num_recognition/num_class;
ratio_fisher(1,nn/5)=ratio_recognition*100;
end
%save ratio_fisher ratio_fisher;
plot(15:5:85,ratio_fisher(3:17),'r');
axis([15 85 0 100]);
hold on
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -