我对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;


matlab - 如何在MATLAB中使用FastICA将数据投影到独立的组件上-LMLPHP

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

关于matlab - 如何在MATLAB中使用FastICA将数据投影到独立的组件上,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32212968/

10-12 16:32