Decoding source space data#

Decoding to MEG data in source space on the left cortical surface. Here univariate feature selection is employed for speed purposes to confine the classification to a small number of potentially relevant features. The classifier then is trained to selected features of epochs in source space.

# Author: Denis A. Engemann <denis.engemann@gmail.com>
#         Alexandre Gramfort <alexandre.gramfort@inria.fr>
#         Jean-Remi King <jeanremi.king@gmail.com>
#         Eric Larson <larson.eric.d@gmail.com>
#
# License: BSD-3-Clause
import numpy as np
import matplotlib.pyplot as plt

from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.feature_selection import SelectKBest, f_classif
from sklearn.linear_model import LogisticRegression

import mne
from mne.minimum_norm import apply_inverse_epochs, read_inverse_operator
from mne.decoding import (cross_val_multiscore, LinearModel, SlidingEstimator,
                          get_coef)

print(__doc__)

data_path = mne.datasets.sample.data_path()
meg_path = data_path / 'MEG' / 'sample'
fname_fwd = meg_path / 'sample_audvis-meg-oct-6-fwd.fif'
fname_evoked = meg_path / 'sample_audvis-ave.fif'
subjects_dir = data_path / 'subjects'

Set parameters

raw_fname = meg_path / 'sample_audvis_filt-0-40_raw.fif'
event_fname = meg_path / 'sample_audvis_filt-0-40_raw-eve.fif'
fname_cov = meg_path / 'sample_audvis-cov.fif'
fname_inv = meg_path / 'sample_audvis-meg-oct-6-meg-inv.fif'

tmin, tmax = -0.2, 0.8
event_id = dict(aud_r=2, vis_r=4)  # load contra-lateral conditions

# Setup for reading the raw data
raw = mne.io.read_raw_fif(raw_fname, preload=True)
raw.filter(None, 10., fir_design='firwin')
events = mne.read_events(event_fname)

# Set up pick list: MEG - bad channels (modify to your needs)
raw.info['bads'] += ['MEG 2443']  # mark bads
picks = mne.pick_types(raw.info, meg=True, eeg=False, stim=True, eog=True,
                       exclude='bads')

# Read epochs
epochs = mne.Epochs(raw, events, event_id, tmin, tmax, proj=True,
                    picks=picks, baseline=(None, 0), preload=True,
                    reject=dict(grad=4000e-13, eog=150e-6),
                    decim=5)  # decimate to save memory and increase speed
Opening raw data file /home/circleci/mne_data/MNE-sample-data/MEG/sample/sample_audvis_filt-0-40_raw.fif...
    Read a total of 4 projection items:
        PCA-v1 (1 x 102)  idle
        PCA-v2 (1 x 102)  idle
        PCA-v3 (1 x 102)  idle
        Average EEG reference (1 x 60)  idle
    Range : 6450 ... 48149 =     42.956 ...   320.665 secs
Ready.
Reading 0 ... 41699  =      0.000 ...   277.709 secs...
Filtering raw data in 1 contiguous segment
Setting up low-pass filter at 10 Hz

FIR filter parameters
---------------------
Designing a one-pass, zero-phase, non-causal lowpass filter:
- Windowed time-domain design (firwin) method
- Hamming window with 0.0194 passband ripple and 53 dB stopband attenuation
- Upper passband edge: 10.00 Hz
- Upper transition bandwidth: 2.50 Hz (-6 dB cutoff frequency: 11.25 Hz)
- Filter length: 199 samples (1.325 sec)

