[pymvpa] ICAMapper using MDP

Michael Hanke michael.hanke at gmail.com
Wed Jun 25 15:12:20 UTC 2008

Hey guys,

I finally started working on an ICA mapper implementation, which is
probably one of our oldest feature requests. I was planning to use MDP
and therefore support any ICA algorithm offered by MDP.

However, I was hit by the same problem I had with the PCAMapper (which
is now a SVDMapper, for that reason):

MDP seems to use the same data layout as we do: observations x variables
(samples x features). If I do an ICA on a samples matrix that is 1000x20
things are fine. However, with fMRI we rather have the transposed case
(20x1000). As we all know, that imposes the problem of a rank-deficiant
matrix (more variables than datapoints).  MDP solves this problem by
doing SVD before computing the ICA, at least they will, once they


However, the resulting projection or mixing matrix will be of size
nfeatures x nfeatures. In the case of fMRI this is not funny (i.e.
several GBs of storage space, just for the transformation matrix -- and
we also need the backprojection one ...).

So, I wonder if anyone of you knows the solution to the problem. I
thought about doing ICA on the transposed samples matrix, whenever there
are more features than samples (as there cannot be more components than
samples). However, that results in a mix/unmix matrix that matches the
number of samples and not the number of features -- but this is critical
as to be (back)projected samples will only have the same number of

Is there some sane way to project the unmix/mix matrices into the
feature space, e.g. be multiplying them with the data matrix the ICA was
trained with? I have a feeling that it should be possible but I'm
lacking the right intuition.

Help is very much appreciated!

I pushed a broken skeleton of an ICAMapper and its unit test -- just as
a demo. In case you wonder why it looks very similar to the SVDMapper:
My plan is to refactor out 'ProjectionMapper' which will be the
baseclass of all mappers that do their thing with two projection matrices.
PCA, ICA and SVDMapper will be subclasses at that point and will only
implement train() differently.

Thanks in advance,


GPG key:  1024D/3144BE0F Michael Hanke
ICQ: 48230050

More information about the Pkg-ExpPsy-PyMVPA mailing list