| 查看: 678 | 回复: 1 | ||
[求助]
fastICA对高光谱数据进行特征段选取
|
| 请问 在对高光谱数据进行基于负熵的fastICA处理中,X的行是不是代表波段数,列代表样本,最终得到的W分离矩阵是不是按行的权重绝对值大小选取特征波段 我是用GA先进行波段提取 在基于GA提取出的特征波段的基础上再用fastICA简化处理 |
» 猜你喜欢
最近几年招的学生写论文不引自己组发的文章
已经有6人回复
职称评审没过,求安慰
已经有56人回复
26申博自荐
已经有3人回复
A期刊撤稿
已经有4人回复
|
我是提取了56个样本的光谱数据 每个样本提取10条光谱 波段数为848个波段 总共就是560×848的光谱数据 数据已经过中心化等预处理 我使用GA算法对560×848的光谱数据降维 得到的是560×228的数据 在这基础上 我用fastICA进行波段选取 先对560×228的数据进行转置为228×560 fastICA程序中X的行代表波段数为228 最终选取特征波段是否是对求得的分离矩阵进行排序,按照绝对值权值大小进行特征波段的选取 以下是我的ICA程序 function Z=ICA(X) %-----------去均值--------- [M,T] = size(X); %获取输入矩阵的行/列数 %因为光谱数据已经过中心化处理 所以一下省略 %average= mean(X')'; %均值 % for i=1:M % X(i, =X(i, -average(i)*ones(1,T);% end %---------白化/球化分解------ %参考 http://wenku.baidu.com/view/d21c175355270722192ef75b.html?re=view Cx = cov(X',1); %Cx = cov(X,1); or Cx = cov(X',1); 计算协方差矩阵Cx [eigvector,eigvalue] = eig(Cx); %计算Cx的特征值和特征向量 V=eigvalue^(-1/2)*eigvector'; %白化矩阵(PCA基) 另外一种W=eigvector*eigvalue^(-1/2)*eigvector'; B=V*X; %正交矩阵 Z 原始数据白化处理后的结果 %----------迭代------- 参考http://wenku.baidu.com/view/3c261a34f524ccbff12184d5.html?from=search Maxcount=1000; %最大迭代次数 Critical=0.0001; %终止准则 判断是否收敛 m=M; %需要估计的分量的个数 W=rand(m); for n=1:m WP=W(:,n); %初始权矢量(任意) % Y=WP'*Z; % G=Y.^3;%G为非线性函数,可取y^3等 % GG=3*Y.^2; %G的导数 count=0; LastWP=zeros(m,1); W(:,n)=W(:,n)/norm(W(:,n)); %单位化列向量 while abs(WP-LastWP)&abs(WP+LastWP)>Critical %两个绝对值同时大于收敛条件 count=count+1; %迭代次数 LastWP=WP; %上次迭代的值 % WP=1/T*Z*((LastWP'*Z).^3)'-3*LastWP; for i=1:m WP(i)=mean(B(i, .*(tanh((LastWP)'*B)))-(mean(1-(tanh((LastWP))'*B).^2)).*LastWP(i);%tanh的导数是sechx^2=1-tanhx^2end %WP为某一次牛顿迭代的结果 WPP=zeros(m,1); for j=1:n-1 WPP=WPP+(WP'*W(:,j))*W(:,j); end WP=WP-WPP; WP=WP/(norm(WP)); %归一化 if count==Maxcount fprintf('未找到相应的信号'); return; end end W(:,n)=WP; end %之后添加的 %找到最独立的方向 power=sum(abs(W)'); [m,in]=sort(power); W1=W(in(220:228), ; |
2楼2016-12-17 12:43:36













回复此楼
=X(i,