我有关于ICA的问题,它可能有点基础,但我是新手。我正在使用FastICA MATLAB toolbox
我用它作为:
[icasig] = fastica(train_data);
train_data
的大小为[192x23]
。
我理解的是:icasig
应该是独立的组件,因此我希望它的大小为23x23
,维度编号,如PCA
输出。而是大小为22x192
,其中尺寸减少到22。
我不明白这代表什么。
所以,我的问题是:icasig
代表IC吗?那么,如果是这种情况,如何使用它来在IC上投影原始数据?
如果icasig
表示原始数据在IC上的投影,我如何提取IC本身以用于另一个testdata投影?
非常感谢你的帮助。
答案 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值表示。icasig
已经为您提供了有关IC的原始数据的投影。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;
(将gendata
替换为您自己的数据生成函数。对于绘图,我使用了双峰集,其中混合是2D旋转,来自J. Shlens,A Tutorial on Independent Component Analysis)