如何使用MATLAB中的FastICA将数据投影到独立组件

时间:2015-08-25 19:58:38

标签: matlab machine-learning signal-processing

我有关于ICA的问题,它可能有点基础,但我是新手。我正在使用FastICA MATLAB toolbox

我用它作为:

[icasig] = fastica(train_data);

train_data的大小为[192x23]

我理解的是:icasig应该是独立的组件,因此我希望它的大小为23x23,维度编号,如PCA输出。而是大小为22x192,其中尺寸减少到22。 我不明白这代表什么。

所以,我的问题是:icasig代表IC吗?那么,如果是这种情况,如何使用它来在IC上投影原始数据?

如果icasig表示原始数据在IC上的投影,我如何提取IC本身以用于另一个testdata投影?

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

完整的fastica.m输出为:

[icasig, A, W] = fastica(X); % outputs the estimated separating
matrix W and the corresponding mixing matrix A.

对于给定的数据矩阵X(假设X是adx N矩阵,即每行是一个观察点),请考虑以下与[Y, A, W] = fastica(X). <的输出相对应的关系/ p>

取消混音Y = W*X % X is separated on independent 'sources' Y

W是k×d矩阵(k <= d),其将源或独立分量与X(d×N)中的混合物分开并将它们存储在Y(k×N)中。如果k小于d,则得到的表示具有降低的维数。

混合X = A*Y % Y sources are combined through the mixing matrix A

A是d×k矩阵,其混合存储在矩阵Y中的k个分量(k <= d),其是k×N(对于N个观测值)。 A存储从X提取的独立分量,即d维向量,总数为k数。此外,Y存储源或 X的投影在独立组件上

fastica的输出检查以下规范的值(规范越小,ICA算法的分离越准确):

norm(W*X - Y)
norm(X - A*Y)
norm(pinv(A) - W)
norm(pinv(W) - A)

关于OP问题:

  • icasig代表负责数据的来源或从train_data估算的IC上输入数据的投影。在这种情况下,发现了k个IC,因此192个点由它们的k值表示。
  • IC由A列中的矢量给出。
  • icasig已经为您提供了有关IC的原始数据的投影。
  • 您可以使用分隔矩阵W(接近W的伪逆)来按Xn投影一组新的Yn = W*Xn点。

示例:

% Generate data (N=1000) from distribution
X = gendata(1000);

% Estimate ICs and projections of X  
[Y, A, W] = fastica(X, 'approach', 'defl');    

% New points from the same distribution  
Xn = gendata(50);

% Project new point on ICA estimated independent components  
Yn = W*Xn;

enter image description here

(将gendata替换为您自己的数据生成函数。对于绘图,我使用了双峰集,其中混合是2D旋转,来自J. Shlens,A Tutorial on Independent Component Analysis