Tutorial 2: Using multiple datasets#

We extend the previous example to a case where we want to analyze the score of a classifier with three different MI datasets instead of just one. As before, we begin by importing all relevant libraries.

# Authors: Pedro L. C. Rodrigues, Sylvain Chevallier
#
# https://github.com/plcrodrigues/Workshop-MOABB-BCI-Graz-2019

import warnings

import matplotlib.pyplot as plt
import mne
import seaborn as sns
from mne.decoding import CSP
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA
from sklearn.pipeline import make_pipeline

import moabb
from moabb.datasets import BNCI2014_001, Zhou2016
from moabb.evaluations import WithinSessionEvaluation
from moabb.paradigms import LeftRightImagery


moabb.set_log_level("info")
mne.set_log_level("CRITICAL")
warnings.filterwarnings("ignore")

Initializing Datasets#

We instantiate the two different datasets that follow the MI paradigm (with left-hand/right-hand classes) but were recorded with different number of electrodes, different number of trials, etc.

The following lines go exactly as in the previous example, where we end up obtaining a pandas dataframe containing the results of the evaluation. We could set overwrite to False to cache the results, avoiding to restart all the evaluation from scratch if a problem occurs.

Zhou2016-WithinSession:   0%|          | 0/3 [00:00<?, ?it/s]
Zhou2016-WithinSession:  33%|███▎      | 1/3 [00:09<00:18,  9.32s/it]
Zhou2016-WithinSession:  67%|██████▋   | 2/3 [00:14<00:07,  7.02s/it]
Zhou2016-WithinSession: 100%|██████████| 3/3 [00:20<00:00,  6.52s/it]
Zhou2016-WithinSession: 100%|██████████| 3/3 [00:20<00:00,  6.88s/it]

BNCI2014-001-WithinSession:   0%|          | 0/3 [00:00<?, ?it/s]
BNCI2014-001-WithinSession:  33%|███▎      | 1/3 [00:00<00:00,  7.70it/s]
BNCI2014-001-WithinSession:  67%|██████▋   | 2/3 [00:00<00:00,  8.52it/s]
BNCI2014-001-WithinSession: 100%|██████████| 3/3 [00:00<00:00,  8.82it/s]
BNCI2014-001-WithinSession: 100%|██████████| 3/3 [00:00<00:00,  8.64it/s]

Plotting Results#

We plot the results using the seaborn library. Note how easy it is to plot the results from the three datasets with just one line.

results["subj"] = [str(resi).zfill(2) for resi in results["subject"]]
g = sns.catplot(
    kind="bar",
    x="score",
    y="subj",
    col="dataset",
    data=results,
    orient="h",
    palette="viridis",
)
plt.show()
dataset = Zhou2016, dataset = BNCI2014-001

Total running time of the script: (0 minutes 22.914 seconds)

Estimated memory usage: 533 MB

Gallery generated by Sphinx-Gallery