24小时热门版块排行榜    

查看: 678  |  回复: 1

a287653371

新虫 (初入文坛)

[求助] fastICA对高光谱数据进行特征段选取

请问    在对高光谱数据进行基于负熵的fastICA处理中,X的行是不是代表波段数,列代表样本,最终得到的W分离矩阵是不是按行的权重绝对值大小选取特征波段  我是用GA先进行波段提取  在基于GA提取出的特征波段的基础上再用fastICA简化处理
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

a287653371

新虫 (初入文坛)

我是提取了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^2
        end           %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
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 a287653371 的主题更新
信息提示
请填处理意见