Note
Go to the end to download the full example code
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.8s 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()
[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.75it/s]
6%|6 | Fitting SlidingEstimator : 2/31 [00:00<00:01, 14.78it/s]
10%|9 | Fitting SlidingEstimator : 3/31 [00:00<00:01, 17.92it/s]
13%|#2 | Fitting SlidingEstimator : 4/31 [00:00<00:01, 20.05it/s]
16%|#6 | Fitting SlidingEstimator : 5/31 [00:00<00:01, 18.62it/s]
19%|#9 | Fitting SlidingEstimator : 6/31 [00:00<00:01, 20.02it/s]
23%|##2 | Fitting SlidingEstimator : 7/31 [00:00<00:01, 18.92it/s]
26%|##5 | Fitting SlidingEstimator : 8/31 [00:00<00:01, 19.99it/s]
29%|##9 | Fitting SlidingEstimator : 9/31 [00:00<00:01, 20.91it/s]
32%|###2 | Fitting SlidingEstimator : 10/31 [00:00<00:01, 19.90it/s]
35%|###5 | Fitting SlidingEstimator : 11/31 [00:00<00:00, 20.68it/s]
39%|###8 | Fitting SlidingEstimator : 12/31 [00:00<00:00, 21.38it/s]
42%|####1 | Fitting SlidingEstimator : 13/31 [00:00<00:00, 22.01it/s]
45%|####5 | Fitting SlidingEstimator : 14/31 [00:00<00:00, 22.57it/s]
48%|####8 | Fitting SlidingEstimator : 15/31 [00:00<00:00, 21.53it/s]
52%|#####1 | Fitting SlidingEstimator : 16/31 [00:00<00:00, 22.07it/s]
55%|#####4 | Fitting SlidingEstimator : 17/31 [00:00<00:00, 22.56it/s]
58%|#####8 | Fitting SlidingEstimator : 18/31 [00:00<00:00, 21.61it/s]
61%|######1 | Fitting SlidingEstimator : 19/31 [00:00<00:00, 22.08it/s]
65%|######4 | Fitting SlidingEstimator : 20/31 [00:00<00:00, 22.53it/s]
68%|######7 | Fitting SlidingEstimator : 21/31 [00:00<00:00, 21.68it/s]
71%|####### | Fitting SlidingEstimator : 22/31 [00:01<00:00, 22.12it/s]
74%|#######4 | Fitting SlidingEstimator : 23/31 [00:01<00:00, 22.53it/s]
77%|#######7 | Fitting SlidingEstimator : 24/31 [00:01<00:00, 21.72it/s]
81%|######## | Fitting SlidingEstimator : 25/31 [00:01<00:00, 22.13it/s]
84%|########3 | Fitting SlidingEstimator : 26/31 [00:01<00:00, 22.51it/s]
87%|########7 | Fitting SlidingEstimator : 27/31 [00:01<00:00, 21.76it/s]
90%|######### | Fitting SlidingEstimator : 28/31 [00:01<00:00, 22.15it/s]
94%|#########3| Fitting SlidingEstimator : 29/31 [00:01<00:00, 21.46it/s]
97%|#########6| Fitting SlidingEstimator : 30/31 [00:01<00:00, 21.84it/s]
100%|##########| Fitting SlidingEstimator : 31/31 [00:01<00:00, 22.36it/s]
100%|##########| Fitting SlidingEstimator : 31/31 [00:01<00:00, 21.92it/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.6s remaining: 0.0s
0%| | Fitting SlidingEstimator : 0/31 [00:00<?, ?it/s]
3%|3 | Fitting SlidingEstimator : 1/31 [00:00<00:02, 14.83it/s]
6%|6 | Fitting SlidingEstimator : 2/31 [00:00<00:01, 19.94it/s]
10%|9 | Fitting SlidingEstimator : 3/31 [00:00<00:01, 17.75it/s]
13%|#2 | Fitting SlidingEstimator : 4/31 [00:00<00:01, 19.88it/s]
16%|#6 | Fitting SlidingEstimator : 5/31 [00:00<00:01, 18.46it/s]
19%|#9 | Fitting SlidingEstimator : 6/31 [00:00<00:01, 19.85it/s]
23%|##2 | Fitting SlidingEstimator : 7/31 [00:00<00:01, 18.80it/s]
26%|##5 | Fitting SlidingEstimator : 8/31 [00:00<00:01, 19.87it/s]
29%|##9 | Fitting SlidingEstimator : 9/31 [00:00<00:01, 18.98it/s]
32%|###2 | Fitting SlidingEstimator : 10/31 [00:00<00:01, 19.86it/s]
35%|###5 | Fitting SlidingEstimator : 11/31 [00:00<00:00, 20.65it/s]
39%|###8 | Fitting SlidingEstimator : 12/31 [00:00<00:00, 19.80it/s]
42%|####1 | Fitting SlidingEstimator : 13/31 [00:00<00:00, 20.49it/s]
45%|####5 | Fitting SlidingEstimator : 14/31 [00:00<00:00, 21.12it/s]
48%|####8 | Fitting SlidingEstimator : 15/31 [00:00<00:00, 21.69it/s]
52%|#####1 | Fitting SlidingEstimator : 16/31 [00:00<00:00, 20.83it/s]
55%|#####4 | Fitting SlidingEstimator : 17/31 [00:00<00:00, 21.37it/s]
58%|#####8 | Fitting SlidingEstimator : 18/31 [00:00<00:00, 21.87it/s]
61%|######1 | Fitting SlidingEstimator : 19/31 [00:00<00:00, 21.06it/s]
65%|######4 | Fitting SlidingEstimator : 20/31 [00:00<00:00, 21.54it/s]
68%|######7 | Fitting SlidingEstimator : 21/31 [00:01<00:00, 20.83it/s]
71%|####### | Fitting SlidingEstimator : 22/31 [00:01<00:00, 21.29it/s]
74%|#######4 | Fitting SlidingEstimator : 23/31 [00:01<00:00, 21.73it/s]
77%|#######7 | Fitting SlidingEstimator : 24/31 [00:01<00:00, 21.04it/s]
81%|######## | Fitting SlidingEstimator : 25/31 [00:01<00:00, 21.46it/s]
84%|########3 | Fitting SlidingEstimator : 26/31 [00:01<00:00, 20.83it/s]
87%|########7 | Fitting SlidingEstimator : 27/31 [00:01<00:00, 21.25it/s]
90%|######### | Fitting SlidingEstimator : 28/31 [00:01<00:00, 20.66it/s]
94%|#########3| Fitting SlidingEstimator : 29/31 [00:01<00:00, 21.07it/s]
97%|#########6| Fitting SlidingEstimator : 30/31 [00:01<00:00, 20.52it/s]
100%|##########| Fitting SlidingEstimator : 31/31 [00:01<00:00, 21.41it/s]
100%|##########| Fitting SlidingEstimator : 31/31 [00:01<00:00, 21.07it/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: 3.3s remaining: 0.0s
0%| | Fitting SlidingEstimator : 0/31 [00:00<?, ?it/s]
3%|3 | Fitting SlidingEstimator : 1/31 [00:00<00:02, 14.81it/s]
6%|6 | Fitting SlidingEstimator : 2/31 [00:00<00:01, 19.89it/s]
10%|9 | Fitting SlidingEstimator : 3/31 [00:00<00:01, 17.76it/s]
13%|#2 | Fitting SlidingEstimator : 4/31 [00:00<00:01, 19.90it/s]
16%|#6 | Fitting SlidingEstimator : 5/31 [00:00<00:01, 21.42it/s]
19%|#9 | Fitting SlidingEstimator : 6/31 [00:00<00:01, 19.77it/s]
23%|##2 | Fitting SlidingEstimator : 7/31 [00:00<00:01, 20.91it/s]
26%|##5 | Fitting SlidingEstimator : 8/31 [00:00<00:01, 19.71it/s]
29%|##9 | Fitting SlidingEstimator : 9/31 [00:00<00:01, 20.63it/s]
32%|###2 | Fitting SlidingEstimator : 10/31 [00:00<00:00, 21.43it/s]
35%|###5 | Fitting SlidingEstimator : 11/31 [00:00<00:00, 20.39it/s]
39%|###8 | Fitting SlidingEstimator : 12/31 [00:00<00:00, 21.10it/s]
42%|####1 | Fitting SlidingEstimator : 13/31 [00:00<00:00, 21.74it/s]
45%|####5 | Fitting SlidingEstimator : 14/31 [00:00<00:00, 20.80it/s]
48%|####8 | Fitting SlidingEstimator : 15/31 [00:00<00:00, 21.39it/s]
52%|#####1 | Fitting SlidingEstimator : 16/31 [00:00<00:00, 20.58it/s]
55%|#####4 | Fitting SlidingEstimator : 17/31 [00:00<00:00, 21.13it/s]
58%|#####8 | Fitting SlidingEstimator : 18/31 [00:00<00:00, 21.65it/s]
61%|######1 | Fitting SlidingEstimator : 19/31 [00:00<00:00, 22.12it/s]
65%|######4 | Fitting SlidingEstimator : 20/31 [00:00<00:00, 22.57it/s]
68%|######7 | Fitting SlidingEstimator : 21/31 [00:00<00:00, 21.72it/s]
71%|####### | Fitting SlidingEstimator : 22/31 [00:01<00:00, 22.15it/s]
74%|#######4 | Fitting SlidingEstimator : 23/31 [00:01<00:00, 22.52it/s]
77%|#######7 | Fitting SlidingEstimator : 24/31 [00:01<00:00, 21.73it/s]
81%|######## | Fitting SlidingEstimator : 25/31 [00:01<00:00, 22.14it/s]
84%|########3 | Fitting SlidingEstimator : 26/31 [00:01<00:00, 21.43it/s]
87%|########7 | Fitting SlidingEstimator : 27/31 [00:01<00:00, 21.83it/s]
90%|######### | Fitting SlidingEstimator : 28/31 [00:01<00:00, 21.18it/s]
94%|#########3| Fitting SlidingEstimator : 29/31 [00:01<00:00, 21.58it/s]
97%|#########6| Fitting SlidingEstimator : 30/31 [00:01<00:00, 21.96it/s]
100%|##########| Fitting SlidingEstimator : 31/31 [00:01<00:00, 22.13it/s]
100%|##########| Fitting SlidingEstimator : 31/31 [00:01<00:00, 21.75it/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: 4.9s remaining: 0.0s
0%| | Fitting SlidingEstimator : 0/31 [00:00<?, ?it/s]
3%|3 | Fitting SlidingEstimator : 1/31 [00:00<00:02, 14.82it/s]
6%|6 | Fitting SlidingEstimator : 2/31 [00:00<00:01, 14.85it/s]
10%|9 | Fitting SlidingEstimator : 3/31 [00:00<00:01, 17.99it/s]
13%|#2 | Fitting SlidingEstimator : 4/31 [00:00<00:01, 17.03it/s]
16%|#6 | Fitting SlidingEstimator : 5/31 [00:00<00:01, 18.74it/s]
19%|#9 | Fitting SlidingEstimator : 6/31 [00:00<00:01, 17.86it/s]
23%|##2 | Fitting SlidingEstimator : 7/31 [00:00<00:01, 19.11it/s]
26%|##5 | Fitting SlidingEstimator : 8/31 [00:00<00:01, 18.32it/s]
29%|##9 | Fitting SlidingEstimator : 9/31 [00:00<00:01, 19.31it/s]
32%|###2 | Fitting SlidingEstimator : 10/31 [00:00<00:01, 20.18it/s]
35%|###5 | Fitting SlidingEstimator : 11/31 [00:00<00:00, 20.95it/s]
39%|###8 | Fitting SlidingEstimator : 12/31 [00:00<00:00, 21.63it/s]
42%|####1 | Fitting SlidingEstimator : 13/31 [00:00<00:00, 20.66it/s]
45%|####5 | Fitting SlidingEstimator : 14/31 [00:00<00:00, 21.28it/s]
48%|####8 | Fitting SlidingEstimator : 15/31 [00:00<00:00, 21.85it/s]
52%|#####1 | Fitting SlidingEstimator : 16/31 [00:00<00:00, 20.97it/s]
55%|#####4 | Fitting SlidingEstimator : 17/31 [00:00<00:00, 21.51it/s]
58%|#####8 | Fitting SlidingEstimator : 18/31 [00:00<00:00, 22.00it/s]
61%|######1 | Fitting SlidingEstimator : 19/31 [00:00<00:00, 22.47it/s]
65%|######4 | Fitting SlidingEstimator : 20/31 [00:00<00:00, 21.60it/s]
68%|######7 | Fitting SlidingEstimator : 21/31 [00:00<00:00, 22.05it/s]
71%|####### | Fitting SlidingEstimator : 22/31 [00:01<00:00, 22.47it/s]
74%|#######4 | Fitting SlidingEstimator : 23/31 [00:01<00:00, 22.86it/s]
77%|#######7 | Fitting SlidingEstimator : 24/31 [00:01<00:00, 22.03it/s]
81%|######## | Fitting SlidingEstimator : 25/31 [00:01<00:00, 22.42it/s]
84%|########3 | Fitting SlidingEstimator : 26/31 [00:01<00:00, 22.79it/s]
87%|########7 | Fitting SlidingEstimator : 27/31 [00:01<00:00, 22.00it/s]
90%|######### | Fitting SlidingEstimator : 28/31 [00:01<00:00, 22.37it/s]
94%|#########3| Fitting SlidingEstimator : 29/31 [00:01<00:00, 21.66it/s]
97%|#########6| Fitting SlidingEstimator : 30/31 [00:01<00:00, 22.04it/s]
100%|##########| Fitting SlidingEstimator : 31/31 [00:01<00:00, 22.69it/s]
100%|##########| Fitting SlidingEstimator : 31/31 [00:01<00:00, 21.99it/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: 6.5s 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, 14.84it/s]
10%|9 | Fitting SlidingEstimator : 3/31 [00:00<00:01, 17.96it/s]
13%|#2 | Fitting SlidingEstimator : 4/31 [00:00<00:01, 20.06it/s]
16%|#6 | Fitting SlidingEstimator : 5/31 [00:00<00:01, 18.61it/s]
19%|#9 | Fitting SlidingEstimator : 6/31 [00:00<00:01, 20.01it/s]
23%|##2 | Fitting SlidingEstimator : 7/31 [00:00<00:01, 21.14it/s]
26%|##5 | Fitting SlidingEstimator : 8/31 [00:00<00:01, 19.89it/s]
29%|##9 | Fitting SlidingEstimator : 9/31 [00:00<00:01, 20.82it/s]
32%|###2 | Fitting SlidingEstimator : 10/31 [00:00<00:00, 21.62it/s]
35%|###5 | Fitting SlidingEstimator : 11/31 [00:00<00:00, 22.31it/s]
39%|###8 | Fitting SlidingEstimator : 12/31 [00:00<00:00, 22.92it/s]
42%|####1 | Fitting SlidingEstimator : 13/31 [00:00<00:00, 23.47it/s]
45%|####5 | Fitting SlidingEstimator : 14/31 [00:00<00:00, 22.21it/s]
48%|####8 | Fitting SlidingEstimator : 15/31 [00:00<00:00, 22.74it/s]
52%|#####1 | Fitting SlidingEstimator : 16/31 [00:00<00:00, 23.22it/s]
55%|#####4 | Fitting SlidingEstimator : 17/31 [00:00<00:00, 22.15it/s]
58%|#####8 | Fitting SlidingEstimator : 18/31 [00:00<00:00, 22.62it/s]
61%|######1 | Fitting SlidingEstimator : 19/31 [00:00<00:00, 23.05it/s]
65%|######4 | Fitting SlidingEstimator : 20/31 [00:00<00:00, 22.11it/s]
68%|######7 | Fitting SlidingEstimator : 21/31 [00:00<00:00, 22.54it/s]
71%|####### | Fitting SlidingEstimator : 22/31 [00:00<00:00, 22.94it/s]
74%|#######4 | Fitting SlidingEstimator : 23/31 [00:01<00:00, 22.07it/s]
77%|#######7 | Fitting SlidingEstimator : 24/31 [00:01<00:00, 22.48it/s]
81%|######## | Fitting SlidingEstimator : 25/31 [00:01<00:00, 22.86it/s]
84%|########3 | Fitting SlidingEstimator : 26/31 [00:01<00:00, 22.05it/s]
87%|########7 | Fitting SlidingEstimator : 27/31 [00:01<00:00, 22.43it/s]
90%|######### | Fitting SlidingEstimator : 28/31 [00:01<00:00, 22.80it/s]
94%|#########3| Fitting SlidingEstimator : 29/31 [00:01<00:00, 23.14it/s]
97%|#########6| Fitting SlidingEstimator : 30/31 [00:01<00:00, 22.34it/s]
100%|##########| Fitting SlidingEstimator : 31/31 [00:01<00:00, 23.24it/s]
100%|##########| Fitting SlidingEstimator : 31/31 [00:01<00:00, 22.67it/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: 8.0s 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)
0%| | Fitting SlidingEstimator : 0/31 [00:00<?, ?it/s]
3%|3 | Fitting SlidingEstimator : 1/31 [00:00<00:03, 9.86it/s]
6%|6 | Fitting SlidingEstimator : 2/31 [00:00<00:01, 14.92it/s]
10%|9 | Fitting SlidingEstimator : 3/31 [00:00<00:01, 14.89it/s]
13%|#2 | Fitting SlidingEstimator : 4/31 [00:00<00:01, 17.11it/s]
16%|#6 | Fitting SlidingEstimator : 5/31 [00:00<00:01, 16.53it/s]
19%|#9 | Fitting SlidingEstimator : 6/31 [00:00<00:01, 16.18it/s]
23%|##2 | Fitting SlidingEstimator : 7/31 [00:00<00:01, 17.48it/s]
26%|##5 | Fitting SlidingEstimator : 8/31 [00:00<00:01, 17.03it/s]
29%|##9 | Fitting SlidingEstimator : 9/31 [00:00<00:01, 16.70it/s]
32%|###2 | Fitting SlidingEstimator : 10/31 [00:00<00:01, 17.66it/s]
35%|###5 | Fitting SlidingEstimator : 11/31 [00:00<00:01, 18.53it/s]
39%|###8 | Fitting SlidingEstimator : 12/31 [00:00<00:01, 18.04it/s]
42%|####1 | Fitting SlidingEstimator : 13/31 [00:00<00:00, 18.80it/s]
45%|####5 | Fitting SlidingEstimator : 14/31 [00:00<00:00, 18.32it/s]
48%|####8 | Fitting SlidingEstimator : 15/31 [00:00<00:00, 18.97it/s]
52%|#####1 | Fitting SlidingEstimator : 16/31 [00:00<00:00, 18.51it/s]
55%|#####4 | Fitting SlidingEstimator : 17/31 [00:00<00:00, 18.12it/s]
58%|#####8 | Fitting SlidingEstimator : 18/31 [00:00<00:00, 18.72it/s]
61%|######1 | Fitting SlidingEstimator : 19/31 [00:01<00:00, 18.34it/s]
65%|######4 | Fitting SlidingEstimator : 20/31 [00:01<00:00, 18.89it/s]
68%|######7 | Fitting SlidingEstimator : 21/31 [00:01<00:00, 18.51it/s]
71%|####### | Fitting SlidingEstimator : 22/31 [00:01<00:00, 18.18it/s]
74%|#######4 | Fitting SlidingEstimator : 23/31 [00:01<00:00, 18.70it/s]
77%|#######7 | Fitting SlidingEstimator : 24/31 [00:01<00:00, 18.37it/s]
81%|######## | Fitting SlidingEstimator : 25/31 [00:01<00:00, 18.07it/s]
84%|########3 | Fitting SlidingEstimator : 26/31 [00:01<00:00, 18.56it/s]
87%|########7 | Fitting SlidingEstimator : 27/31 [00:01<00:00, 18.26it/s]
90%|######### | Fitting SlidingEstimator : 28/31 [00:01<00:00, 17.99it/s]
94%|#########3| Fitting SlidingEstimator : 29/31 [00:01<00:00, 17.75it/s]
97%|#########6| Fitting SlidingEstimator : 30/31 [00:01<00:00, 18.19it/s]
100%|##########| Fitting SlidingEstimator : 31/31 [00:01<00:00, 18.24it/s]
100%|##########| Fitting SlidingEstimator : 31/31 [00:01<00:00, 18.14it/s]
Using control points [ 3.50724321 4.37721471 15.59502306]
Total running time of the script: ( 0 minutes 19.306 seconds)
Estimated memory usage: 316 MB