前言
独立成分分析ICA是一个在多领域被应用的基础算法。ICA是一个不定问题,没有确定解,所以存在各种不同先验假定下的求解算法。相比其他技术,ICA的开源代码不是很多,且存在黑魔法–有些步骤并没有在论文里提到,但没有这些步骤是无法得到正确结果的。
本文给出一个ICA最大似然解法的推导,以及FastICA的python实现,限于时间和实际需求,没有对黑魔法部分完全解读,只保证FastICA实现能得到正确结果。
有兴趣的童鞋可以在未来补上相关内容。
ICA问题表述
设 X 是随机向量,且
X∈Rn×1
,这也就说, X 里有
n
个成员,每个成员是一个随机变量:
X=⎛⎝⎜⎜⎜⎜⎜⎜⎜⎜x1x2...xi...xn⎞⎠⎟⎟⎟⎟⎟⎟⎟⎟
其中,
xi
是一个随机变量。
随机变量有诸多特性,殆由概率论和数理统计教科书详述备尽,在此不一一叙述。
X 里的
n
个随机变量是相互非独立的,在一定的假设下,可以用 n 个相互独立的随机变量线性组合重新表达
X
,也就是说:
⎛⎝⎜⎜⎜⎜⎜⎜⎜⎜x1x2...xi...xn⎞⎠⎟⎟⎟⎟⎟⎟⎟⎟=A⎛⎝⎜⎜⎜⎜⎜⎜⎜⎜s1s2...si...sn⎞⎠⎟⎟⎟⎟⎟⎟⎟⎟
其中,
si
是一个随机变量,且两两相互独立,
A
是满秩矩阵,且
A∈Rn×n
。
令:
S=⎛⎝⎜⎜⎜⎜⎜⎜⎜⎜s1s2...si...sn⎞⎠⎟⎟⎟⎟⎟⎟⎟⎟
则:
X=AS
又有:
S=A−1X
令:
W=A−1
则:
S=WX
其中,
W∈Rn×n
。
记录随机向量 X 的值
m
次,则形成数据集:
D=⎛⎝⎜⎜⎜⎜d1,1d2,1...dn,1d1,2d2,2...dn,2............d1,md2,m...dn,m⎞⎠⎟⎟⎟⎟
其中,
D∈Rn×m
ICA的目标,就是在只知道 D 的情况下,估算
A
, W ,
S
的值。
实例:在一个大厅里,有 n 个人在随机聊天。在大厅的不同角落,布置
n
个麦克风记录大厅的声音,每秒一个记录,一共记录m秒。麦克风记录的混合声音,多个麦克风记录不同位置的混合声音。ICA的目标,就是从混声录音中将每个人的声音分离出来。
理论推导
由前可知:
si=(wi,1wi,2...wi,j...wi,n)⎛⎝⎜⎜⎜⎜⎜⎜⎜⎜x1x2...xi...xn⎞⎠⎟⎟⎟⎟⎟⎟⎟⎟
令:
wi=(wi,1wi,2...wi,j...wi,n)
则:
si=wiX
设随机变量 si 概率密度函数是 psi(si) ,其中 p 的右下角
si
表示随机变量标示,括号中的 s