Hi there :)!
- MNE-Python version: 0.23.0
- os: Windows 10
- Misc: Working in Spyder, Python 3.8
I am currently working with the MEG dataset provided by Rathee et al. (2021).
Data: Link
Publication describing the data: Link
My goal is to replicate their results (i.e., binary classification of the events). To this end, I am using their original scripts (Script2 and Script3 from their git repo), which were written in Matlab using fieldtrip. I am rewriting the code in Python using MNE.
I have gotten to the point in Script2 where they apply CSP (line 191) for feature selection. This is where I am struggling.
My first attempt to perform the CSP in MNE looks as follows:
csp = CSP()
X = data_tr_toi_comb_bp.get_data()
y = data_tr_toi_comb_bp.events[:,2]
X_train = csp.fit(X,y)
Running the last line returns the following error:
LinAlgError: The leading minor of order 200 of B is not positive definite. The factorization of B could not be completed and no eigenvalues or eigenvectors were computed.
At the end of this post you can find the full error traceback if it’s of interest for you.
I found these two post (Post 1, Post 2) which addressed the same error messages, however, none of the advice given on them solved the problem for me.
Has anyone an idea what is causing this issue and what might be a possible work around?
Appendix:
- Full error traceback
Traceback (most recent call last):
File "C:\Users\vof7rng\Documents\FVA\LocalFiles\MNE\MatlabScripts_PythonVersions\Script2.py", line 156, in <module>
X_train = csp.fit(X,y)
File "C:\Users\vof7rng\AppData\Roaming\Python\Python38\site-packages\mne\decoding\csp.py", line 176, in fit
eigen_vectors, eigen_values = self._decompose_covs(covs,
File "C:\Users\vof7rng\AppData\Roaming\Python\Python38\site-packages\mne\decoding\csp.py", line 538, in _decompose_covs
eigen_values, eigen_vectors = linalg.eigh(covs[0], covs.sum(0))
File "C:\Program Files\Anaconda3\lib\site-packages\scipy\linalg\decomp.py", line 575, in eigh
raise LinAlgError('The leading minor of order {} of B is not '
LinAlgError: The leading minor of order 200 of B is not positive definite. The factorization of B could not be completed and no eigenvalues or eigenvectors were computed.
- Some additional info about the data that might help:
-
data_tr_toi_comb_bp
is the data, which-
tr
: is from the first recording session. The data from the first recording session is being used as training data. -
toi
: is from a specific time interval of interest, in this case from 0.5 - 3.5 s -
comb
: is from a specific binary combination, in this case Both Hand Imagery (event id: 1) & Both Feet Imagery (event id: 2) -
bp
: has been bandpassfiltered, in this case at 8-12 Hz
-
Note: I cropped the data at tmax=200
to allow faster computational times while only figuring out the code.
- data_tr_toi_comb_bp.info
>data_tr_toi_comb_bp.info
Out[450]:
<Info | 19 non-empty values
acq_pars: ACQactiveGround 0 ACQch.BIO001.gain 2000 ACQch.BIO001.highpass ...
bads: []
ch_names: MEG0112, MEG0113, MEG0122, MEG0123, MEG0132, MEG0133, MEG0142, ...
chs: 204 GRAD
custom_ref_applied: False
description: Anonymized using a time shift to preserve age at acquisition
dev_head_t: MEG device -> head transform
dig: 266 items (3 Cardinal, 5 HPI, 258 Extra)
experimenter: mne_anonymize
file_id: 4 items (dict)
highpass: 8.0 Hz
hpi_meas: 1 item (list)
hpi_results: 1 item (list)
line_freq: 50
lowpass: 12.0 Hz
meas_date: 2017-07-06 12:57:17 UTC
meas_id: 4 items (dict)
nchan: 204
projs: generated with autossp-1.0.1: on, generated with autossp-1.0.1: ...
sfreq: 250.0 Hz
subject_info: 9 items (dict)