資源簡介
用于特征降維,鑒別分析等多元數據分析的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
- 上一篇:配電網前推回代潮流算法
- 下一篇:matlab有限元程序
評論
共有 條評論