Note
Click here to download the full example code
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()
[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)
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