【ICA】理论与实现



2017年11月27日    Author:Guofei

文章归类: 0x31_降维    文章编号: 323

版权声明:本文作者是郭飞。转载随意,但需要标明原文链接,并通知本人
原文链接:https://www.guofei.site/2017/11/27/ica.html


独立成分分析(Independent Component Analysis, ICA)

问题引入

鸡尾酒宴会问题
宴会有n个客人,同时说话,不同位置有n个麦克风,请分离每人说话额信号。

鸡尾酒宴会问题属于盲源分离问题

数学描述

有n个信号源$s=(s_1,s_2,…,s_n)^T$
A是未知的混合矩阵,用来叠加信号s,$x=AS$
X是按时间取样的m组样,
问题:仅知道X,如何求s?

问题分析

信号最多有一个分量是高斯分布。

假设$s\sim N(0,1)$, 那么$x=As$也服从多元正态分布。
$Ex=0,Cov(x)=E[xx^T]=E[Ass^TA^T]=AA^T$, 所以$x\sim N(0,AA^T)$
R为正交阵,$x’=ARs$, 那么,同样可证$x’ \sim N(0,AA^T)$

也就是说,$Rs,s$都可以获得同样的x, 因此s是无法确定的

ICA的前提条件:

  1. 各个成分独立
  2. 各个成分中,最多有一个高斯分布
  3. 混合矩阵是方阵

解法一:MLE

附加假设:每个分量都是logistics分布
那么,又根据每个分量独立,可以列出似然函数。

解法二

$x=As, s=Wx$

根据中心极限定理,s的线性组合比s的任何一个分量都接近正太分布。
呢么我们找到这样的$u=W^T_i x$,使得u 最不接近高斯分布

因此,需要解决一个问题:如何定义 最不接近高斯分布

有两套方案来衡量不接近高斯分布:

  1. 峰度越偏离0,越不接近高斯分布
  2. 高斯分布的熵是最大的,定义负熵$J(x)=H(x_{gauss})-H(x)$, 这个值越大,说明越偏离高斯分布

FastICA

FastICA采用负熵的概念

$J(x)=\sum\limits_i k_i [E(G_i(x))-E(G_i(v))]^2$
v是高斯函数,G是任意非二次函数。

等价于求这个最优化:
$\max E(G(W_i^Tx))$ $s.t. \mid\mid W_i\mid\mid=1 $
G的常见形式可以是:

  1. $G(u)=\dfrac{1}{a}\log \cosh(au)$
  2. $G(u)=-\exp(-\dfrac{u^2}{2})$
  3. $G(u)=u^4$

实践中发现,对于不同形式的G,求得的结果差不多,但计算性能有差异。

算法步骤

数据预处理

  1. 中心化$\tilde x =x -E(x)$
  2. 白化$\tilde x = V \Lambda ^{-0.5} V^T x$
    其中$\Lambda$是对角阵,对角线上的元素是是x协方差矩阵的特征值
    V是x协方差矩阵的特征吸向量。

后注

ICA与PCA的区别

  • ICA提取的成分是independent
  • PCA提取得成分是Orthogonal ICA认为样本数据由独立非高斯分布的隐含因子产生
  • PCA认为样本的方差越大则包含的信息越大,数据特征隐含在方差最大的几个正 交方向上,但这很依赖于数据的计量单位选择
  • ICA适合用于还原信号,因为人工信号往往分布有规律,不符合高斯分布
  • PCA适合用于降维,也可用作对信号进行预处理,可以在一定程度上消除噪音
  • 在ICA时可以使用PCA进行数据预处理

应用场景

  • 声学信号处理:鸡尾酒宴会问题
  • 生物医学信号处理:胎心信号、心脑信号分离
  • 阵列信号处理:天线阵列、声呐
  • 图像处理:图像特征提取、人脸识别
  • 其它:模式识别、数据挖掘、金融等领域

ICA的不足

  • 无法还原出源信号的方差,即还原后的信号尺度 与源信号有差别,无法恢复真实波形
  • 无法确定还原信号的分量与对应源信号中哪个分 量对应
  • 混合矩阵是奇异矩阵或近似奇异矩阵时难以计算

Python实现


您的支持将鼓励我继续创作!