Note
Go to the end to download the full example code
MOABB Dataset Example#
In this example, we show how to fetch and prepare a MOABB dataset for usage with Braindecode.
# Authors: Lukas Gemein <l.gemein@gmail.com>
# Hubert Banville <hubert.jbanville@gmail.com>
# Simon Brandt <simonbrandt@protonmail.com>
# Daniel Wilson <dan.c.wil@gmail.com>
#
# License: BSD (3-clause)
from braindecode.datasets import MOABBDataset
from braindecode.preprocessing import preprocess, Preprocessor
First, we create a dataset based on BCIC IV 2a fetched with MOABB,
dataset = MOABBDataset(dataset_name="BNCI2014001", subject_ids=[1])
48 events found
Event IDs: [1 2 3 4]
48 events found
Event IDs: [1 2 3 4]
48 events found
Event IDs: [1 2 3 4]
48 events found
Event IDs: [1 2 3 4]
48 events found
Event IDs: [1 2 3 4]
48 events found
Event IDs: [1 2 3 4]
48 events found
Event IDs: [1 2 3 4]
48 events found
Event IDs: [1 2 3 4]
48 events found
Event IDs: [1 2 3 4]
48 events found
Event IDs: [1 2 3 4]
48 events found
Event IDs: [1 2 3 4]
48 events found
Event IDs: [1 2 3 4]
The dataset has a pandas DataFrame with additional description of its internal datasets
dataset.description
We can iterate through dataset which yields one time point of a continuous signal x, and a target y (which can be None if targets are not defined for the entire continuous signal).
(26, 1) None
We can apply preprocessing transforms that are defined in mne and work in-place, such as resampling, bandpass filtering, or electrode selection.
preprocessors = [
Preprocessor('pick_types', eeg=True, meg=False, stim=True),
Preprocessor('resample', sfreq=100)
]
print(dataset.datasets[0].raw.info["sfreq"])
preprocess(dataset, preprocessors)
print(dataset.datasets[0].raw.info["sfreq"])
250.0
NOTE: pick_types() is a legacy function. New code should use inst.pick(...).
48 events found
Event IDs: [1 2 3 4]
48 events found
Event IDs: [1 2 3 4]
NOTE: pick_types() is a legacy function. New code should use inst.pick(...).
48 events found
Event IDs: [1 2 3 4]
48 events found
Event IDs: [1 2 3 4]
NOTE: pick_types() is a legacy function. New code should use inst.pick(...).
48 events found
Event IDs: [1 2 3 4]
48 events found
Event IDs: [1 2 3 4]
NOTE: pick_types() is a legacy function. New code should use inst.pick(...).
48 events found
Event IDs: [1 2 3 4]
48 events found
Event IDs: [1 2 3 4]
NOTE: pick_types() is a legacy function. New code should use inst.pick(...).
48 events found
Event IDs: [1 2 3 4]
48 events found
Event IDs: [1 2 3 4]
NOTE: pick_types() is a legacy function. New code should use inst.pick(...).
48 events found
Event IDs: [1 2 3 4]
48 events found
Event IDs: [1 2 3 4]
NOTE: pick_types() is a legacy function. New code should use inst.pick(...).
48 events found
Event IDs: [1 2 3 4]
48 events found
Event IDs: [1 2 3 4]
NOTE: pick_types() is a legacy function. New code should use inst.pick(...).
48 events found
Event IDs: [1 2 3 4]
48 events found
Event IDs: [1 2 3 4]
NOTE: pick_types() is a legacy function. New code should use inst.pick(...).
48 events found
Event IDs: [1 2 3 4]
48 events found
Event IDs: [1 2 3 4]
NOTE: pick_types() is a legacy function. New code should use inst.pick(...).
48 events found
Event IDs: [1 2 3 4]
48 events found
Event IDs: [1 2 3 4]
NOTE: pick_types() is a legacy function. New code should use inst.pick(...).
48 events found
Event IDs: [1 2 3 4]
48 events found
Event IDs: [1 2 3 4]
NOTE: pick_types() is a legacy function. New code should use inst.pick(...).
48 events found
Event IDs: [1 2 3 4]
48 events found
Event IDs: [1 2 3 4]
100.0
We can easily split the dataset based on a criteria applied to the description DataFrame:
subsets = dataset.split("session")
print({subset_name: len(subset) for subset_name, subset in subsets.items()})
{'session_E': 232164, 'session_T': 232164}
See our Trialwise Decoding and Cropped Decoding examples for training with this dataset.
Total running time of the script: (0 minutes 6.399 seconds)
Estimated memory usage: 125 MB