zoukankan      html  css  js  c++  java
  • [转]独立成分分析(Independent Component Analysis)

    原文地址:http://www.cnblogs.com/jerrylead/archive/2011/04/19/2021071.html

    独立成分分析(Independent Component Analysis)

    1. 问题:

         1、上节提到的PCA是一种数据降维的方法,但是只对符合高斯分布的样本点比较有效,那么对于其他分布的样本,有没有主元分解的方法呢?

         2、经典的鸡尾酒宴会问题(cocktail party problem)。假设在party中有n个人,他们可以同时说话,我们也在房间中一些角落里共放置了n个声音接收器(Microphone)用来记录声音。宴会过后,我们从n个麦克风中得到了一组数据clip_image002,i表示采样的时间顺序,也就是说共得到了m组采样,每一组采样都是n维的。我们的目标是单单从这m组采样数据中分辨出每个人说话的信号。

         将第二个问题细化一下,有n个信号源clip_image004clip_image006,每一维都是一个人的声音信号,每个人发出的声音信号独立。A是一个未知的混合矩阵(mixing matrix),用来组合叠加信号s,那么

         clip_image008

         x的意义在上文解释过,这里的x不是一个向量,是一个矩阵。其中每个列向量是clip_image010clip_image012

         表示成图就是

         clip_image014

         这张图来自

         http://amouraux.webnode.com/research-interests/research-interests-erp-analysis/blind-source-separation-bss-of-erps-using-independent-component-analysis-ica/

         clip_image033

         clip_image035的每个分量都由clip_image037的分量线性表示。A和s都是未知的,x是已知的,我们要想办法根据x来推出s。这个过程也称作为盲信号分离。

         令clip_image039,那么clip_image041

         将W表示成

         clip_image042

         其中clip_image044,其实就是将clip_image046写成行向量形式。那么得到:

         clip_image048

    2. ICA的不确定性(ICA ambiguities)

         由于w和s都不确定,那么在没有先验知识的情况下,无法同时确定这两个相关参数。比如上面的公式s=wx。当w扩大两倍时,s只需要同时扩大两倍即可,等式仍然满足,因此无法得到唯一的s。同时如果将人的编号打乱,变成另外一个顺序,如上图的蓝色节点的编号变为3,2,1,那么只需要调换A的列向量顺序即可,因此也无法单独确定s。这两种情况称为原信号不确定。

         还有一种ICA不适用的情况,那就是信号不能是高斯分布的。假设只有两个人发出的声音信号符合多值正态分布,clip_image050,I是2*2的单位矩阵,s的概率密度函数就不用说了吧,以均值0为中心,投影面是椭圆的山峰状(参见多值高斯分布)。因为clip_image052,因此,x也是高斯分布的,均值为0,协方差为clip_image054

         令R是正交阵clip_image056clip_image058。如果将A替换成A’。那么clip_image060。s分布没变,因此x’仍然是均值为0,协方差clip_image062

         因此,不管混合矩阵是A还是A’,x的分布情况是一样的,那么就无法确定混合矩阵,也就无法确定原信号。

    3. 密度函数和线性变换

         在讨论ICA具体算法之前,我们先来回顾一下概率和线性代数里的知识。

         假设我们的随机变量s有概率密度函数clip_image064(连续值是概率密度函数,离散值是概率)。为了简单,我们再假设s是实数,还有一个随机变量x=As,A和x都是实数。令clip_image066是x的概率密度,那么怎么求clip_image066[1]

         令clip_image039[1],首先将式子变换成clip_image068,然后得到clip_image070,求解完毕。可惜这种方法是错误的。比如s符合均匀分布的话(clip_image072),那么s的概率密度是clip_image074,现在令A=2,即x=2s,也就是说x在[0,2]上均匀分布,可知clip_image076。然而,前面的推导会得到clip_image078。正确的公式应该是

         clip_image080

         推导方法

         clip_image082

         clip_image084

         更一般地,如果s是向量,A可逆的方阵,那么上式子仍然成立。

    4. ICA算法

         ICA算法归功于Bell和Sejnowski,这里使用最大似然估计来解释算法,原始的论文中使用的是一个复杂的方法Infomax principal。

         我们假定每个clip_image086有概率密度clip_image088,那么给定时刻原信号的联合分布就是

         clip_image090

         这个公式代表一个假设前提:每个人发出的声音信号各自独立。有了p(s),我们可以求得p(x)

         clip_image092

         左边是每个采样信号x(n维向量)的概率,右边是每个原信号概率的乘积的|W|倍。

         前面提到过,如果没有先验知识,我们无法求得W和s。因此我们需要知道clip_image094,我们打算选取一个概率密度函数赋给s,但是我们不能选取高斯分布的密度函数。在概率论里我们知道密度函数p(x)由累计分布函数(cdf)F(x)求导得到。F(x)要满足两个性质是:单调递增和在[0,1]。我们发现sigmoid函数很适合,定义域负无穷到正无穷,值域0到1,缓慢递增。我们假定s的累积分布函数符合sigmoid函数

         clip_image096

         求导后

         clip_image098

         这就是s的密度函数。这里s是实数。

         如果我们预先知道s的分布函数,那就不用假设了,但是在缺失的情况下,sigmoid函数能够在大多数问题上取得不错的效果。由于上式中clip_image100是个对称函数,因此E[s]=0(s的均值为0),那么E[x]=E[As]=0,x的均值也是0。

         知道了clip_image100[1],就剩下W了。给定采样后的训练样本clip_image002[1],样本对数似然估计如下:

         使用前面得到的x的概率密度函数,得

         clip_image101

         大括号里面是clip_image103

         接下来就是对W求导了,这里牵涉一个问题是对行列式|W|进行求导的方法,属于矩阵微积分。这里先给出结果,在文章最后再给出推导公式。

         clip_image105

         最终得到的求导后公式如下,clip_image107的导数为clip_image109(可以自己验证):

         clip_image110

         其中clip_image112是梯度上升速率,人为指定。

         当迭代求出W后,便可得到clip_image114来还原出原始信号。

         注意:我们计算最大似然估计时,假设了clip_image116clip_image118之间是独立的,然而对于语音信号或者其他具有时间连续依赖特性(比如温度)上,这个假设不能成立。但是在数据足够多时,假设独立对效果影响不大,同时如果事先打乱样例,并运行随机梯度上升算法,那么能够加快收敛速度。

         回顾一下鸡尾酒宴会问题,s是人发出的信号,是连续值,不同时间点的s不同,每个人发出的信号之间独立(clip_image086[1]clip_image120之间独立)。s的累计概率分布函数是sigmoid函数,但是所有人发出声音信号都符合这个分布。A(W的逆阵)代表了s相对于x的位置变化,x是s和A变化后的结果。

    5. 实例

         clip_image122

         s=2时的原始信号

         clip_image124

         观察到的x信号

         clip_image126

         使用ICA还原后的s信号

    6. 行列式的梯度

         对行列式求导,设矩阵A是n×n的,我们知道行列式与代数余子式有关,

         clip_image127

         clip_image129是去掉第i行第j列后的余子式,那么对clip_image131求导得

         clip_image132

         adj(A)跟我们线性代数中学的clip_image134是一个意思,因此

         clip_image135

  • 相关阅读:
    HDU 5583 Kingdom of Black and White 水题
    HDU 5578 Friendship of Frog 水题
    Codeforces Round #190 (Div. 2) E. Ciel the Commander 点分治
    hdu 5594 ZYB's Prime 最大流
    hdu 5593 ZYB's Tree 树形dp
    hdu 5592 ZYB's Game 树状数组
    hdu 5591 ZYB's Game 博弈论
    HDU 5590 ZYB's Biology 水题
    cdoj 1256 昊昊爱运动 预处理/前缀和
    cdoj 1255 斓少摘苹果 贪心
  • 原文地址:https://www.cnblogs.com/Crysaty/p/6137043.html
Copyright © 2011-2022 走看看