我对ICA有疑问,这可能有点基础,但我是新手。我正在使用FastICA MATLAB toolbox
我将其用作:
[icasig] = fastica(train_data);
其中
train_data
的大小为[192x23]
。我的理解是:
icasig
应该是独立的组件,所以我期望它的大小为23x23
,即维数,如PCA
输出。相反,尺寸为22x192
,尺寸减小为22。我不明白这代表什么。
因此,我的问题是:
icasig
代表IC吗?那么,如果是这种情况,如何使用它在IC上投影原始数据?如果
icasig
代表IC上原始数据的投影,我如何提取IC本身以用于测试数据的另一投影?非常感谢你的帮助。
最佳答案
完整的fastica.m
输出为:
[icasig, A, W] = fastica(X); % outputs the estimated separating
matrix W and the corresponding mixing matrix A.
对于给定的数据矩阵
X
(假设X
是d x N矩阵,即每一行都是观察值),请考虑以下与[Y, A, W] = fastica(X).
的输出相对应的关系取消混音:
Y = W*X % X is separated on independent 'sources' Y
W
是一个k x d矩阵(k 混音:
X = A*Y % Y sources are combined through the mixing matrix A
A
是一个d x k矩阵,它混合了存储在矩阵Y
中的k个分量(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,因此其k值代表192个点。IC由A列中的向量给出。
icasig
已经为您提供了IC上原始数据的投影。您可以使用分隔矩阵W(接近W的伪逆矩阵)来投影一组新的点
Xn
by 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
。对于该图,我使用了双峰集,其中混合是J.Shlens,A Tutorial on Independent Component Analysis的2D旋转)。关于matlab - 如何在MATLAB中使用FastICA将数据投影到独立的组件上,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32212968/