Biosignals classification with Riemannian geometry
Project description
pyRiemann
pyRiemann is a Python machine learning package based on scikit-learn API. It provides a high-level interface for processing and classification of multivariate time series through the Riemannian geometry of symmetric positive definite (SPD) matrices.
pyRiemann aims at being a generic package for multivariate time series classification but has been designed around multichannel biosignals (like EEG, MEG or EMG) manipulation applied to brain-computer interface (BCI), transforming multichannel time series into covariance matrices, 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].
This code is BSD-licenced (3 clause).
Documentation
The documentation is available on http://pyriemann.readthedocs.io/en/latest/
Install
Using PyPI
pip install pyriemann
or using pip+git for the latest version of the code :
pip install git+https://github.com/pyRiemann/pyRiemann
Anaconda is not currently supported, if you want to use anaconda, you need to create a virtual environment in anaconda, activate it and use the above command to install it.
From sources
For the latest version, you can install the package from the sources using the setup.py script
python setup.py install
or in developer mode to be able to modify the sources.
python setup.py develop
How to use it
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)
# cross validation
mdm = pyriemann.classification.MDM()
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.svm import SVC
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
# build your pipeline
covest = Covariances()
ts = TangentSpace()
svc = SVC(kernel='linear')
clf = make_pipeline(covest, ts, svc)
# 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},
title = {pyRiemann/pyRiemann: v0.3},
month = jul,
year = 2022,
publisher = {Zenodo},
version = {v0.3},
doi = {10.5281/zenodo.7547583},
url = {https://doi.org/10.5281/zenodo.7547583}
}
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file pyriemann-0.4.tar.gz
.
File metadata
- Download URL: pyriemann-0.4.tar.gz
- Upload date:
- Size: 90.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.8
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b5c788ad8651997158a0659e49e2c3c421d4e82ce43f719479121ae437f3124e |
|
MD5 | 241ef6527e34d8d02f089d3d2e8c7a7d |
|
BLAKE2b-256 | ee5eac8347d876bb0c04498196b33fbf25f2a21eace9fe8f791292598773508a |