📄 getproject_gsvd_mar.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 + -