欢迎来到天天文库
浏览记录
ID:51494553
大小:55.69 KB
页数:2页
时间:2020-03-25
《PCA典型例子Matlab程序.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、%程序说明:y=pca(mixedsig),程序中mixedsig为n*T阶混合数据矩阵,n为信号个数,T为采样点数%y为m*T阶主分量矩阵。functiony=pca(mixedsig)ifnargin==0error('Youmustsupplythemixeddataasinputargument.');endiflength(size(mixedsig))>2error('Inputdatacannothavemorethantwodimensions.');endifany(any(isnan(mixedsig)))error('InputdatacontainsN
2、aN''s.');end%——————————————去均值————————————meanValue=mean(mixedsig')';mixedsig=mixedsig-meanValue*ones(1,size(meanValue,2));[Dim,NumofSampl]=size(mixedsig);oldDimension=Dim;fprintf('Numberofsignals:%d',Dim);fprintf('Numberofsamples:%d',NumofSampl);fprintf('CalculatePCA...');firstEig=1;la
3、stEig=Dim;covarianceMatrix=cov(mixedsig',1);%计算协方差矩阵[E,D]=eig(covarianceMatrix);%计算协方差矩阵的特征值和特征向量%———计算协方差矩阵的特征值大于阈值的个数lastEig———rankTolerance=1e-5;maxLastEig=sum(diag(D))>rankTolerance;lastEig=maxLastEig;%——————————降序排列特征值——————————eigenvalues=flipud(sort(diag(D)));%—————————去掉较小的特征值——————
4、————iflastEiglowerLimitValue;%—————去掉较大的特征值(一般没有这一步)——————iffirstEig>1higherLimitValue=(eigenvalues(firstEig-1)+eigenvalues(firstEig))/2;elseh
5、igherLimitValue=eigenvalues(1)+1;endhigherColumns=diag(D)6、values(lastEig));fprintf('Largestremaining(non-zero)eigenvalue[%g]',eigenvalues(firstEig));fprintf('Sumofremovedeigenvalue[%g]',sum(diag(D).*(~selectedColumns)));%———————选择相应的特征值和特征向量———————E=selcol(E,selectedColumns);D=selcol(selcol(D,selectedColumns)',selectedColumns);%——————————计算白化矩7、阵———————————whiteningMatrix=inv(sqrt(D))*E';dewhiteningMatrix=E*sqrt(D);%——————————提取主分量————————————y=whiteningMatrix*mixedsig;%——————————行选择子程序———————————functionnewMatrix=selcol(oldMatrix,maskVector)ifsize(maskVector,1)~=size(oldMatrix,2)error('Themask
6、values(lastEig));fprintf('Largestremaining(non-zero)eigenvalue[%g]',eigenvalues(firstEig));fprintf('Sumofremovedeigenvalue[%g]',sum(diag(D).*(~selectedColumns)));%———————选择相应的特征值和特征向量———————E=selcol(E,selectedColumns);D=selcol(selcol(D,selectedColumns)',selectedColumns);%——————————计算白化矩
7、阵———————————whiteningMatrix=inv(sqrt(D))*E';dewhiteningMatrix=E*sqrt(D);%——————————提取主分量————————————y=whiteningMatrix*mixedsig;%——————————行选择子程序———————————functionnewMatrix=selcol(oldMatrix,maskVector)ifsize(maskVector,1)~=size(oldMatrix,2)error('Themask
此文档下载收益归作者所有