独立成分分析(Independent component analysis, ICA)
作者:桂。
时间:2017-05-22 12:12:43
链接:http://www.cnblogs.com/xingshansi/p/6884273.html

前言
今天群里冒出这样一个问题:群里谁有INFORMAX语音分离源程序?看到要程序的就头大,这是一个盲源分离问题,之前没有推导过,借此过一遍思路。
一、问题描述
经典的鸡尾酒宴会问题(cocktail party problem)。假设在party中有n个人,他们可以同时说话,我们也在房间中一些角落里共放置了n个声音接收器(Microphone)用来记录声音。宴会过后,我们从n个麦克风中得到了一组数据
,i表示采样的时间顺序,也就是说共得到了m组采样,每一组采样都是n维的。我们的目标是单单从这m组采样数据中分辨出每个人说话的信号。
将第二个问题细化一下,有n个信号源
,
,每一维都是一个人的声音信号,每个人发出的声音信号独立。A是一个未知的混合矩阵(mixing matrix),用来组合叠加信号s,那么

x的意义在上文解释过,这里的x不是一个向量,是一个矩阵。其中每个列向量是
,
,表示成图就是:

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

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

ICA的主要任务是估计解混矩阵W。
二、理论求解(不感兴趣可跳过)
A-理论基础
标准ICA理论有几个支撑点:
1)各源信号统计独立;
2)至多有一个源信号服从Gauss分布
对于
,并假设
,则有:

另一方面,对于任意正交矩阵:
,令
:

可见混合矩阵无法有效估计。
3)混合矩阵为方阵
B-理论求解
1-中心极限定理:
中心极限定理表明:对于混合信号,其概率密度比任何一个源信号的概率分布都接近高斯分布;反过来,最大化信号的非高斯性与最大化信号的统计独立性是一致的,只是ICA的基本原理。
2-非高斯性度量
a)利用统计量
峭度(kurtosis)

峭度基本性质:

b)利用信息论知识
熵的定义:

负熵:

给出基于KL散度的定义:

互信息:

考虑负熵的定义,上式重写为:

该式表明:最小化互信息等价于最大化负熵。
对于负熵,有时为了简化常用近似的方法:

上面的逼近通常不够理想,改进版的近似:

其中
,且:

c)利用概率估计
利用MLE准则进行参数估计。
三、算法实现
给出利用概率估计的算法原理,准则函数(取对数):

其中:
,从而
。这里的g表示概率密度,可以用sigmoid函数,也可以用tan函数等等,以sigmoid函数为例:

