function y = pca(mixedsig,d)
%程序说明:y = pca(mixedsig),程序中mixedsig为 n*T 阶混合数据矩阵,n为信号个数,T为采样点数
% y为 m*T 阶主分量矩阵。
% n是维数,T是样本数。
tic;
if nargin == 0
error('You must supply the mixed data as input argument.');
end
if length(size(mixedsig))>2
error('Input data can not have more than two dimensions. ');
end
if any(any(isnan(mixedsig)))
error('Input data contains NaN''s.');
end
%——————————————去均值————————————
meanValue = mean(mixedsig')';
[m,n] = size(mixedsig);
%mixedsig = mixedsig - meanValue*ones(1,size(meanValue)); %当数据本身维数很大时容易出现Out of memory
for s = 1:m
for t = 1:n
mixedsig(s,t) = mixedsig(s,t) - meanValue(s);
end
end
[Dim,NumofSampl] = size(mixedsig);
oldDimension = Dim;
fprintf('Number of signals: %d\n',Dim);
fprintf('Number of samples: %d\n',NumofSampl);
fprintf('Calculate PCA...');
firstEig = 1;
lastEig = Dim;
covarianceMatrix = corrcoef(mixedsig'); %计算协方差矩阵
[E,D] = eig(covarianceMatrix); %计算协方差矩阵的特征值和特征向量
%———计算协方差矩阵的特征值大于阈值的个数lastEig———
%rankTolerance = 1;
%maxLastEig = sum(diag(D) >= rankTolerance);
%lastEig = maxLastEig;
lastEig = d;
%——————————降序排列特征值——————————
eigenvalues = flipud(sort(diag(D)));
%—————————去掉较小的特征值——————————
if lastEig < oldDimension
lowerLimitValue = (eigenvalues(lastEig) + eigenvalues(lastEig + 1))/2;
else
lowerLimitValue = eigenvalues(oldDimension) - 1;
end
lowerColumns = diag(D) > lowerLimitValue;
%—————去掉较大的特征值(一般没有这一步)——————
if firstEig > 1
higherLimitValue = (eigenvalues(firstEig - 1) + eigenvalues(firstEig))/2;
else
higherLimitValue = eigenvalues(1) + 1;
end
higherColumns = diag(D) < higherLimitValue;
%—————————合并选择的特征值——————————
selectedColumns =lowerColumns & higherColumns;
%—————————输出处理的结果信息—————————
fprintf('Selected [%d] dimensions.\n',sum(selectedColumns));
fprintf('Smallest remaining (non-zero) eigenvalue[ %g ]\n',eigenvalues(lastEig));
fprintf('Largest remaining (non-zero) eigenvalue[ %g ]\n',eigenvalues(firstEig));
fprintf('Sum of removed eigenvalue[ %g ]\n',sum(diag(D) .* (~selectedColumns)));
%———————选择相应的特征值和特征向量———————
E = selcol(E,selectedColumns);
D = selcol(selcol(D,selectedColumns)',selectedColumns);
%——————————计算白化矩阵———————————
whiteningMatrix = inv(sqrt(D)) * E';
dewhiteningMatrix = E * sqrt(D);
%——————————提取主分量————————————
y = whiteningMatrix * mixedsig;
toc;
% function y = pca(mixedsig,weishu)
% clear;
% clc;
% %程序说明:y = pca(mixedsig),程序中mixedsig为 n*T 阶混合数据矩阵,n为信号个数,T为采样点数
% % y为 m*T 阶主分量矩阵。
% % n是维数,T是样本数。
% if nargin == 0
% error('You must supply the mixed data as input argument.');
% end
% if length(size(mixedsig))>2
% error('Input data can not have more than two dimensions. ');
% end
% if any(any(isnan(mixedsig)))
% error('Input data contains NaN''s.');
% end
%
% %——————————————去均值————————————
% meanValue = mean(mixedsig')';
% [m,n] = size(mixedsig);
% %mixedsig = mixedsig - meanValue*ones(1,size(meanValue)); %当数据本身维数很大时容易出现Out of memory
% for s = 1:m
% for t = 1:n
% mixedsig(s,t) = mixedsig(s,t) - meanValue(s);
% end
% end
% [Dim,NumofSampl] = size(mixedsig);
% oldDimension = Dim;
% fprintf('Number of signals: %d\n',Dim);
% fprintf('Number of samples: %d\n',NumofSampl);
% fprintf('Calculate PCA...');
% firstEig = 1;
% lastEig = Dim;
% covarianceMatrix = corrcoef(mixedsig'); %计算协方差矩阵
% [E,D] = eig(covarianceMatrix); %计算协方差矩阵的特征值和特征向量
%
% %———计算协方差矩阵的特征值大于阈值的个数lastEig———
% %rankTolerance = 1;
% %maxLastEig = sum(diag(D) >= rankTolerance);
% %lastEig = maxLastEig;
% lastEig = weishu; %取值可以自由取定by Sarah Dora
%
% %——————————降序排列特征值——————————
% eigenvalues = flipud(sort(diag(D)));
%
% %—————————去掉较小的特征值——————————
% if lastEig < oldDimension
% lowerLimitValue = (eigenvalues(lastEig) + eigenvalues(lastEig + 1))/2;
% else
% lowerLimitValue = eigenvalues(oldDimension) - 1;
% end
% lowerColumns = diag(D) > lowerLimitValue;
%
% %—————去掉较大的特征值(一般没有这一步)——————
% if firstEig > 1
% higherLimitValue = (eigenvalues(firstEig - 1) + eigenvalues(firstEig))/2;
% else
% higherLimitValue = eigenvalues(1) + 1;
% end
% higherColumns = diag(D) < higherLimitValue;
%
% %—————————合并选择的特征值——————————
% selectedColumns =lowerColumns & higherColumns;
%
% %—————————输出处理的结果信息—————————
% fprintf('Selected [%d] dimensions.\n',sum(selectedColumns));
% fprintf('Smallest remaining (non-zero) eigenvalue[ %g ]\n',eigenvalues(lastEig));
% fprintf('Largest remaining (non-zero) eigenvalue[ %g ]\n',eigenvalues(firstEig));
% fprintf('Sum of removed eigenvalue[ %g ]\n',sum(diag(D) .* (~selectedColumns)));
%
% %———————选择相应的特征值和特征向量———————
% E = selcol(E,selectedColumns);
% D = selcol(selcol(D,selectedColumns)',selectedColumns);
%
% %——————————计算白化矩阵———————————
% whiteningMatrix = inv(sqrt(D)) * E';
% dewhiteningMatrix = E * sqrt(D);
%
% %——————————提取主分量————————————
% y = whiteningMatrix * mixedsig;
% % hap=y(:,1:50);
% % sad=y(:,51:100);
% % sur=y(:,101:150);
% % ang=y(:,151:200);
% % fea=y(:,201:250);
% % dis=y(:,251:300);
% % % hap=[y(:,1:50),y(:,301:350),y(:,601:650),y(:,901:950),y(:,1201:1250),y(:,1501:1550)];
% % % sad=[y(:,51:100),y(:,351:400),y(:,651:700),y(:,951:1000),y(:,1251:1300),y(:,1551:1600)];
% % % sur=[y(:,101:150),y(:,401:450),y(:,701:750),y(:,1001:1050),y(:,1301:1350),y(:,1601:1650)];
% % % ang=[y(:,151:200),y(:,451:500),y(:,751:800),y(:,1051:1100),y(:,1351:1400),y(:,1651:1700)];
% % % fea=[y(:,201:250),y(:,501:550),y(:,801:850),y(:,1101:1150),y(:,1401:1450),y(:,1701:1750)];
% % % dis=[y(:,251:300),y(:,551:600),y(:,851:900),y(:,1151:1200),y(:,1451:1500),y(:,1751:1800)];
% % % plot3(hap(1,:),hap(2,:),hap(3,:),'b.',sad(1,:),sad(2,:),sad(3,:),'gx',sur(1,:),sur(2,:),sur(3,:),'r+',...
% % % ang(1,:),ang(2,:),ang(3,:),'c*',fea(1,:),fea(2,:),fea(3,:),'mv',dis(1,:),dis(2,:),dis(3,:),'yp');
% % for i=1:50
% % hap(:,i)=hap(:,i)./max(abs(hap),[],2);
% % end
% % for i=1:50
% % sad(:,i)=sad(:,i)./max(abs(sad),[],2);
% % end
% % for i=1:50
% % sur(:,i)=sur(:,i)./max(abs(sur),[],2);
% % end
% % for i=1:50
% % ang(:,i)=ang(:,i)./max(abs(ang),[],2);
% % end
% % for i=1:50
% % fea(:,i)=fea(:,i)./max(abs(fea),[],2);
% % end
% % for i=1:50
% % dis(:,i)=dis(:,i)./max(abs(dis),[],2);
% % end
% % % plot(hap(1,:),hap(2,:),'b.',sad(1,:),sad(2,:),'gx',sur(1,:),sur(2,:),'r+',...
% % % ang(1,:),ang(2,:),'c*',fea(1,:),fea(2,:),'mv',dis(1,:),dis(2,:),'yp');
% %
% %
matla特征降维搜索算法,sfs,sffs等搜索算法
1星 需积分: 47 11 浏览量
2017-02-22
11:19:44
上传
评论 3
收藏 8KB ZIP 举报
小公子三木君
- 粉丝: 168
- 资源: 8
最新资源
- 课程设计-基于SpringBoot + Mybatis+python爬虫NBA球员数据爬取可视化+源代码+文档+sql+效果图
- 软件品质管理系列二项目策划规范.doc
- 基于TensorFlow+PyQt+GUI的酒店评论情感分析,支持分析本地数据文件和网络爬取数据分析+源代码+文档说明+安装教程
- 软件定义无线电中的模拟电路测试技术.pptx
- 软件开发协议(作为技术开发合同附件).doc
- 软件开发和咨询行业技术趋势分析.pptx
- 软件测试题详解及答案.doc
- 软件漏洞生命周期管理策略.pptx
- 毕业设计-基于Python实现的的简易气温爬虫,可以爬取全国各市的近7日气温数据
- 软件系统测试报告(实用版).doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