独立成分分析ICA
by:Yang Liu
1.ICA(independent component analysis)的定义:利用很少的先验知识将混合信息分离成独立分量的一种重要方法。目的是找到一组分量,此分量应该最大化独立,进而发现数据中一些隐藏的信息。
2.ICA的经典模型:
“鸡尾酒会”的问题,人的大脑从嘈杂的酒会中快速的区分出自己想要的声音。
X
j
=
A
j
1
S
1
+
A
j2
S
2
+
A
j3
S
3
.
.
.
+
A
jn - 1
S
n
−
1
+
A
jn
S
n
{X_j} = {A_{{\text{j}}1}}{S_1} + {A_{{\text{j2}}}}{S_2} + {A_{{\text{j3}}}}{S_3}... + {A_{{\text{jn - 1}}}}{S_{n - 1}} + {A_{{\text{jn}}}}{S_n}
Xj=Aj1S1+Aj2S2+Aj3S3...+Ajn - 1Sn−1+AjnSn
矩阵形式
X
=
A
S
{X} = {A}{S}
X=AS 其中X是已知的,A和S是未知的;目标是通过X来估计出A和S。
模型中的两个不确定因素:
(1)输出向量排列顺序的不确定性,即无法确定所提取的信号对应原始信号源的哪一个分量;
(2)输出信号幅度的不确定性,即无法恢复到信号源的真实幅度。
因为有两个未知量,所以为了使ICA模型能被估计则我们需要提出假设前提和条件,如下:
(1)独立成分被假定为是统计独立的。
ICA成立的前提;也就是说S中的各个随机变量独立,从统计学角度看,就是联合概率密度等于边缘概率密度的乘积。
P
(
X
1
,
X
2
)
=
P
(
X
1
)
P
(
X
2
)
P({X_1},{X_2}) = P({X_1})P({X_2})
P(X1,X2)=P(X1)P(X2)
E
(
X
1
,
X
2
)
=
E
(
X
1
)
E
(
X
2
)
E({X_1},{X_2}) = E({X_1})E({X_2})
E(X1,X2)=E(X1)E(X2)
独立肯定不相关,不相关不一定独立,因为不相关一般所指仅是在线性领域,即独立是比不相关更强的约束。在PCA中各个分量是不相关的,在ICA中各个分量是独立的。总的来说,ICA认为观测信号是若干个统计独立的分量的线性组合,ICA要做的是一个解混过程。而PCA是一个信息提取的过程,将原始数据降维,现已成为ICA将数据标准化的预处理步骤。
(2)独立成分是非高斯分布。
如果观测到的变量是高斯分布(正态分布),那么ICA是不可能实现的,我们无法恢复出唯一的S,因为高斯分布中的各个方向是等价的。
两个均服从高斯分布的联合概率密度是
P
(
X
1
,
X
2
)
=
1
2
π
exp
(
−
X
1
2
+
X
2
2
2
)
P({X_1},{X_2}) = \frac{1}{{2\pi }}\exp ( - \frac{{X_1^2 + X_2^2}}{2})
P(X1,X2)=2π1exp(−2X12+X22)
从图像中可知联合概率密度没有边缘信息,也可以说没有A的列向量信息。
可以认为越接近高斯分布独立性越差,反之,越远离高斯分布,独立性越强。根据中心极限定理有,独立随机变量的和在一定条件下趋于高斯分布,即独立随机变量的和比独立随机变量更趋于高斯分布。
(3)假定混合矩阵A是方阵。
也就是说,X变量的个数和S中变量的个数相同。因为要对A求逆矩阵,所以A一定为方阵。
3.寻找独立成分的方法:
固定点算法(fastICA)
(1)涉及的数学原理
牛顿迭代法:
熵:
对一个离散取值的随机变量变量X,其熵H的定义为:
H
(
x
)
=
−
∑
P
(
x
i
)
log
(
P
(
x
i
)
)
H(x) = - \sum {P({x_i})\log (P({x_i}))}
H(x)=−∑P(xi)log(P(xi)) 其中
x
i
{{x_i}}
xi是X的可能取值,P是取值的概率。
对一个连续取值的的随机变量X,熵H的定义为:
H
(
X
)
=
−
∫
a
b
P
(
X
)
log
P
(
X
)
d
x
H(X) = - \int_a^{\text{b}} {P(X)\log P(X)d{\text{x}}}
H(X)=−∫abP(X)logP(X)dx ,称为微分熵。随机变量越随机其熵越大。
负熵:
N
g
(
Y
)
=
H
(
Y
G
)
−
H
(
Y
)
{N_{\text{g}}}(Y) = H({Y_G}) - H(Y)
Ng(Y)=H(YG)−H(Y)式中,
Y
G
{Y_G}
YG是与Y具有相同方差的高斯随机变量。在具有相同方差的随机变量中,高斯随机变量具有最大的微分熵,当随机变量服从高斯分布时负熵为零,也就是说随机变量非高斯型越强,其微分熵越小负熵越大,所以可以根据负熵的大小,判定随机变量的非高斯性。
归一化:
将观测数据X归一化,即减去其均值m=E{x}使其具有零均值。
白化:
若一个零均值的随机变量Z,满足
E
(
Z
Z
T
)
=
I
E(Z{Z^T}) = I
E(ZZT)=I,其中I是单位矩阵,我们称Z为白化向量,白化的本质是去相关,这和PCA的目的是一样的。白化数据的一般方法是,对数据协方差进行特征值分解,
x
1
=
E
D
−
1
2
E
T
X
{x^1} = E{D^{ - \frac{1}{2}}}{E^T}X
x1=ED−21ETX,其中E是协方差矩阵的特征向量的正交阵,D是协方差矩阵特征值的对角矩阵。
白化使我们需要确定的参数减少了一般,因为原矩阵的自由度是
n
2
{n^2}
n2,白化后所得正交矩阵的自由度是
n
(
n
−
1
)
2
\frac{{n(n - 1)}}{2}
2n(n−1)。
白化后的X有
E
(
X
X
T
)
=
I
E(X{X^T}) = I
E(XXT)=I,I是单位矩阵。因为有约束
E
{
S
i
2
}
=
1
E\{ {S_{\text{i}}}^2\} = 1
E{Si2}=1,所以变换后的A为正交矩阵。
FastICA迭代算法:
x
=
A
s
x = As
x=As,
s
=
A
−
1
x
s = {A^{ - 1}}x
s=A−1x,
另
Y
=
W
T
X
.
Z
=
A
T
W
,
Y
=
W
T
X
=
W
T
A
s
=
Z
T
s
Y = {W^T}X.Z = {A^T}W,Y = {W^T}X = {W^T}As = {Z^T}{\text{s}}
Y=WTX.Z=ATW,Y=WTX=WTAs=ZTs
此时Y是s的线性组合,Y比s更具有高斯性,当Y等于s时,Y具有最大非高斯性。
ICA要做的就是就是要找到一个最优方向 ,使此方向的非高斯性最大,也就是负熵最大,
J
g
(
Y
)
=
H
(
Y
G
)
−
H
(
Y
)
{J_{\text{g}}}(Y) = H({Y_G}) - H(Y)
Jg(Y)=H(YG)−H(Y),
在fastICA中的近似算法为
J
(
Y
)
=
{
E
{
G
(
Y
)
}
−
E
{
G
(
V
)
}
}
2
J(Y) = {\{ E\{ G(Y)\} - E\{ G(V)\} \} ^2}
J(Y)={E{G(Y)}−E{G(V)}}2,
E(.)表示均值运算,G(.)表示非线性函数,V是均值为零方差为1的高斯随机变量。
常取
G
1
(
u
)
=
1
a
1
log
cos
a
1
u
,
G
2
(
u
)
=
−
exp
(
−
u
2
2
)
{G_1}({\text{u}}) = \frac{1}{{{a_1}}}\log \cos {a_1}u,{G_2}(u) = - \exp ( - \frac{{{u^2}}}{2})
G1(u)=a11logcosa1u,G2(u)=−exp(−2u2)。
导数为
g
1
(
u
)
=
tanh
(
a
1
u
)
,
g
2
(
u
)
=
u
exp
(
−
u
2
2
)
{g_1}(u) = \tanh ({a_1}u),{g_2}(u) = u\exp ( - \frac{{{u^2}}}{2})
g1(u)=tanh(a1u),g2(u)=uexp(−2u2)。g(.)表示为G(.)的导数。
a
1
{a_1}
a1属于[1,2]中的一个合适常量,一般
a
1
{a_1}
a1取1。
因为S和A是未知的所以S乘以一个标量K,A总能乘以一个1/K来抵消,即不能唯一确定S和A,因此做如下约束
E
{
S
i
2
}
=
1
E\{ {S_{\text{i}}}^2\} = 1
E{Si2}=1,既有
E
{
(
W
T
X
)
2
}
=
∣
∣
W
∣
∣
2
=
1
E\{ {({W^T}X)^2}\} = ||W|{|^2} = 1
E{(WTX)2}=∣∣W∣∣2=1,在此约束条件下,
E
{
G
(
W
T
X
)
}
E\{ G({W^T}X)\}
E{G(WTX)} 的最适条件可通过
E
{
X
g
(
W
T
X
)
}
−
β
W
=
0
E\{ X{\text{g}}{(W^T}X)\} - \beta W = 0
E{Xg(WTX)}−βW=0来获得。
用牛顿法解此方程,定义左侧为F,则其雅克比矩阵J{F(W)}为:
J
{
F
(
W
)
}
=
E
{
X
X
T
g
′
(
W
T
X
)
}
−
β
I
J\{ F(W)\} = E\{ X{X^T}{g'}({W^T}X)\} - \beta I
J{F(W)}=E{XXTg′(WTX)}−βI
上式右侧第一项可化简为:
E
{
X
X
T
g
′
(
W
T
X
)
}
=
E
(
X
X
T
)
E
{
g
′
(
W
T
X
)
}
=
E
{
g
′
(
W
T
X
)
}
I
E\{ X{X^T}g'({W^T}X)\} = E(X{X^T})E\{ g'({W^T}X)\} = E\{ g'({W^T}X)\} I
E{XXTg′(WTX)}=E(XXT)E{g′(WTX)}=E{g′(WTX)}I,则雅克比矩阵变成对角可逆的;
牛顿迭代公式有:
W
+
=
W
−
E
{
X
g
(
W
T
X
)
}
−
β
W
E
{
g
′
(
W
T
X
)
}
−
β
{W^ + } = W - \frac{{E\{ Xg({W^T}X)\} - \beta W}}{{E\{ g'({W^T}X)\} - \beta }}
W+=W−E{g′(WTX)}−βE{Xg(WTX)}−βW,
化简有
W
+
=
E
{
X
g
(
W
T
X
)
}
−
E
{
g
′
(
W
T
X
)
}
W
{W^ + } = E\{ Xg({W^T}X)\} - E\{ g'({W^T}X)\} W
W+=E{Xg(WTX)}−E{g′(WTX)}W
综上一次fastICA的算法形式为:
1.初始化向量W;
2.令
W
+
=
E
{
X
g
(
W
T
X
)
}
−
E
{
g
′
(
W
T
X
)
}
W
{W^ + } = E\{ Xg({W^T}X)\} - E\{ g'({W^T}X)\} W
W+=E{Xg(WTX)}−E{g′(WTX)}W;
3.令
W
=
W
+
∣
∣
W
+
∣
∣
W = \frac{{{W^ + }}}{{||{W^ + }||}}
W=∣∣W+∣∣W+;
4.若W没有收敛,则回到2。收敛意味着前后两次W在同一方向上,且3步把W单位化了,所以点积为1。(简单的说,收敛就是输入和输出差别很小。)
一次算法估计出一个W值,为了得到若干个值,则需进行若干次算法,为了防止所得到的结果收敛在同一最大值,需要对每一次的输出
W
T
X
{W^T}X
WTX去相关。
使用Gram-Schmidt去相关,因为向量的点积为1,所以有:
W
p
+
1
=
W
p
+
1
−
∑
i
=
1
p
(
W
P
+
1
,
W
i
)
W
i
{W_{p + 1}} = {W_{p + 1}} - \sum\limits_{i = 1}^p {({W_{P + 1}},{W_i}){W_i}}
Wp+1=Wp+1−i=1∑p(WP+1,Wi)Wi
W
p
+
1
=
W
p
+
1
∣
∣
W
P
+
1
∣
∣
{W_{p + 1}} = \frac{{{W_{p + 1}}}}{{||{W_{P + 1}}||}}
Wp+1=∣∣WP+1∣∣Wp+1
参考文献:
1.https://wenku.baidu.com/view/9af7eb115f0e7cd1842536e9.html?sxts=1591069811772
2.https://blog.csdn.net/ctyqy2015301200079/article/details/86705869
3.https://www.zhihu.com/topic/20658238/hot
4.https://blog.csdn.net/qq_44945010/article/details/89413446
5.https://wenku.baidu.com/view/ad92875a112de2bd960590c69ec3d5bbfc0ada0f.html
6.https://wenku.baidu.com/view/ebb635bf9a89680203d8ce2f0066f5335a8167d6.html