由于:
,利用梯度下降法求解。给出梯度的计算公式:
给出主要code实现:
for iter=1:length(anneal)
iter
% Randomly interate through the samples running stochastic gradient descent
rowIndices = randperm(m);
for i = 1:length(rowIndices)
rowIndex = rowIndices(i);
% Perform the ICA stochastic gradient descent update
W = W + anneal(iter) * ((ones(n,1)-2*ones(n,1)./(ones(n,1)+exp(-W*mix(rowIndex,:)')))*mix(rowIndex,:) + (W')^-1);
end
end;
四、其他
A-ICA的不确定性
1-分离信号幅度与初始相位的不确定性
信源信号S和混合矩阵A:

可以看出,对于实数信号产生幅度不确定性,对于复数信号,产生幅度与相位的不确定性。
幅度的不确定性可以采用假设信号单位方差的方法修正。
2-分离信号的次序不确定性

P是任意置换矩阵,这就造成了分离信号次序的不确定性。
B-ICA中的预处理
1-中心化

ICA算法中,均值为零可以使得很多相乘项为零,简化算法复杂性。
2-白化处理

B为白化矩阵。白化操作之前有介绍,白化处理已经包含了中心化。ICA中的白化通常指满秩的白化。
白化的本质就是旋转+方差单位化。白化操作是去除信号的相关性,以基于信息论的ICA为例,各个概率密度独立是理论假设的基本前提。
参考

- http://www.cnblogs.com/jerrylead/archive/2011/04/19/2021071.html
独立成分分析(Independent component analysis, ICA)的更多相关文章
- 独立成分分析(Independent Component Analysis)
ICA是一种用于在统计数据中寻找隐藏的因素或者成分的方法.ICA是一种广泛用于盲缘分离的(BBS)方法,用于揭示随机变量或者信号中隐藏的信息.ICA被用于从混合信号中提取独立的信号信息.ICA在20世 ...
- 机器学习 —— 基础整理(四)特征提取之线性方法:主成分分析PCA、独立成分分析ICA、线性判别分析LDA
本文简单整理了以下内容: (一)维数灾难 (二)特征提取--线性方法 1. 主成分分析PCA 2. 独立成分分析ICA 3. 线性判别分析LDA (一)维数灾难(Curse of dimensiona ...
- Topographic ICA as a Model of Natural Image Statistics(作为自然图像统计模型的拓扑独立成分分析)
其实topographic independent component analysis 早在1999年由ICA的发明人等人就提出了,所以不算是个新技术,ICA是在1982年首先在一个神经生理学的背景 ...
- PCA主成分分析 ICA独立成分分析 LDA线性判别分析 SVD性质
机器学习(8) -- 降维 核心思想:将数据沿方差最大方向投影,数据更易于区分 简而言之:PCA算法其表现形式是降维,同时也是一种特征融合算法. 对于正交属性空间(对2维空间即为直角坐标系)中的样本点 ...
- 独立成分分析 ICA 原理及公式推导 示例
独立成分分析(Independent component analysis) 前言 独立成分分析ICA是一个在多领域被应用的基础算法.ICA是一个不定问题,没有确定解,所以存在各种不同先验假定下的求解 ...
- ICA (独立成分分析)
介绍 独立成分分析(ICA,Independent Component Correlation Algorithm)简介 X=AS X为n维观测信号矢量,S为独立的m(m<=n)维未知源信号矢量 ...
- 斯坦福ML公开课笔记15—隐含语义索引、神秘值分解、独立成分分析
斯坦福ML公开课笔记15 我们在上一篇笔记中讲到了PCA(主成分分析). PCA是一种直接的降维方法.通过求解特征值与特征向量,并选取特征值较大的一些特征向量来达到降维的效果. 本文继续PCA的话题, ...
- Independent Components Analysis:独立成分分析
一.引言 ICA主要用于解决盲源分离问题.需要假设源信号之间是统计独立的.而在实际问题中,独立性假设基本是合理的. 二.随机变量独立性的概念 对于任意两个随机变量X和Y,如果从Y中得不到任何关于X的信 ...
- ICA(独立成分分析)笔记
ICA又称盲源分离(Blind source separation, BSS) 它假设观察到的随机信号x服从模型,其中s为未知源信号,其分量相互独立,A为一未知混合矩阵. ICA的目的是通过且仅通过观 ...
随机推荐
- Android网络缓存的实现思路
在开发群里有多位同学问到了关于Android中网络缓存的问题.事实上不管是Android还是iOS,缓存的大致思路都是同样的,以下就几种情况下的缓存做一个大致的介绍.顺便说一下有些开源的网络请求框架已 ...
- 翻译记忆软件-塔多思TRADO经典教程_2
Trados 中文简明教程Trados 中文简明教程1. 准备工作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...
- Setsockopt选项
讨论 Setsockopt选项 http://c.chinaitlab.com/cc/ccjq/200806/752042_3.html 总而言之,如果你肯定能一起发送多个数据集合(例如HTTP响应的 ...
- Loadrunner 11 遇到的问题
环境 OS:windows 8.1 64bit LoadRunner版本:11 问题 1. VuGen:开始录制后,火狐浏览器没有反应,不会弹出打开 可能原因一:浏览器版本太高. 解决方案: 1)卸 ...
- Win10 专业版激活!
从Win8.1(无论盗版正版),只要符合计算机处理器位数(32或64),就可以 利用: QJNXR-YD97Q-K7WH4-RYWQ8-6MT6Y 激活你的永久Win10,且激活后记录当前设备信息,版 ...
- Spring AOP深入理解之拦截器调用
Spring AOP深入理解之拦截器调用 Spring AOP代理对象生成回想 上一篇博客中:深入理解Spring AOP之二代理对象生成介绍了Spring代理对象是怎样生成的,当中重点介绍了JDK动 ...
- Memcachedclient-XMemcached使用
一. XMemcached 简单介绍 XMemcached 是一个新 java memcached client . 或许你还不知道 memcached 是什么?能够先看看这里.简单来说, Memca ...
- 转义字符 HTML 字符实体 < >: &等
在 HTML 中,某些字符是预留的. 在 HTML 中不能使用小于号(<)和大于号(>),这是因为浏览器会误认为它们是标签. 如果希望正确地显示预留字符,我们必须在 HTML 源代码中使用 ...
- eclipse cdt Program "make" not found in PATH
eclipse cdt插件,开发c/c++程序,编译时报错Program "make" not found in PATH经查C:\MinGW\bin下确实无make.exe,有m ...
- CreateThread、_beginthreadex和AfxBeginThread .
创建线程好几个函数可以使用,可是它们有什么区别,适用于什么情况呢?参考了一些资料,写得都挺好的,这里做一些摘抄和整合. [参考1]CreateThread, AfxBeginThread,_begin ...
