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

📄 getproject_gsvd_mar.m

📁 LDA/GSVD算法matlab代码
💻 M
字号:
function [MatrixProjectionW,Qt,Xit,Zt ] = Getproject_gsvd_mar( TrainingVector,TestingVector,NumOfTraining,TestingPerClass,NumOfClass,NumPerClass,Row,Col)

dim = Row*Col;
%create MeanVector
MeanVector=zeros(Row*Col,NumOfClass);
for i=1:NumOfClass
   MeanVector(:,i)=mean(TrainingVector(:,((i-1)*NumOfTraining+1):i*NumOfTraining)')';
end
MeanVectorOfAllVector=mean(MeanVector')';

% %create MatrixW
MatrixW=zeros(Row*Col,NumOfClass*NumOfTraining);
for i=1:NumOfClass
   for j=1:NumOfTraining
      MatrixW(:,(i-1)*NumOfTraining+j)=(TrainingVector(:,(i-1)*NumOfTraining+j)-MeanVector(:,i)); %/sqrt(NumOfTraining*NumOfClass);
   end
end

%create MatrixB
MatrixB=zeros(Row*Col,NumOfClass);
for i=1:NumOfClass
	MatrixB(:,i)=(MeanVector(:,i)-MeanVectorOfAllVector)*sqrt(NumOfTraining); %/sqrt(NumOfClass); According to the paper ilda
end
% TimeForBothDirect=clock;
%create MatrixT
MatrixT=zeros(Row*Col,NumOfClass*NumOfTraining);
for i=1:NumOfClass
   for j=1:NumOfTraining
      MatrixT(:,(i-1)*NumOfTraining+j)=(TrainingVector(:,(i-1)*NumOfTraining+j)-MeanVectorOfAllVector); %/sqrt(NumOfTraining*NumOfClass); %/sqrt(NumOfTraining*NumOfClass);
   end
end
%TimeOf=clock;
[Qt,Xit,Zt] = svd(MatrixT);
% MatrixStt=MatrixT'*MatrixT;
% [Ut,St,Vt]=svd(MatrixStt);

% [RowOfSt,ColOfSt] = size( Xit );
% i=1;
% while( (i<=RowOfSt)&(i<=ColOfSt) )
%    if( Xit(i,i)>0.0000001 )
%       i=i+1;
%    else
%       break;
%    end
% end
% rs=i-1;

rs = rank(Xit);
if rs>(NumOfClass*NumOfTraining-1)
   rs=(NumOfClass*NumOfTraining-1);
end

 Pt( 1: NumOfClass, 1:rs ) = MatrixB' * Qt(:,1:rs) * inv( Xit(1:rs,1:rs) );
%Pt(:,1:rs) = [MatrixB MatrixW]'* Qt(:,1:rs) * inv( Xit(1:rs,1:rs) );
%TimeOfGSVD = etime(clock,TimeOf);

[Ut,Gt,Wt] = svd( Pt( 1: NumOfClass, 1:rs ) );

Yt( :,1:rs ) = Qt(:,1:rs) * inv( Xit(1:rs,1:rs) ) * Wt;

MatrixProjectionW=Yt( :, 1: NumOfClass );

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -