ICA - 协方差矩阵的统计独立性和特征值

Rac*_*hel 5 statistics matlab machine-learning

我目前正在使用Matlab创建不同的信号,通过将它们乘以混合矩阵A来混合它们,然后尝试使用FastICA获取原始信号.

到目前为止,与原始信号相比,恢复的信号非常糟糕,这不是我的预期.

我正试图看看我做错了什么.我正在生成的信号如下:(幅度在[0,1]范围内.)

s1 = (-x.^2 + 100*x + 500) / 3000; % quadratic
s2 = exp(-x / 10); % -ve exponential
s3 = (sin(x)+ 1) * 0.5; % sine
s4 = 0.5 + 0.1 * randn(size(x, 2), 1); % gaussian
s5 = (sawtooth(x, 0.75)+ 1) * 0.5; % sawtooth
Run Code Online (Sandbox Code Playgroud)

原始信号

ICA成功的一个条件是至多一个信号是高斯信号,我在信号生成中观察到这一点.

然而,另一个条件是所有信号在统计上是独立的.

我所知道的是,这意味着,给定两个信号A和B,知道一个信号不会给出关于另一个信号的任何信息,即:P(A | B)= P(A)其中P是概率.

现在我的问题是:我的信号在统计上是独立的吗?有什么办法可以确定吗?也许一些必须遵守的财产?

我注意到的另一件事是,当我计算协方差矩阵的特征值(针对包含混合信号的矩阵计算)时,特征谱似乎表明只有一个(主要)主成分.这究竟意味着什么?不应该有5,因为我有5个(据称)独立信号?

例如,使用以下混合矩阵时:

A =

0.2000    0.4267    0.2133    0.1067    0.0533
0.2909    0.2000    0.2909    0.1455    0.0727
0.1333    0.2667    0.2000    0.2667    0.1333
0.0727    0.1455    0.2909    0.2000    0.2909
0.0533    0.1067    0.2133    0.4267    0.2000
Run Code Online (Sandbox Code Playgroud)

特征值是:( 0.0000 0.0005 0.0022 0.0042 0.0345只有4!)

当使用单位矩阵作为混合矩阵时(即混合信号与原始信号相同),本征谱是:0.0103 0.0199 0.0330 0.0811 0.1762.还有一个值比其他值大得多..

谢谢您的帮助.

如果我的问题的答案非常明显,我很抱歉,但我对统计数据,ICA和Matlab都不熟悉.再次感谢.

编辑 -我有500个样本的每个信号,在[0.2,100]范围内,步长为0.2,即x = 0:0.1:100.

编辑 -鉴于ICA模型:X = As + n(我现在没有添加任何噪声),但我指的是X的转置的本征谱,即eig(cov(X')).

mac*_*uff 0

要确定信号是否相互独立,您可以查看此处描述的技术 。一般来说,如果两个随机变量正交,则它们是独立的。这意味着: E{s1*s2} = 0 意味着随机变量 s1 乘以随机变量 s2 的期望为零。这种正交条件在统计和概率中极其重要,并且随处可见。不幸的是它一次适用于 2 个变量。有多种技术,但没有一个是我愿意推荐的。我挖掘的另一个链接是这个不确定你的应用程序是什么,但那篇论文做得很好

当我计算协方差矩阵时,我得到:

cov(A) =
 0.0619   -0.0284   -0.0002   -0.0028   -0.0010
-0.0284    0.0393    0.0049    0.0007   -0.0026
-0.0002    0.0049    0.1259    0.0001   -0.0682
-0.0028    0.0007    0.0001    0.0099   -0.0012
-0.0010   -0.0026   -0.0682   -0.0012    0.0831
Run Code Online (Sandbox Code Playgroud)

具有特征向量V和值D

[V,D] = eig(cov(A))

V =

-0.0871    0.5534    0.0268   -0.8279    0.0063
-0.0592    0.8264   -0.0007    0.5584   -0.0415
-0.0166   -0.0352    0.5914   -0.0087   -0.8054
-0.9937   -0.0973   -0.0400    0.0382   -0.0050
-0.0343    0.0033    0.8050    0.0364    0.5912
D =
0.0097         0         0         0         0
     0    0.0200         0         0         0
     0         0    0.0330         0         0
     0         0         0    0.0812         0
     0         0         0         0    0.1762
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

x = transpose(0.2:0.2:100);
s1 = (-x.^2 + 100*x + 500) / 3000; % quadratic
s2 = exp(-x / 10); % -ve exponential
s3 = (sin(x)+ 1) * 0.5; % sine
s4 = 0.5 + 0.1 * randn(length(x), 1); % gaussian
s5 = (sawtooth(x, 0.75)+ 1) * 0.5; % sawtooth
A = [s1 s2 s3 s4 s5];
cov(A)
[V,D] = eig(cov(A))
Run Code Online (Sandbox Code Playgroud)

如果我可以提供更多帮助,或者我是否误解了,请告诉我。

编辑正确引用特征值和向量,使用 0.2 采样间隔添加代码。