⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fisherplot.m

📁 introduction of fisher
💻 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 + -