{{ message }}

# pierreablin / picard

Preconditioned ICA for Real Data

## Files

Failed to load latest commit information.
Type
Name
Commit time

# Picard : Preconditioned ICA for Real Data

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

See the documentation.

## Algorithm

Picard is an algorithm for maximum likelihood independent component analysis. It shows state of the art speed of convergence, and solves the same problems as the widely used FastICA, Infomax and extended-Infomax, faster. The parameter ortho choses whether to work under orthogonal constraint (i.e. enforce the decorrelation of the output) or not. It also comes with an extended version just like extended-infomax, which makes separation of both sub and super-Gaussian signals possible. It is chosen with the parameter extended.

• ortho=False, extended=False: same solution as Infomax
• ortho=False, extended=True: same solution as extended-Infomax
• ortho=True, extended=True: same solution as FastICA
• ortho=True, extended=False: finds the same solutions as Infomax under orthogonal constraint.

## Installation

Picard requires Python >= 3.6.

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

```\$ pip install python-picard
```

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

The Matlab/Octave version of Picard and Picard-O is available here.

## Quickstart

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

```>>> 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:

```>>> 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:

```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

```Pierre Ablin, Jean-Francois Cardoso, Alexandre Gramfort
Faster independent component analysis by preconditioning with Hessian approximations
IEEE Transactions on Signal Processing, 2018
https://arxiv.org/abs/1706.08171

Pierre Ablin, Jean-François Cardoso, Alexandre Gramfort
Faster ICA under orthogonal constraint
ICASSP, 2018
https://arxiv.org/abs/1711.10873
```

Preconditioned ICA for Real Data