[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.
[Parallel(n_jobs=1)]: Done   1 out of   1 | elapsed:    0.0s remaining:    0.0s
[Parallel(n_jobs=1)]: Done   2 out of   2 | elapsed:    0.0s remaining:    0.0s
[Parallel(n_jobs=1)]: Done   3 out of   3 | elapsed:    0.0s remaining:    0.0s
[Parallel(n_jobs=1)]: Done   4 out of   4 | elapsed:    0.0s remaining:    0.0s
[Parallel(n_jobs=1)]: Done 366 out of 366 | elapsed:    0.7s finished
Not setting metadata
143 matching events found
Setting baseline interval to [-0.19979521315838786, 0.0] sec
Applying baseline correction (mode: mean)
Created an SSP operator (subspace dimension = 3)
4 projection items activated
Using data from preloaded Raw for 143 events and 151 original time points (prior to decimation) ...
    Rejecting  epoch based on EOG : ['EOG 061']
    Rejecting  epoch based on EOG : ['EOG 061']
    Rejecting  epoch based on EOG : ['EOG 061']
    Rejecting  epoch based on EOG : ['EOG 061']
    Rejecting  epoch based on EOG : ['EOG 061']
    Rejecting  epoch based on EOG : ['EOG 061']
    Rejecting  epoch based on EOG : ['EOG 061']
    Rejecting  epoch based on EOG : ['EOG 061']
    Rejecting  epoch based on EOG : ['EOG 061']
    Rejecting  epoch based on EOG : ['EOG 061']
    Rejecting  epoch based on EOG : ['EOG 061']
    Rejecting  epoch based on EOG : ['EOG 061']
    Rejecting  epoch based on EOG : ['EOG 061']
    Rejecting  epoch based on EOG : ['EOG 061']
    Rejecting  epoch based on EOG : ['EOG 061']
    Rejecting  epoch based on EOG : ['EOG 061']
    Rejecting  epoch based on EOG : ['EOG 061']
    Rejecting  epoch based on EOG : ['EOG 061']
    Rejecting  epoch based on EOG : ['EOG 061']
    Rejecting  epoch based on EOG : ['EOG 061']
    Rejecting  epoch based on EOG : ['EOG 061']
    Rejecting  epoch based on EOG : ['EOG 061']
    Rejecting  epoch based on EOG : ['EOG 061']
    Rejecting  epoch based on EOG : ['EOG 061']
    Rejecting  epoch based on EOG : ['EOG 061']
    Rejecting  epoch based on EOG : ['EOG 061']
    Rejecting  epoch based on EOG : ['EOG 061']
    Rejecting  epoch based on EOG : ['EOG 061']
28 bad epochs dropped

Compute inverse solution

snr = 3.0
noise_cov = mne.read_cov(fname_cov)
inverse_operator = read_inverse_operator(fname_inv)

stcs = apply_inverse_epochs(epochs, inverse_operator,
                            lambda2=1.0 / snr ** 2, verbose=False,
                            method="dSPM", pick_ori="normal")
    366 x 366 full covariance (kind = 1) found.
    Read a total of 4 projection items:
        PCA-v1 (1 x 102) active
        PCA-v2 (1 x 102) active
        PCA-v3 (1 x 102) active
        Average EEG reference (1 x 60) active
Reading inverse operator decomposition from /home/circleci/mne_data/MNE-sample-data/MEG/sample/sample_audvis-meg-oct-6-meg-inv.fif...
    Reading inverse operator info...
    [done]
    Reading inverse operator decomposition...
    [done]
    305 x 305 full covariance (kind = 1) found.
    Read a total of 4 projection items:
        PCA-v1 (1 x 102) active
        PCA-v2 (1 x 102) active
        PCA-v3 (1 x 102) active
        Average EEG reference (1 x 60) active
    Noise covariance matrix read.
    22494 x 22494 diagonal covariance (kind = 2) found.
    Source covariance matrix read.
    22494 x 22494 diagonal covariance (kind = 6) found.
    Orientation priors read.
    22494 x 22494 diagonal covariance (kind = 5) found.
    Depth priors read.
    Did not find the desired covariance matrix (kind = 3)
    Reading a source space...
    Computing patch statistics...
    Patch information added...
    Distance information added...
    [done]
    Reading a source space...
    Computing patch statistics...
    Patch information added...
    Distance information added...
    [done]
    2 source spaces read
    Read a total of 4 projection items:
        PCA-v1 (1 x 102) active
        PCA-v2 (1 x 102) active
        PCA-v3 (1 x 102) active
        Average EEG reference (1 x 60) active
    Source spaces transformed to the inverse solution coordinate frame

Decoding in sensor space using a logistic regression

# Retrieve source space data into an array
X = np.array([stc.lh_data for stc in stcs])  # only keep left hemisphere
y = epochs.events[:, 2]

# prepare a series of classifier applied at each time sample
clf = make_pipeline(StandardScaler(),  # z-score normalization
                    SelectKBest(f_classif, k=500),  # select features for speed
                    LinearModel(LogisticRegression(C=1, solver='liblinear')))
time_decod = SlidingEstimator(clf, scoring='roc_auc')

# Run cross-validated decoding analyses:
scores = cross_val_multiscore(time_decod, X, y, cv=5, n_jobs=None)

# Plot average decoding scores of 5 splits
fig, ax = plt.subplots(1)
ax.plot(epochs.times, scores.mean(0), label='score')
ax.axhline(.5, color='k', linestyle='--', label='chance')
ax.axvline(0, color='k')
plt.legend()
decoding spatio temporal source
[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.

  0%|          | Fitting SlidingEstimator : 0/31 [00:00<?,       ?it/s]
  3%|3         | Fitting SlidingEstimator : 1/31 [00:00<00:02,   14.74it/s]
  6%|6         | Fitting SlidingEstimator : 2/31 [00:00<00:01,   19.85it/s]
 10%|9         | Fitting SlidingEstimator : 3/31 [00:00<00:01,   22.45it/s]
 13%|#2        | Fitting SlidingEstimator : 4/31 [00:00<00:01,   24.02it/s]
 16%|#6        | Fitting SlidingEstimator : 5/31 [00:00<00:01,   21.15it/s]
 19%|#9        | Fitting SlidingEstimator : 6/31 [00:00<00:01,   22.35it/s]
 23%|##2       | Fitting SlidingEstimator : 7/31 [00:00<00:01,   23.30it/s]
 26%|##5       | Fitting SlidingEstimator : 8/31 [00:00<00:00,   24.06it/s]
 29%|##9       | Fitting SlidingEstimator : 9/31 [00:00<00:00,   24.69it/s]
 32%|###2      | Fitting SlidingEstimator : 10/31 [00:00<00:00,   25.22it/s]
 35%|###5      | Fitting SlidingEstimator : 11/31 [00:00<00:00,   25.66it/s]
 39%|###8      | Fitting SlidingEstimator : 12/31 [00:00<00:00,   26.04it/s]
 42%|####1     | Fitting SlidingEstimator : 13/31 [00:00<00:00,   26.36it/s]
 45%|####5     | Fitting SlidingEstimator : 14/31 [00:00<00:00,   26.64it/s]
 48%|####8     | Fitting SlidingEstimator : 15/31 [00:00<00:00,   26.89it/s]
 52%|#####1    | Fitting SlidingEstimator : 16/31 [00:00<00:00,   27.12it/s]
 55%|#####4    | Fitting SlidingEstimator : 17/31 [00:00<00:00,   27.32it/s]
 58%|#####8    | Fitting SlidingEstimator : 18/31 [00:00<00:00,   27.50it/s]
 61%|######1   | Fitting SlidingEstimator : 19/31 [00:00<00:00,   27.66it/s]
 65%|######4   | Fitting SlidingEstimator : 20/31 [00:00<00:00,   27.80it/s]
 68%|######7   | Fitting SlidingEstimator : 21/31 [00:00<00:00,   27.93it/s]
 71%|#######   | Fitting SlidingEstimator : 22/31 [00:00<00:00,   28.04it/s]
 74%|#######4  | Fitting SlidingEstimator : 23/31 [00:00<00:00,   28.15it/s]
 77%|#######7  | Fitting SlidingEstimator : 24/31 [00:00<00:00,   28.24it/s]
 81%|########  | Fitting SlidingEstimator : 25/31 [00:00<00:00,   28.33it/s]
 84%|########3 | Fitting SlidingEstimator : 26/31 [00:00<00:00,   28.42it/s]
 87%|########7 | Fitting SlidingEstimator : 27/31 [00:00<00:00,   28.50it/s]
 90%|######### | Fitting SlidingEstimator : 28/31 [00:01<00:00,   28.57it/s]
 94%|#########3| Fitting SlidingEstimator : 29/31 [00:01<00:00,   26.96it/s]
 97%|#########6| Fitting SlidingEstimator : 30/31 [00:01<00:00,   27.12it/s]
100%|##########| Fitting SlidingEstimator : 31/31 [00:01<00:00,   27.64it/s]
[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.
[Parallel(n_jobs=1)]: Done   1 out of   1 | elapsed:    0.1s remaining:    0.0s
[Parallel(n_jobs=1)]: Done   1 out of   1 | elapsed:    0.1s finished
[Parallel(n_jobs=1)]: Done   1 out of   1 | elapsed:    1.3s remaining:    0.0s

  0%|          | Fitting SlidingEstimator : 0/31 [00:00<?,       ?it/s]
  3%|3         | Fitting SlidingEstimator : 1/31 [00:00<00:02,   14.84it/s]
  6%|6         | Fitting SlidingEstimator : 2/31 [00:00<00:01,   19.87it/s]
 10%|9         | Fitting SlidingEstimator : 3/31 [00:00<00:01,   22.43it/s]
 13%|#2        | Fitting SlidingEstimator : 4/31 [00:00<00:01,   23.96it/s]
 16%|#6        | Fitting SlidingEstimator : 5/31 [00:00<00:01,   24.99it/s]
 19%|#9        | Fitting SlidingEstimator : 6/31 [00:00<00:00,   25.72it/s]
 23%|##2       | Fitting SlidingEstimator : 7/31 [00:00<00:00,   26.27it/s]
 26%|##5       | Fitting SlidingEstimator : 8/31 [00:00<00:00,   23.56it/s]
 29%|##9       | Fitting SlidingEstimator : 9/31 [00:00<00:00,   24.22it/s]
 32%|###2      | Fitting SlidingEstimator : 10/31 [00:00<00:00,   24.77it/s]
 35%|###5      | Fitting SlidingEstimator : 11/31 [00:00<00:00,   25.23it/s]
 39%|###8      | Fitting SlidingEstimator : 12/31 [00:00<00:00,   25.64it/s]
 42%|####1     | Fitting SlidingEstimator : 13/31 [00:00<00:00,   25.99it/s]
 45%|####5     | Fitting SlidingEstimator : 14/31 [00:00<00:00,   26.29it/s]
 48%|####8     | Fitting SlidingEstimator : 15/31 [00:00<00:00,   26.56it/s]
 52%|#####1    | Fitting SlidingEstimator : 16/31 [00:00<00:00,   26.80it/s]
 55%|#####4    | Fitting SlidingEstimator : 17/31 [00:00<00:00,   27.01it/s]
 58%|#####8    | Fitting SlidingEstimator : 18/31 [00:00<00:00,   27.20it/s]
 61%|######1   | Fitting SlidingEstimator : 19/31 [00:00<00:00,   27.37it/s]
 65%|######4   | Fitting SlidingEstimator : 20/31 [00:00<00:00,   27.53it/s]
 68%|######7   | Fitting SlidingEstimator : 21/31 [00:00<00:00,   27.66it/s]
 71%|#######   | Fitting SlidingEstimator : 22/31 [00:00<00:00,   27.79it/s]
 74%|#######4  | Fitting SlidingEstimator : 23/31 [00:00<00:00,   27.90it/s]
 77%|#######7  | Fitting SlidingEstimator : 24/31 [00:00<00:00,   28.00it/s]
 81%|########  | Fitting SlidingEstimator : 25/31 [00:00<00:00,   28.10it/s]
 84%|########3 | Fitting SlidingEstimator : 26/31 [00:00<00:00,   28.18it/s]
 87%|########7 | Fitting SlidingEstimator : 27/31 [00:00<00:00,   28.26it/s]
 90%|######### | Fitting SlidingEstimator : 28/31 [00:01<00:00,   28.34it/s]
 94%|#########3| Fitting SlidingEstimator : 29/31 [00:01<00:00,   28.42it/s]
 97%|#########6| Fitting SlidingEstimator : 30/31 [00:01<00:00,   28.48it/s]
100%|##########| Fitting SlidingEstimator : 31/31 [00:01<00:00,   28.54it/s]
100%|##########| Fitting SlidingEstimator : 31/31 [00:01<00:00,   27.68it/s]
[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.
[Parallel(n_jobs=1)]: Done   1 out of   1 | elapsed:    0.1s remaining:    0.0s
[Parallel(n_jobs=1)]: Done   1 out of   1 | elapsed:    0.1s finished
[Parallel(n_jobs=1)]: Done   2 out of   2 | elapsed:    2.5s remaining:    0.0s

  0%|          | Fitting SlidingEstimator : 0/31 [00:00<?,       ?it/s]
  3%|3         | Fitting SlidingEstimator : 1/31 [00:00<00:02,   14.86it/s]
  6%|6         | Fitting SlidingEstimator : 2/31 [00:00<00:01,   19.97it/s]
 10%|9         | Fitting SlidingEstimator : 3/31 [00:00<00:01,   22.55it/s]
 13%|#2        | Fitting SlidingEstimator : 4/31 [00:00<00:01,   24.11it/s]
 16%|#6        | Fitting SlidingEstimator : 5/31 [00:00<00:01,   25.14it/s]
 19%|#9        | Fitting SlidingEstimator : 6/31 [00:00<00:00,   25.88it/s]
 23%|##2       | Fitting SlidingEstimator : 7/31 [00:00<00:00,   26.43it/s]
 26%|##5       | Fitting SlidingEstimator : 8/31 [00:00<00:00,   26.86it/s]
 29%|##9       | Fitting SlidingEstimator : 9/31 [00:00<00:00,   27.20it/s]
 32%|###2      | Fitting SlidingEstimator : 10/31 [00:00<00:00,   27.48it/s]
 35%|###5      | Fitting SlidingEstimator : 11/31 [00:00<00:00,   27.72it/s]
 39%|###8      | Fitting SlidingEstimator : 12/31 [00:00<00:00,   27.92it/s]
 42%|####1     | Fitting SlidingEstimator : 13/31 [00:00<00:00,   28.08it/s]
 45%|####5     | Fitting SlidingEstimator : 14/31 [00:00<00:00,   28.23it/s]
 48%|####8     | Fitting SlidingEstimator : 15/31 [00:00<00:00,   28.35it/s]
 52%|#####1    | Fitting SlidingEstimator : 16/31 [00:00<00:00,   28.46it/s]
 55%|#####4    | Fitting SlidingEstimator : 17/31 [00:00<00:00,   28.56it/s]
 58%|#####8    | Fitting SlidingEstimator : 18/31 [00:00<00:00,   28.64it/s]
 61%|######1   | Fitting SlidingEstimator : 19/31 [00:00<00:00,   28.72it/s]
 65%|######4   | Fitting SlidingEstimator : 20/31 [00:00<00:00,   28.78it/s]
 68%|######7   | Fitting SlidingEstimator : 21/31 [00:00<00:00,   28.85it/s]
 71%|#######   | Fitting SlidingEstimator : 22/31 [00:00<00:00,   28.90it/s]
 74%|#######4  | Fitting SlidingEstimator : 23/31 [00:00<00:00,   28.95it/s]
 77%|#######7  | Fitting SlidingEstimator : 24/31 [00:00<00:00,   28.99it/s]
 81%|########  | Fitting SlidingEstimator : 25/31 [00:00<00:00,   29.03it/s]
 84%|########3 | Fitting SlidingEstimator : 26/31 [00:00<00:00,   29.07it/s]
 87%|########7 | Fitting SlidingEstimator : 27/31 [00:00<00:00,   29.10it/s]
 90%|######### | Fitting SlidingEstimator : 28/31 [00:00<00:00,   29.13it/s]
 94%|#########3| Fitting SlidingEstimator : 29/31 [00:01<00:00,   27.43it/s]
 97%|#########6| Fitting SlidingEstimator : 30/31 [00:01<00:00,   27.56it/s]
100%|##########| Fitting SlidingEstimator : 31/31 [00:01<00:00,   28.62it/s]
[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.
[Parallel(n_jobs=1)]: Done   1 out of   1 | elapsed:    0.1s remaining:    0.0s
[Parallel(n_jobs=1)]: Done   1 out of   1 | elapsed:    0.1s finished
[Parallel(n_jobs=1)]: Done   3 out of   3 | elapsed:    3.8s remaining:    0.0s

  0%|          | Fitting SlidingEstimator : 0/31 [00:00<?,       ?it/s]
  3%|3         | Fitting SlidingEstimator : 1/31 [00:00<00:02,   14.85it/s]
  6%|6         | Fitting SlidingEstimator : 2/31 [00:00<00:01,   19.96it/s]
 10%|9         | Fitting SlidingEstimator : 3/31 [00:00<00:01,   22.54it/s]
 13%|#2        | Fitting SlidingEstimator : 4/31 [00:00<00:01,   24.10it/s]
 16%|#6        | Fitting SlidingEstimator : 5/31 [00:00<00:01,   25.14it/s]
 19%|#9        | Fitting SlidingEstimator : 6/31 [00:00<00:00,   25.87it/s]
 23%|##2       | Fitting SlidingEstimator : 7/31 [00:00<00:00,   26.42it/s]
 26%|##5       | Fitting SlidingEstimator : 8/31 [00:00<00:00,   26.84it/s]
 29%|##9       | Fitting SlidingEstimator : 9/31 [00:00<00:00,   27.18it/s]
 32%|###2      | Fitting SlidingEstimator : 10/31 [00:00<00:00,   27.46it/s]
 35%|###5      | Fitting SlidingEstimator : 11/31 [00:00<00:00,   27.70it/s]
 39%|###8      | Fitting SlidingEstimator : 12/31 [00:00<00:00,   27.89it/s]
 42%|####1     | Fitting SlidingEstimator : 13/31 [00:00<00:00,   28.06it/s]
 45%|####5     | Fitting SlidingEstimator : 14/31 [00:00<00:00,   28.21it/s]
 48%|####8     | Fitting SlidingEstimator : 15/31 [00:00<00:00,   28.34it/s]
 52%|#####1    | Fitting SlidingEstimator : 16/31 [00:00<00:00,   28.45it/s]
 55%|#####4    | Fitting SlidingEstimator : 17/31 [00:00<00:00,   28.54it/s]
 58%|#####8    | Fitting SlidingEstimator : 18/31 [00:00<00:00,   28.63it/s]
 61%|######1   | Fitting SlidingEstimator : 19/31 [00:00<00:00,   28.70it/s]
 65%|######4   | Fitting SlidingEstimator : 20/31 [00:00<00:00,   28.77it/s]
 68%|######7   | Fitting SlidingEstimator : 21/31 [00:00<00:00,   28.84it/s]
 71%|#######   | Fitting SlidingEstimator : 22/31 [00:00<00:00,   28.89it/s]
 74%|#######4  | Fitting SlidingEstimator : 23/31 [00:00<00:00,   28.94it/s]
 77%|#######7  | Fitting SlidingEstimator : 24/31 [00:00<00:00,   28.99it/s]
 81%|########  | Fitting SlidingEstimator : 25/31 [00:00<00:00,   29.03it/s]
 84%|########3 | Fitting SlidingEstimator : 26/31 [00:00<00:00,   29.06it/s]
 87%|########7 | Fitting SlidingEstimator : 27/31 [00:00<00:00,   29.10it/s]
 90%|######### | Fitting SlidingEstimator : 28/31 [00:00<00:00,   29.13it/s]
 94%|#########3| Fitting SlidingEstimator : 29/31 [00:01<00:00,   29.17it/s]
 97%|#########6| Fitting SlidingEstimator : 30/31 [00:01<00:00,   27.49it/s]
100%|##########| Fitting SlidingEstimator : 31/31 [00:01<00:00,   28.60it/s]
[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.
[Parallel(n_jobs=1)]: Done   1 out of   1 | elapsed:    0.1s remaining:    0.0s
[Parallel(n_jobs=1)]: Done   1 out of   1 | elapsed:    0.1s finished
[Parallel(n_jobs=1)]: Done   4 out of   4 | elapsed:    5.0s remaining:    0.0s

  0%|          | Fitting SlidingEstimator : 0/31 [00:00<?,       ?it/s]
  3%|3         | Fitting SlidingEstimator : 1/31 [00:00<00:02,   14.84it/s]
  6%|6         | Fitting SlidingEstimator : 2/31 [00:00<00:01,   19.94it/s]
 10%|9         | Fitting SlidingEstimator : 3/31 [00:00<00:01,   22.52it/s]
 13%|#2        | Fitting SlidingEstimator : 4/31 [00:00<00:01,   24.07it/s]
 16%|#6        | Fitting SlidingEstimator : 5/31 [00:00<00:01,   25.09it/s]
 19%|#9        | Fitting SlidingEstimator : 6/31 [00:00<00:00,   25.84it/s]
 23%|##2       | Fitting SlidingEstimator : 7/31 [00:00<00:00,   26.39it/s]
 26%|##5       | Fitting SlidingEstimator : 8/31 [00:00<00:00,   26.83it/s]
 29%|##9       | Fitting SlidingEstimator : 9/31 [00:00<00:00,   27.17it/s]
 32%|###2      | Fitting SlidingEstimator : 10/31 [00:00<00:00,   27.45it/s]
 35%|###5      | Fitting SlidingEstimator : 11/31 [00:00<00:00,   27.68it/s]
 39%|###8      | Fitting SlidingEstimator : 12/31 [00:00<00:00,   27.88it/s]
 42%|####1     | Fitting SlidingEstimator : 13/31 [00:00<00:00,   28.05it/s]
 45%|####5     | Fitting SlidingEstimator : 14/31 [00:00<00:00,   28.18it/s]
 48%|####8     | Fitting SlidingEstimator : 15/31 [00:00<00:00,   26.02it/s]
 52%|#####1    | Fitting SlidingEstimator : 16/31 [00:00<00:00,   26.30it/s]
 55%|#####4    | Fitting SlidingEstimator : 17/31 [00:00<00:00,   26.56it/s]
 58%|#####8    | Fitting SlidingEstimator : 18/31 [00:00<00:00,   26.79it/s]
 61%|######1   | Fitting SlidingEstimator : 19/31 [00:00<00:00,   26.99it/s]
 65%|######4   | Fitting SlidingEstimator : 20/31 [00:00<00:00,   27.18it/s]
 68%|######7   | Fitting SlidingEstimator : 21/31 [00:00<00:00,   27.34it/s]
 71%|#######   | Fitting SlidingEstimator : 22/31 [00:00<00:00,   27.50it/s]
 74%|#######4  | Fitting SlidingEstimator : 23/31 [00:00<00:00,   25.90it/s]
 77%|#######7  | Fitting SlidingEstimator : 24/31 [00:00<00:00,   26.13it/s]
 81%|########  | Fitting SlidingEstimator : 25/31 [00:00<00:00,   26.35it/s]
 84%|########3 | Fitting SlidingEstimator : 26/31 [00:00<00:00,   26.55it/s]
 87%|########7 | Fitting SlidingEstimator : 27/31 [00:01<00:00,   26.73it/s]
 90%|######### | Fitting SlidingEstimator : 28/31 [00:01<00:00,   26.90it/s]
 94%|#########3| Fitting SlidingEstimator : 29/31 [00:01<00:00,   27.06it/s]
 97%|#########6| Fitting SlidingEstimator : 30/31 [00:01<00:00,   27.20it/s]
100%|##########| Fitting SlidingEstimator : 31/31 [00:01<00:00,   27.06it/s]
100%|##########| Fitting SlidingEstimator : 31/31 [00:01<00:00,   26.84it/s]
[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.
[Parallel(n_jobs=1)]: Done   1 out of   1 | elapsed:    0.1s remaining:    0.0s
[Parallel(n_jobs=1)]: Done   1 out of   1 | elapsed:    0.1s finished
[Parallel(n_jobs=1)]: Done   5 out of   5 | elapsed:    6.3s finished

To investigate weights, we need to retrieve the patterns of a fitted model

# The fitting needs not be cross validated because the weights are based on
# the training sets
time_decod.fit(X, y)

# Retrieve patterns after inversing the z-score normalization step:
patterns = get_coef(time_decod, 'patterns_', inverse_transform=True)

stc = stcs[0]  # for convenience, lookup parameters from first stc
vertices = [stc.lh_vertno, np.array([], int)]  # empty array for right hemi
stc_feat = mne.SourceEstimate(np.abs(patterns), vertices=vertices,
                              tmin=stc.tmin, tstep=stc.tstep, subject='sample')

brain = stc_feat.plot(views=['lat'], transparent=True,
                      initial_time=0.1, time_unit='s',
                      subjects_dir=subjects_dir)
decoding spatio temporal source
  0%|          | Fitting SlidingEstimator : 0/31 [00:00<?,       ?it/s]
  3%|3         | Fitting SlidingEstimator : 1/31 [00:00<00:03,    9.87it/s]
  6%|6         | Fitting SlidingEstimator : 2/31 [00:00<00:01,   14.98it/s]
 10%|9         | Fitting SlidingEstimator : 3/31 [00:00<00:01,   14.92it/s]
 13%|#2        | Fitting SlidingEstimator : 4/31 [00:00<00:01,   17.23it/s]
 16%|#6        | Fitting SlidingEstimator : 5/31 [00:00<00:01,   18.98it/s]
 19%|#9        | Fitting SlidingEstimator : 6/31 [00:00<00:01,   18.03it/s]
 23%|##2       | Fitting SlidingEstimator : 7/31 [00:00<00:01,   19.28it/s]
 26%|##5       | Fitting SlidingEstimator : 8/31 [00:00<00:01,   18.47it/s]
 29%|##9       | Fitting SlidingEstimator : 9/31 [00:00<00:01,   19.46it/s]
 32%|###2      | Fitting SlidingEstimator : 10/31 [00:00<00:01,   20.32it/s]
 35%|###5      | Fitting SlidingEstimator : 11/31 [00:00<00:00,   21.08it/s]
 39%|###8      | Fitting SlidingEstimator : 12/31 [00:00<00:00,   21.77it/s]
 42%|####1     | Fitting SlidingEstimator : 13/31 [00:00<00:00,   20.78it/s]
 45%|####5     | Fitting SlidingEstimator : 14/31 [00:00<00:00,   21.40it/s]
 48%|####8     | Fitting SlidingEstimator : 15/31 [00:00<00:00,   21.97it/s]
 52%|#####1    | Fitting SlidingEstimator : 16/31 [00:00<00:00,   21.07it/s]
 55%|#####4    | Fitting SlidingEstimator : 17/31 [00:00<00:00,   21.61it/s]
 58%|#####8    | Fitting SlidingEstimator : 18/31 [00:00<00:00,   22.10it/s]
 61%|######1   | Fitting SlidingEstimator : 19/31 [00:00<00:00,   21.27it/s]
 65%|######4   | Fitting SlidingEstimator : 20/31 [00:00<00:00,   21.74it/s]
 68%|######7   | Fitting SlidingEstimator : 21/31 [00:00<00:00,   22.19it/s]
 71%|#######   | Fitting SlidingEstimator : 22/31 [00:01<00:00,   21.41it/s]
 74%|#######4  | Fitting SlidingEstimator : 23/31 [00:01<00:00,   21.84it/s]
 77%|#######7  | Fitting SlidingEstimator : 24/31 [00:01<00:00,   22.26it/s]
 81%|########  | Fitting SlidingEstimator : 25/31 [00:01<00:00,   21.51it/s]
 84%|########3 | Fitting SlidingEstimator : 26/31 [00:01<00:00,   21.92it/s]
 87%|########7 | Fitting SlidingEstimator : 27/31 [00:01<00:00,   21.25it/s]
 90%|######### | Fitting SlidingEstimator : 28/31 [00:01<00:00,   21.65it/s]
 94%|#########3| Fitting SlidingEstimator : 29/31 [00:01<00:00,   21.03it/s]
 97%|#########6| Fitting SlidingEstimator : 30/31 [00:01<00:00,   21.42it/s]
100%|##########| Fitting SlidingEstimator : 31/31 [00:01<00:00,   21.85it/s]
100%|##########| Fitting SlidingEstimator : 31/31 [00:01<00:00,   21.39it/s]
Using control points [ 3.5072551   4.37721471 15.59502306]

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

Estimated memory usage: 315 MB

Gallery generated by Sphinx-Gallery