前言
独立成分分析ICA是一个在多领域被应用的基础算法。ICA是一个不定问题,没有确定解,所以存在各种不同先验假定下的求解算法。相比其他技术,ICA的开源代码不是很多,且存在黑魔法–有些步骤并没有在论文里提到,但没有这些步骤是无法得到正确结果的。
本文给出一个ICA最大似然解法的推导,以及FastICA的python实现,限于时间和实际需求,没有对黑魔法部分完全解读,只保证FastICA实现能得到正确结果。
有兴趣的童鞋可以在未来补上相关内容。
ICA问题表述
设XX个成员,每个成员是一个随机变量:
X=⎛⎝⎜⎜⎜⎜⎜⎜⎜⎜x1x2...xi...xn⎞⎠⎟⎟⎟⎟⎟⎟⎟⎟X=(x1x2...xi...xn)
,也就是说:
⎛⎝⎜⎜⎜⎜⎜⎜⎜⎜x1x2...xi...xn⎞⎠⎟⎟⎟⎟⎟⎟⎟⎟=A⎛⎝⎜⎜⎜⎜⎜⎜⎜⎜s1s2...si...sn⎞⎠⎟⎟⎟⎟⎟⎟⎟⎟(x1x2...xi...xn)=A(s1s2...si...sn)
。
令:
S=⎛⎝⎜⎜⎜⎜⎜⎜⎜⎜s1s2...si...sn⎞⎠⎟⎟⎟⎟⎟⎟⎟⎟S=(s1s2...si...sn)
则:
X=ASX=AS
又有:
S=A−1XS=A−1X
令:
W=A−1W=A−1
则:
S=WXS=WX
次,则形成数据集:
D=⎛⎝⎜⎜⎜⎜d1,1d2,1...dn,1d1,2d2,2...dn,2............d1,md2,m...dn,m⎞⎠⎟⎟⎟⎟D=(d1,1d1,2...d1,md2,1d2,2...d2,m............dn,1dn,2...dn,m)
个麦克风记录大厅的声音,每秒一个记录,一共记录m秒。麦克风记录的混合声音,多个麦克风记录不同位置的混合声音。ICA的目标,就是从混声录音中将每个人的声音分离出来。
理论推导
由前可知:
si=(wi,1wi,2...wi,j...wi,n)⎛⎝⎜⎜⎜⎜⎜⎜⎜⎜x1x2...xi...xn⎞⎠⎟⎟⎟⎟⎟⎟⎟⎟ si=(wi,1wi,2...wi,j...wi,n)(x1x2...xi...xn)
令:
wi=(wi,1wi,2...wi,j...wi,n)wi=(wi,1wi,2...wi,j...wi,n)
则:
si=wiXsi=wiX
,根据概率分布函数和概率密度函数的关系可知:
pX(x)=F′X(x)pX(x)=FX′(x)
,则:
pS(s)=F′S(s)pS(s)=FS′(s)
根据概率分布函数的定义,有:
FX(x)=P(X<x)FX(x)=P(X<x)
FS(s)=P(S<s)FS(s)=P(S<s)
那么:
pX(x)=F′X(x)=(P(X<x))′=(P(U<u))′=(P(U<s))′=(∥P(U<Wx)∥)′=(∥P(S<Wx)∥)′=(∥FS(Wx)∥)′=∥F′S(Wx)∥=∥pS(Wx)(Wx)′∥=∥pS(W