Kernel Independent Component Analysis
 Last updated: July 17th, 2003

Matlab code - version 1.2
Future improvements


The kernel-ica package is a  Matlab program that implements the Kernel ICA algorithm for independent component analysis (ICA). 

The Kernel ICA algorithm is based on the minimization of a contrast function based on kernel ideas. A contrast function measures the statistical dependence between components, thus when applied to estimated components and minimized over possible demixing matrices, components that are as independent as possible are found. For more information, please read the following paper:

Francis R. Bach, Michael I. Jordan.
Kernel Independent Component Analysis, 
Journal of Machine Learning Research, 3, 1-48, 2002. [ps.gz] [pdf]

Matlab code - version 1.2

Version 1.2 is a an implementation of the Kernel ICA algorithm presented in the previous paper. It performs linear ICA with the same number of sources and mixtures. It can be efficiently utilized for any number of components and any number of training samples. Precise instructions on how to use the package are included in the archive file.

Note that some routines (incomplete Cholesky decomposition) are implemented in C and for optimal performance should be precompiled at the matlab prompt (using the mex command ) the first time you use the package. Instructions are included in the distribution.   If you don't want to use the C code, the package will still work, though slower.

The kernel-ica package is Copyright (c) 2002 by Francis Bach. If you have any questions or comments regarding this package, or if you want to report any bugs, please send an e-mail to The current version 1.2 has been released on July 17th, 2003. Check this web page regularly for newer versions.

The package now also includes a Matlab function to sample from the distributions used in the JMLR paper.

kernel-ica version 1.0

kernel-ica version 1.1

kernel-ica version 1.2



Future improvements

-Under-complete ICA: it is straightforward to generalize our algorithm to the under-complete ICA case (i.e. more sources than observed mixtures).

-Multidimensional ICA: our framework applies equally well to univariate and multivariate components. A new algorithm to look for clusters in ICA can be found here. It uses the tree-dependent component analysis framework, as described in the following paper:

Francis R. Bach, Michael I. Jordan. Finding clusters in independent component analysis,
Fourth International Symposium on Independent Component Analysis and Blind Signal
, 2003.
[ps] [pdf]

-Tree-dependent component analysis (TCA): we generalized the ICA framework to richer graphical models (see here for a tutorial on graphical models), where instead of looking for a linear transform that makes the data components independent, we are looking for components that can be best fitted in a tree structured graphical model. The TCA model can be applied in any situation where the data can be assumed to have been transformed by an unknown linear transformation. A Matlab implementation can be found here and the algorithms are described in the following paper:

Francis R. Bach, Michael I. Jordan. Tree-dependent component analysis,
Uncertainty in Artificial Intelligence (UAI): Proceedings of the Eighteenth Conference, 2002.
[ps.gz] [pdf]



-Synthetic examples: in our paper we provide simulation results on a wide range of synthetic distributions. In the simple 2 sources / 2 mixtures setting, we illustrate the performance of our algorithms and in particular its robustness to source distributions, "Gaussianity" and outliers, with a significant improvement over currently available algorithms. Detailed results can be found in the paper.

-Audio blind source separation: we also ran some experiments with real sounds that were artificially mixed. They can be found here.