Skip to main content

Machine learning for multivariate data with Riemannian geometry

Project description

pyRiemann

Code PythonVersion PyPI version Build Status codecov Documentation Status DOI Downloads

pyRiemann is a Python machine learning package based on scikit-learn API. It provides a high-level interface for processing and classification of real (resp. complex)-valued multivariate data through the Riemannian geometry of symmetric (resp. Hermitian) positive definite (SPD) (resp. HPD) matrices.

The documentation is available on http://pyriemann.readthedocs.io/en/latest/

This code is BSD-licensed (3 clause).

Description

pyRiemann aims at being a generic package for multivariate data analysis but has been designed around biosignals (like EEG, MEG or EMG) manipulation applied to brain-computer interface (BCI), estimating covariance matrices from multichannel time series, and classifying them using the Riemannian geometry of SPD matrices [1].

For BCI applications, studied paradigms are motor imagery [2] [3], event-related potentials (ERP) [4] and steady-state visually evoked potentials (SSVEP) [5]. Using extended labels, API allows transfer learning between sessions or subjects [6].

Another application is remote sensing, estimating covariance matrices over spatial coordinates of radar images using a sliding window, and processing them using the Riemannian geometry of SPD matrices for hyperspectral images, or HPD matrices for synthetic-aperture radar (SAR) images.

Installation

Using PyPI

pip install pyriemann

or using pip+git for the latest version of the code:

pip install git+https://github.com/pyRiemann/pyRiemann

Using conda

The package is distributed via conda-forge. You could install it in your working environment, with the following command:

conda install -c conda-forge pyriemann

From sources

For the latest version, you can install the package from the sources using pip:

pip install .

or in editable mode to be able to modify the sources:

pip install -e .

How to use

Most of the functions mimic the scikit-learn API, and therefore can be directly used with sklearn. For example, for cross-validation classification of EEG signal using the MDM algorithm described in [2], it is easy as:

import pyriemann
from sklearn.model_selection import cross_val_score

# load your data
X = ... # EEG data, in format n_epochs x n_channels x n_times
y = ... # labels

# estimate covariance matrices
cov = pyriemann.estimation.Covariances().fit_transform(X)

# build your classifier
mdm = pyriemann.classification.MDM()

# cross validation
accuracy = cross_val_score(mdm, cov, y)

print(accuracy.mean())

You can also pipeline methods using sklearn pipeline framework. For example, to classify EEG signal using a SVM classifier in the tangent space, described in [3]:

from pyriemann.estimation import Covariances
from pyriemann.tangentspace import TangentSpace
from sklearn.pipeline import make_pipeline
from sklearn.model_selection import cross_val_score
from sklearn.svm import SVC

# load your data
X = ... # EEG data, in format n_epochs x n_channels x n_times
y = ... # labels

# build your pipeline
clf = make_pipeline(
    Covariances(),
    TangentSpace(),
    SVC(kernel="linear"),
)

# cross validation
accuracy = cross_val_score(clf, X, y)

print(accuracy.mean())

Check out the example folder for more examples.

Contribution Guidelines

The package aims at adopting the scikit-learn and MNE-Python conventions as much as possible. See their contribution guidelines before contributing to the repository.

Testing

If you make a modification, run the test suite before submitting a pull request

pytest

How to cite

@software{pyriemann,
  author       = {Alexandre Barachant and
                  Quentin Barthélemy and
                  Jean-Rémi King and
                  Alexandre Gramfort and
                  Sylvain Chevallier and
                  Pedro L. C. Rodrigues and
                  Emanuele Olivetti and
                  Vladislav Goncharenko and
                  Gabriel Wagner vom Berg and
                  Ghiles Reguig and
                  Arthur Lebeurrier and
                  Erik Bjäreholt and
                  Maria Sayu Yamamoto and
                  Pierre Clisson and
                  Marie-Constance Corsi and
                  Igor Carrara and
                  Apolline Mellot and
                  Bruna Junqueira Lopes and
                  Brent Gaisford and
                  Ammar Mian and
                  Anton Andreev and
                  Gregoire Cattan and
                  Arthur Lebeurrier},
  title        = {pyRiemann},
  month        = oct,
  year         = 2024,
  version      = {v0.7},
  publisher    = {Zenodo},
  doi          = {10.5281/zenodo.593816},
  url          = {https://doi.org/10.5281/zenodo.593816}
}

References

[1] M. Congedo, A. Barachant and R. Bhatia, "Riemannian geometry for EEG-based brain-computer interfaces; a primer and a review". Brain-Computer Interfaces, 4.3, pp. 155-174, 2017. link

[2] A. Barachant, S. Bonnet, M. Congedo and C. Jutten, "Multiclass Brain-Computer Interface Classification by Riemannian Geometry". IEEE Transactions on Biomedical Engineering, vol. 59, no. 4, pp. 920-928, 2012. link

[3] A. Barachant, S. Bonnet, M. Congedo and C. Jutten, "Classification of covariance matrices using a Riemannian-based kernel for BCI applications". Neurocomputing, 112, pp. 172-178, 2013. link

[4] A. Barachant and M. Congedo, "A Plug&Play P300 BCI Using Information Geometry". Research report, 2014. link

[5] EK. Kalunga, S. Chevallier, Q. Barthélemy, K. Djouani, E. Monacelli and Y. Hamam, "Online SSVEP-based BCI using Riemannian geometry". Neurocomputing, 191, pp. 55-68, 2014. link

[6] PLC. Rodrigues, C. Jutten and M. Congedo, "Riemannian Procrustes analysis: transfer learning for brain-computer interfaces". IEEE Transactions on Biomedical Engineering, vol. 66, no. 8, pp. 2390-2401, 2018. link

Project details


Download files

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

Source Distribution

pyriemann-0.7.tar.gz (129.2 kB view details)

Uploaded Source

Built Distribution

pyriemann-0.7-py2.py3-none-any.whl (115.6 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file pyriemann-0.7.tar.gz.

File metadata

  • Download URL: pyriemann-0.7.tar.gz
  • Upload date:
  • Size: 129.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.10

File hashes

Hashes for pyriemann-0.7.tar.gz
Algorithm Hash digest
SHA256 f1889f3aec02c4148dec5458299ade2b4a0f28063312c00180a8dfeeea9d9b8e
MD5 37ccd172c3cd027eb08a300664051654
BLAKE2b-256 c450e551da680538e4e2add83d77c3dd201fc216900b5bfa9b9f215cabdfef5f

See more details on using hashes here.

File details

Details for the file pyriemann-0.7-py2.py3-none-any.whl.

File metadata

  • Download URL: pyriemann-0.7-py2.py3-none-any.whl
  • Upload date:
  • Size: 115.6 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.10

File hashes

Hashes for pyriemann-0.7-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 6ad9c00a583fdab9472f433eb54730d8f55852300fec834e00b32daa295c4089
MD5 2b804b74c7dcd29d686afb95b2ad38af
BLAKE2b-256 e8a7ff6e622c57fec2526a9b3ee56b8dd6c6b143a5ee57620eeb98687a9caf78

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page