• 大小: 1KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-10-01
  • 语言: Matlab
  • 标签: FLDA  LDA  fisher  

资源简介

用于特征降维,鉴别分析等多元数据分析的fisher鉴别分析(FLDA)Matlab代码实现。

资源截图

代码片段和文件信息

% Fisherface for Recognition
function [ ProjectedTrainSamplesProjectedTestSamples ]=LDA_zq(TrainSamples TestSamplesClassNum) 

c = ClassNum; % 类别数
ni = 2*size(TrainSamples2)/c;  % 每类样本数
smalle = 10.^(-5);  % 一个小数字阈值
nitr = ni/2; % 每类一半样本作为训练样本
nite = ni - nitr; % 其余一般作为测试样本
trsize = nitr*c; % 训练样本总数 N
tesize = size(TestSamples2); % 测试样本总数

x = TrainSamples; 
xm = mean(x2); 

x = x - repmat(xm1trsize); % 训练样本及中心化  
    
%%PCA
[w e explain] = pcacov(x‘*x);
r = length(find(e>smalle));
w = w(:1:r); e = e(1:r); w = x*w*diag(1./sqrt(e)); % SVD方法求解PCA
x0 = w‘*x;    % 将训练样本投影到PCA子空间 这里w 即为W_pca

xt0 = w‘*(TestSamples - repmat(xm1tesize));  % 同样地,将测试样本投影到PCA子空间         
clear xm;  clear w; clear x;
    
dim = trsize-c;    % Fisherface方法要求将PCA子空间的维数取为N-c
x = x0(1:dim:); 
xm = mean(x2); 
Hw = []; mi = []; 
    
%LDA 
for i = 1:c
   xi = x(:(i-1)*nitr+1:i*nitr); mi(:i) = mean(xi2);  Hw = [Hwxi-repmat(mi(:i)1nitr)];  clear xi;
end
Sw = Hw*Hw‘;  % 计算类内散布矩阵Sw
clear Hw;
Hb = mi - repmat(xm1c); Sb = nitr*Hb*Hb‘;       clear Hb; % 计算类间散布矩阵Sb
[w e] = eig(inv(Sw)*Sb);  % 求解 Sb * w = lamda * Sw * w
e = diag(e); re = find(imag(e)==0 & real(e)>smalle);  e = e(re); w = w(:re);
[e2 id] = sort(e); w2 = w(:id);  e = flipud(e2); w = fliplr(w2);       clear e2; clear w2;
r = length(e); % r 是最终LDA子空间的维数,一般情况下等于c-1
    
xproj0 = w‘*x; % 将训练样本进一步降维到LDA子空间,这里w 即为W_lda
xtproj0 = w‘*xt0(1:dim:); % 同样地,将测试样本进一步降维到同样的LDA子空间
    
prj = r;     % Dimensionality of the final subspace
xproj = xproj0(1:prj:);    % 最终被降维后的训练样本
xtproj = xtproj0(1:prj:);  % 最终被降维后的测试样本

ProjectedTrainSamples=xproj;
ProjectedTestSamples=xtproj;

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       1889  2010-03-25 15:08  LDA_zq.m

----------- ---------  ---------- -----  ----

                 1889                    1


评论

共有 条评论