您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > ICA快速算法原理和matlab算法程序
实验2:FastICA算法一.算法原理:独立分量分析(ICA)的过程如下图所示:在信源()st中各分量相互独立的假设下,由观察()xt通过结婚系统B把他们分离开来,使输出()yt逼近()st。图1-ICA的一般过程ICA算法的研究可分为基于信息论准则的迭代估计方法和基于统计学的代数方法两大类,从原理上来说,它们都是利用了源信号的独立性和非高斯性。基于信息论的方法研究中,各国学者从最大熵、最小互信息、最大似然和负熵最大化等角度提出了一系列估计算法。如FastICA算法,Infomax算法,最大似然估计算法等。基于统计学的方法主要有二阶累积量、四阶累积量等高阶累积量方法。本实验主要讨论FastICA算法。1.数据的预处理一般情况下,所获得的数据都具有相关性,所以通常都要求对数据进行初步的白化或球化处理,因为白化处理可去除各观测信号之间的相关性,从而简化了后续独立分量的提取过程,而且,通常情况下,数据进行白化处理与不对数据进行白化处理相比,算法的收敛性较好。若一零均值的随机向量TMZZZ,,1满足IZZET,其中:I为单位矩阵,我们称这个向量为白化向量。白化的本质在于去相关,这同主分量分析的目标是一样的。在ICA中,对于为零均值的独立源信号TNtStStS,...,1,有:jiSESESSEjiji当,0,且协方差矩阵是单位阵IScov,因此,源信号tS是白色的。对观测信号tX,我们应该寻找一个线性变换,使tX投影到新的子空间后变成白化向量,即:tXWtZ0(2.1)其中,0W为白化矩阵,Z为白化向量。利用主分量分析,我们通过计算样本向量得到一个变换TUW2/10其中U和分别代表协方差矩阵XC的特征向量矩阵和特征值矩阵。可以证明,线性变换0W满足白化变换的要求。通过正交变换,可以保证IUUUUTT。因此,协方差矩阵:IUXXEUUXXUEZZETTTTT2/12/12/12/12/12/1(2.2)再将tAStX式代入tXWtZ0,且令AAW~0,有tSAtASWtZ~0(2.3)由于线性变换A~连接的是两个白色随机矢量tZ和tS,可以得出A~一定是一个正交变换。如果把上式中的tZ看作新的观测信号,那么可以说,白化使原来的混合矩阵A简化成一个新的正交矩阵A~。证明也是简单的:IAAASSEAASSAEZZETTTTTT~~~~~~(2.4)其实正交变换相当于对多维矢量所在的坐标系进行一个旋转。在多维情况下,混合矩阵A是NN的,白化后新的混合矩阵A~由于是正交矩阵,其自由度降为2/1NN,所以说白化使得ICA问题的工作量几乎减少了一半。白化这种常规的方法作为ICA的预处理可以有效地降低问题的复杂度,而且算法简单,用传统的PCA就可完成。用PCA对观测信号进行白化的预处理使得原来所求的解混合矩阵退化成一个正交阵,减少了ICA的工作量。此外,PCA本身具有降维功能,当观测信号的个数大于源信号个数时,经过白化可以自动将观测信号数目降到与源信号维数相同。2.FastICA算法FastICA算法,又称固定点(Fixed-Point)算法,是由芬兰赫尔辛基大学Hyvärinen等人提出来的。是一种快速寻优迭代算法,与普通的神经网络算法不同的是这种算法采用了批处理的方式,即在每一步迭代中有大量的样本数据参与运算。但是从分布式并行处理的观点看该算法仍可称之为是一种神经网络算法。FastICA算法有基于峭度、基于似然最大、基于负熵最大等形式,这里,我们介绍基于负熵最大的FastICA算法。它以负熵最大作为一个搜寻方向,可以实现顺序地提取独立源,充分体现了投影追踪(ProjectionPursuit)这种传统线性变换的思想。此外,该算法采用了定点迭代的优化算法,使得收敛更加快速、稳健。因为FastICA算法以负熵最大作为一个搜寻方向,因此先讨论一下负熵判决准则。由信息论理论可知:在所有等方差的随机变量中,高斯变量的熵最大,因而我们可以利用熵来度量非高斯性,常用熵的修正形式,即负熵。根据中心极限定理,若一随机变量X由许多相互独立的随机变量NiSi,...3,2,1之和组成,只要iS具有有限的均值和方差,则不论其为何种分布,随机变量X较iS更接近高斯分布。换言之,iS较X的非高斯性更强。因此,在分离过程中,可通过对分离结果的非高斯性度量来表示分离结果间的相互独立性,当非高斯性度量达到最大时,则表明已完成对各独立分量的分离。负熵的定义:YHYHYNGaussg(2.5)式中,GaussY是一与Y具有相同方差的高斯随机变量,H为随机变量的微分熵dppYHYYlg(2.6)根据信息理论,在具有相同方差的随机变量中,高斯分布的随机变量具有最大的微分熵。当Y具有高斯分布时,0YNg;Y的非高斯性越强,其微分熵越小,YNg值越大,所以YNg可以作为随机变量Y非高斯性的测度。由于根据式(3.6)计算微分熵需要知道Y的概率密度分布函数,这显然不切实际,于是采用如下近似公式:2GaussgYgEYgEYN(2.7)其中,E为均值运算;g为非线性函数,可取)tanh(11yayg,或2/exp22yyyg或33yyg等非线性函数,这里,211a,通常我们取11a。快速ICA学习规则是找一个方向以便XWYXWTT具有最大的非高斯性。这里,非高斯性用式(3.7)给出的负熵)(XWNTg的近似值来度量,XWT的方差约束为1,对于白化数据而言,这等于约束W的范数为1。FastICA算法的推导如下。首先,XWT的负熵的最大近似值能通过对XWGET进行优化来获得。根据Kuhn-Tucker条件,在122WXWET的约束下,XWGET的最优值能在满足下式的点上获得。0WXWXgET(2.8)这里,是一个恒定值,XWXgWETT00,0W是优化后的W值。下面我们利用牛顿迭代法解方程(3.8)。用F表示式(3.8)左边的函数,可得F的雅可比矩阵WJF如下:IXWgXXEWJFTT'(2.9)为了简化矩阵的求逆,可以近似为(3.9)式的第一项。由于数据被球化,IXXET,所以,IXWgEXWgEXXEXWgXXETTTTT'''。因而雅可比矩阵变成了对角阵,并且能比较容易地求逆。因而可以得到下面的近似牛顿迭代公式:(2.10)这里,W是W的新值,XWXgWETT,规格化能提高解的稳定性。简化后就可以得到FastICA算法的迭代公式:(2.11)实践中,FastICA算法中用的期望必须用它们的估计值代替。当然最好的估计是相应的样本平均。理想情况下,所有的有效数据都应该参与计算,但这会降低计算速度。所以通常用一部分样本的平均来估计,样本数目的多少对最后估计的精确度有很大影响。迭代中的样本点应该分别选取,假如收敛不理想的话,可以增加样本的数量。3.FastICA算法的基本步骤:1.对观测数据X进行中心化,使它的均值为0;2.对数据进行白化,ZX。3.选择需要估计的分量的个数m,设迭代次数1p4.选择一个初始权矢量(随机的)pW。5.令WZWgEZWZgEWTpTpp',非线性函数g的选取见前文。6.jpjjTppp11。7.令ppp。8.假如pW不收敛的话,返回第5步。9.令1pp,如果mp,返回第4步。二.MATLAB源程序及说明:%下程序为ICA的调用函数,输入为观察的信号,输出为解混后的信号functionZ=ICA(X)%-----------去均值---------[M,T]=size(X);%获取输入矩阵的行/列数,行数为观测数据的数目,列数为采样点数average=mean(X')';%均值fori=1:MX(i,:)=X(i,:)-average(i)*ones(1,T);end%---------白化/球化------Cx=cov(X',1);%计算协方差矩阵Cx[eigvector,eigvalue]=eig(Cx);%计算Cx的特征值和特征向量W=eigvalue^(-1/2)*eigvector';%白化矩阵Z=W*X;%正交矩阵%----------迭代-------Maxcount=10000;%最大迭代次数Critical=0.00001;%判断是否收敛m=M;%需要估计的分量的个数W=rand(m);forn=1:mWP=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));whileabs(WP-LastWP)&abs(WP+LastWP)Criticalcount=count+1;%迭代次数LastWP=WP;%上次迭代的值%WP=1/T*Z*((LastWP'*Z).^3)'-3*LastWP;fori=1:mWP(i)=mean(Z(i,:).*(tanh((LastWP)'*Z)))-(mean(1-(tanh((LastWP))'*Z).^2)).*LastWP(i);endWPP=zeros(m,1);forj=1:n-1WPP=WPP+(WP'*W(:,j))*W(:,j);endWP=WP-WPP;WP=WP/(norm(WP));ifcount==Maxcountfprintf('未找到相应的信号);return;endendW(:,n)=WP;endZ=W'*Z;%以下为主程序,主要为原始信号的产生,观察信号和解混信号的作图clearall;clc;N=200;n=1:N;%N为采样点数s1=2*sin(0.02*pi*n);%正弦信号t=1:N;s2=2*square(100*t,50);%方波信号a=linspace(1,-1,25);s3=2*[a,a,a,a,a,a,a,a];%锯齿信号s4=rand(1,N);%随机噪声S=[s1;s2;s3;s4];%信号组成4*NA=rand(4,4);X=A*S;%观察信号%源信号波形图figure(1);subplot(4,1,1);plot(s1);axis([0N-5,5]);title('源信号');subplot(4,1,2);plot(s2);axis([0N-5,5]);subplot(4,1,3);plot(s3);axis([0N-5,5]);subplot(4,1,4);plot(s4);xlabel('Time/ms');%观察信号(混合信号)波形图figure(2);subplot(4,1,1);plot(X(1,:));title('观察信号(混合信号)');subplot(4,1,2);plot(X(2,:));subplot(4,1,3);plot(X(3,:));subplot(4,1,4);plot(X(4,:));Z=ICA(X);figure(3);subplot(4,1,1);plot(Z(1,:));title('解混后的信号');subplot(4,1,2);plot(Z(2,:));subplot(4,1,3);plot(Z(3,:));subplot(4,1,4);plot(Z(4,:));xlabel('Time/ms');三.实验结果:实验结果如下所示:其中图2为
本文标题:ICA快速算法原理和matlab算法程序
链接地址:https://www.777doc.com/doc-3414039 .html