Skip to main content

Preconditoned ICA for Real Data

Project description

Picard : Preconditioned ICA for Real Data
=========================================

|Travis|_ |Codecov|_

.. |Travis| image:: https://api.travis-ci.org/pierreablin/picard.svg?branch=master
.. _Travis: https://travis-ci.org/pierreablin/picard

.. |Codecov| image:: http://codecov.io/github/pierreablin/picard/coverage.svg?branch=master
.. _Codecov: http://codecov.io/github/pierreablin/picard?branch=master

This repository hosts Python/Octave/Matlab code of the Preconditioned ICA
for Real Data (Picard) and Picard-O algorithms.

See the `documentation <https://pierreablin.github.io/picard/index.html>`_.

Algorithm
---------

Picard is an algorithm for maximum likelihood independent component analysis.
It solves the same problem as Infomax, faster.
It uses a preconditioned L-BFGS strategy, resulting in a very fast convergence.


Picard-O uses an adaptation of that strategy to solve the same problem under the
constraint of whiteness of the signals. It solves the same problem as
FastICA, but faster.

Picard-O is able to recover both super-Gaussian and sub-Gaussian sources.


Installation
------------

To install the package, the simplest way is to use pip to get the latest release::

$ pip install python-picard

or to get the latest version of the code::

$ pip install git+https://github.com/pierreablin/picard.git#egg=picard

The Matlab/Octave version of Picard and Picard-O is `available here <https://github.com/pierreablin/picard/tree/master/matlab_octave>`_.

Quickstart
----------

To get started, you can build a synthetic mixed signals matrix:

.. code:: python

>>> import numpy as np
>>> N, T = 3, 1000
>>> S = np.random.laplace(size=(N, T))
>>> A = np.random.randn(N, N)
>>> X = np.dot(A, S)

And then use Picard to separate the signals:

.. code:: python

>>> from picard import picard
>>> K, W, Y = picard(X)

Picard outputs the whitening matrix, K, the estimated unmixing matrix, W, and
the estimated sources Y. It means that:

.. math::

Y = W K X

Dependencies
------------

These are the dependencies to use Picard:

* numpy (>=1.8)
* matplotlib (>=1.3)
* numexpr (>= 2.0)
* scipy (>=0.19)


These are the dependencies to run the EEG example:

* mne (>=0.14)

Cite
----

If you use this code in your project, please cite::

Pierre Ablin, Jean-Francois Cardoso, Alexandre Gramfort
Faster independent component analysis by preconditioning with Hessian approximations
ArXiv Preprint, June 2017
https://arxiv.org/abs/1706.08171

Pierre Ablin, Jean-François Cardoso, Alexandre Gramfort
Faster ICA under orthogonal constraint
ArXiv Preprint, Nov 2017
https://arxiv.org/abs/1711.10873

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for python-picard, version 0.2
Filename, size File type Python version Upload date Hashes
Filename, size python_picard-0.2-py3.6.egg (21.5 kB) File type Egg Python version 3.6 Upload date Hashes View
Filename, size python-picard-0.2.tar.gz (14.0 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring DigiCert DigiCert EV certificate Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page