Decomposition Methods
MI methods
CSP
Common Spatial Patterns and his happy little buddies!
- class brainda.algorithms.decomposition.csp.CSP(n_components: Optional[int] = None, max_components: Optional[int] = None)
Bases:
sklearn.base.BaseEstimator,sklearn.base.TransformerMixinCommon Spatial Pattern.
if n_components is None, auto finding the best number of components with gridsearch. The upper searching limit is determined by max_components, default is half of the number of channels.
- fit(X: numpy.ndarray, y: numpy.ndarray)
- transform(X: numpy.ndarray)
- class brainda.algorithms.decomposition.csp.FBCSP(n_components: Optional[int] = None, max_components: Optional[int] = None, n_mutualinfo_components: Optional[int] = None, filterbank: Optional[List[numpy.ndarray]] = None)
Bases:
brainda.algorithms.decomposition.base.FilterBankFBCSP.
FilterBank CSP based on paper [1]_.
References
- 1
Ang K K, Chin Z Y, Zhang H, et al. Filter bank common spatial pattern (FBCSP) in brain-computer interface[C]//2008 IEEE International Joint Conference on Neural Networks (IEEE World Congress on Computational Intelligence). IEEE, 2008: 2390-2397.
- fit(X: numpy.ndarray, y: numpy.ndarray)
- transform(X: numpy.ndarray)
- class brainda.algorithms.decomposition.csp.FBMultiCSP(n_components: Optional[int] = None, max_components: Optional[int] = None, multiclass: str = 'ovr', ajd_method: str = 'uwedge', n_mutualinfo_components: Optional[int] = None, filterbank: Optional[List[numpy.ndarray]] = None)
Bases:
brainda.algorithms.decomposition.base.FilterBank- fit(X: numpy.ndarray, y: numpy.ndarray)
- transform(X: numpy.ndarray)
- class brainda.algorithms.decomposition.csp.MultiCSP(n_components: Optional[int] = None, max_components: Optional[int] = None, multiclass: str = 'ovr', ajd_method: str = 'uwedge')
Bases:
sklearn.base.BaseEstimator,sklearn.base.TransformerMixin- fit(X: numpy.ndarray, y: numpy.ndarray)
- transform(X: numpy.ndarray)
- class brainda.algorithms.decomposition.csp.SPoC(n_components: Optional[int] = None, max_components: Optional[int] = None)
Bases:
sklearn.base.BaseEstimator,sklearn.base.TransformerMixinSource Power Comodulation (SPoC).
For continuous data, not verified.
- fit(X: numpy.ndarray, y: numpy.ndarray)
- transform(X: numpy.ndarray)
- brainda.algorithms.decomposition.csp.ajd(X: numpy.ndarray, method: str = 'uwedge') Tuple[numpy.ndarray, numpy.ndarray]
Wrapper of AJD methods.
- Parameters
X (ndarray) – Input covariance matrices, shape (n_trials, n_channels, n_channels)
method (str, optional) – AJD method (default uwedge).
- Returns
V (ndarray) – The diagonalizer, shape (n_channels, n_filters), usually n_filters == n_channels.
D (ndarray) – The mean of quasi diagonal matrices, shape (n_channels,).
- brainda.algorithms.decomposition.csp.csp_feature(W: numpy.ndarray, X: numpy.ndarray, n_components: int = 2) numpy.ndarray
Return CSP features in paper [1]_.
- Parameters
W (ndarray) – spatial filters from csp_kernel, shape (n_channels, n_filters)
X (ndarray) – eeg data, shape (n_trials, n_channels, n_samples)
n_components (int, optional) – the first k components to use, usually even number, by default 2
- Returns
features of shape (n_trials, n_features)
- Return type
ndarray
- Raises
ValueError – n_components should less than the number of channels
References
- 1
Ramoser H, Muller-Gerking J, Pfurtscheller G. Optimal spatial filtering of single trial EEG during imagined hand movement[J]. IEEE transactions on rehabilitation engineering, 2000, 8(4): 441-446.
- brainda.algorithms.decomposition.csp.csp_kernel(X: numpy.ndarray, y: numpy.ndarray) Tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray]
The kernel in CSP algorithm based on paper [1]_.
- Parameters
X (ndarray) – eeg data, shape (n_trials, n_channels, n_samples).
y (ndarray) – labels of X, shape (n_trials,).
- Returns
W (ndarray) – Spatial filters, shape (n_channels, n_filters).
D (ndarray) – Eigenvalues of spatial filters, shape (n_filters,).
A (ndarray) – Spatial patterns, shape (n_channels, n_patterns).
References
- 1
Ramoser H, Muller-Gerking J, Pfurtscheller G. Optimal spatial filtering of single trial EEG during imagined hand movement[J]. IEEE transactions on rehabilitation engineering, 2000, 8(4): 441-446.
- brainda.algorithms.decomposition.csp.gw_csp_kernel(X: numpy.ndarray, y: numpy.ndarray, ajd_method: str = 'uwedge') Tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray, numpy.ndarray]
Grosse-Wentrup AJD method based on paper [1]_.
- Parameters
X (ndarray) – eeg data, shape (n_trials, n_channels, n_samples).
y (ndarray) – labels, shape (n_trials).
ajd_method (str, optional) – ajd methods, ‘uwedge’ ‘rjd’ and ‘ajd_pham’, by default ‘uwedge’.
- Returns
W (ndarray) – Spatial filters, shape (n_channels, n_filters).
D (ndarray) – Eigenvalues of spatial filters, shape (n_filters,).
A (ndarray) – Spatial patterns, shape (n_channels, n_patterns).
mutual_info (ndarray) – Mutual informaiton values, shape (n_filters).
References
- 1
Grosse-Wentrup, Moritz, and Martin Buss. “Multiclass common spatial patterns and information theoretic feature extraction.” Biomedical Engineering, IEEE Transactions on 55, no. 8 (2008): 1991-2000.
- brainda.algorithms.decomposition.csp.spoc_kernel(X: numpy.ndarray, y: numpy.ndarray) Tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray]
Source Power Comodulation (SPoC) based on paper [1]_.
It is a continous CSP-like method.
- Parameters
X (ndarray) – eeg data, shape (n_trials, n_channels, n_samples)
y (ndarray) – labels, shape (n_trials)
- Returns
W (ndarray) – Spatial filters, shape (n_channels, n_filters).
D (ndarray) – Eigenvalues of spatial filters, shape (n_filters,).
A (ndarray) – Spatial patterns, shape (n_channels, n_patterns).
References
- 1
Sven Dähne, Frank C. Meinecke, Stefan Haufe, Johannes Höhne, Michael Tangermann, Klaus-Robert Müller, and Vadim V. Nikulin. SPoC: a novel framework for relating the amplitude of neuronal oscillations to behaviorally relevant parameters. NeuroImage, 86:111–122, 2014. doi:10.1016/j.neuroimage.2013.07.079.
SSVEP methods
CCA
CCA and its variants.
- class brainda.algorithms.decomposition.cca.ECCA(n_components: int = 1, n_jobs: Optional[int] = None)
Bases:
sklearn.base.BaseEstimator,sklearn.base.TransformerMixin,sklearn.base.ClassifierMixin- fit(X: Optional[numpy.ndarray], y: Optional[numpy.ndarray], Yf: Optional[numpy.ndarray] = None)
- predict(X: numpy.ndarray)
- transform(X: numpy.ndarray)
- class brainda.algorithms.decomposition.cca.FBECCA(filterbank: List[numpy.ndarray], n_components: int = 1, filterweights: Optional[numpy.ndarray] = None, n_jobs: Optional[int] = None)
Bases:
brainda.algorithms.decomposition.base.FilterBankSSVEP,sklearn.base.ClassifierMixin- fit(X: numpy.ndarray, y: numpy.ndarray, Yf: Optional[numpy.ndarray] = None)
- predict(X: numpy.ndarray)
- class brainda.algorithms.decomposition.cca.FBItCCA(filterbank: List[numpy.ndarray], n_components: int = 1, method: str = 'itcca2', filterweights: Optional[numpy.ndarray] = None, n_jobs: Optional[int] = None)
Bases:
brainda.algorithms.decomposition.base.FilterBankSSVEP,sklearn.base.ClassifierMixin- fit(X: numpy.ndarray, y: numpy.ndarray, Yf: Optional[numpy.ndarray] = None)
- predict(X: numpy.ndarray)
- class brainda.algorithms.decomposition.cca.FBMsCCA(filterbank: List[numpy.ndarray], n_components: int = 1, filterweights: Optional[numpy.ndarray] = None, n_jobs: Optional[int] = None)
Bases:
brainda.algorithms.decomposition.base.FilterBankSSVEP,sklearn.base.ClassifierMixin- fit(X: numpy.ndarray, y: numpy.ndarray, Yf: Optional[numpy.ndarray] = None)
- predict(X: numpy.ndarray)
- class brainda.algorithms.decomposition.cca.FBMsetCCA(filterbank: List[numpy.ndarray], n_components: int = 1, method: str = 'msetcca2', filterweights: Optional[numpy.ndarray] = None, n_jobs: Optional[int] = None)
Bases:
brainda.algorithms.decomposition.base.FilterBankSSVEP,sklearn.base.ClassifierMixin- fit(X: numpy.ndarray, y: numpy.ndarray, Yf: Optional[numpy.ndarray] = None)
- predict(X: numpy.ndarray)
- class brainda.algorithms.decomposition.cca.FBMsetCCAR(filterbank: List[numpy.ndarray], n_components: int = 1, filterweights: Optional[numpy.ndarray] = None, n_jobs: Optional[int] = None)
Bases:
brainda.algorithms.decomposition.base.FilterBankSSVEP,sklearn.base.ClassifierMixin- fit(X: numpy.ndarray, y: numpy.ndarray, Yf: Optional[numpy.ndarray] = None)
- predict(X: numpy.ndarray)
- class brainda.algorithms.decomposition.cca.FBSCCA(filterbank: List[numpy.ndarray], n_components: int = 1, filterweights: Optional[numpy.ndarray] = None, n_jobs: Optional[int] = None)
Bases:
brainda.algorithms.decomposition.base.FilterBankSSVEP,sklearn.base.ClassifierMixin- predict(X: numpy.ndarray)
- class brainda.algorithms.decomposition.cca.FBTRCA(filterbank: List[numpy.ndarray], n_components: int = 1, ensemble: bool = True, filterweights: Optional[numpy.ndarray] = None, n_jobs: Optional[int] = None)
Bases:
brainda.algorithms.decomposition.base.FilterBankSSVEP,sklearn.base.ClassifierMixin- fit(X: numpy.ndarray, y: numpy.ndarray, Yf: Optional[numpy.ndarray] = None)
- predict(X: numpy.ndarray)
- class brainda.algorithms.decomposition.cca.FBTRCAR(filterbank: List[numpy.ndarray], n_components: int = 1, ensemble: bool = True, filterweights: Optional[numpy.ndarray] = None, n_jobs: Optional[int] = None)
Bases:
brainda.algorithms.decomposition.base.FilterBankSSVEP,sklearn.base.ClassifierMixin- fit(X: numpy.ndarray, y: numpy.ndarray, Yf: Optional[numpy.ndarray] = None)
- predict(X: numpy.ndarray)
- class brainda.algorithms.decomposition.cca.FBTtCCA(filterbank: List[numpy.ndarray], n_components: int = 1, filterweights: Optional[numpy.ndarray] = None, n_jobs: Optional[int] = None)
Bases:
brainda.algorithms.decomposition.base.FilterBankSSVEP,sklearn.base.ClassifierMixin- fit(X: numpy.ndarray, y: numpy.ndarray, Yf: Optional[numpy.ndarray] = None, y_sub: Optional[numpy.ndarray] = None)
- predict(X: numpy.ndarray)
- class brainda.algorithms.decomposition.cca.ItCCA(n_components: int = 1, method: str = 'itcca2', n_jobs: Optional[int] = None)
Bases:
sklearn.base.BaseEstimator,sklearn.base.TransformerMixin,sklearn.base.ClassifierMixin- fit(X: Optional[numpy.ndarray], y: Optional[numpy.ndarray], Yf: Optional[numpy.ndarray] = None)
- predict(X: numpy.ndarray)
- transform(X: numpy.ndarray)
- class brainda.algorithms.decomposition.cca.MsCCA(n_components: int = 1, n_jobs: Optional[int] = None)
Bases:
sklearn.base.BaseEstimator,sklearn.base.TransformerMixin,sklearn.base.ClassifierMixinNote: MsCCA heavily depends on Yf, thus the phase information should be included when designs Yf.
- fit(X: Optional[numpy.ndarray], y: Optional[numpy.ndarray], Yf: Optional[numpy.ndarray] = None)
- predict(X: numpy.ndarray)
- transform(X: numpy.ndarray)
- class brainda.algorithms.decomposition.cca.MsetCCA(n_components: int = 1, method: str = 'msetcca2', n_jobs: Optional[numpy.ndarray] = - 1)
Bases:
sklearn.base.BaseEstimator,sklearn.base.TransformerMixin,sklearn.base.ClassifierMixin- fit(X: numpy.ndarray, y: numpy.ndarray, Yf: Optional[numpy.ndarray] = None)
- predict(X: numpy.ndarray)
- transform(X: numpy.ndarray)
- class brainda.algorithms.decomposition.cca.MsetCCAR(n_components: int = 1, n_jobs: Optional[numpy.ndarray] = - 1)
Bases:
sklearn.base.BaseEstimator,sklearn.base.TransformerMixin,sklearn.base.ClassifierMixin- fit(X: numpy.ndarray, y: numpy.ndarray, Yf: Optional[numpy.ndarray] = None)
- predict(X: numpy.ndarray)
- transform(X: numpy.ndarray)
- class brainda.algorithms.decomposition.cca.SCCA(n_components: int = 1, n_jobs: Optional[int] = None)
Bases:
sklearn.base.BaseEstimator,sklearn.base.TransformerMixin,sklearn.base.ClassifierMixin- fit(X: Optional[numpy.ndarray] = None, y: Optional[numpy.ndarray] = None, Yf: Optional[numpy.ndarray] = None)
- predict(X: numpy.ndarray)
- transform(X: numpy.ndarray)
- class brainda.algorithms.decomposition.cca.TRCA(n_components: int = 1, ensemble: bool = True, n_jobs: Optional[int] = None)
Bases:
sklearn.base.BaseEstimator,sklearn.base.TransformerMixin,sklearn.base.ClassifierMixin- fit(X: numpy.ndarray, y: numpy.ndarray, Yf: Optional[numpy.ndarray] = None)
- predict(X: numpy.ndarray)
- transform(X: numpy.ndarray)
- class brainda.algorithms.decomposition.cca.TRCAR(n_components: int = 1, ensemble: bool = True, n_jobs: Optional[int] = None)
Bases:
sklearn.base.BaseEstimator,sklearn.base.TransformerMixin,sklearn.base.ClassifierMixin- fit(X: numpy.ndarray, y: numpy.ndarray, Yf: Optional[numpy.ndarray] = None)
- predict(X: numpy.ndarray)
- transform(X: numpy.ndarray)
- class brainda.algorithms.decomposition.cca.TtCCA(n_components: int = 1, n_jobs: Optional[int] = None)
Bases:
sklearn.base.BaseEstimator,sklearn.base.TransformerMixin,sklearn.base.ClassifierMixin- fit(X: Optional[numpy.ndarray], y: Optional[numpy.ndarray], Yf: Optional[numpy.ndarray] = None, y_sub: Optional[numpy.ndarray] = None)
- predict(X: numpy.ndarray)
- transform(X: numpy.ndarray)
TRCA
Task-related Component Analysis (TRCA) and its variants.
- class brainda.algorithms.decomposition.trca.FBSSCOR(n_components: Optional[int] = None, max_components: Optional[int] = None, is_ensemble: bool = False, n_jobs: Optional[int] = None, filterbank: Optional[List[numpy.ndarray]] = None, filterweights: Optional[numpy.ndarray] = None)
Bases:
brainda.algorithms.decomposition.base.FilterBankFilter Bank SSCOR method in paper [1]_., [2]_.
filterbank and weights suggested in the paper.
- wp = [
[6, 90], [14, 90], [22, 90], [30, 90], [38, 90], [46, 90], [54, 90], [62, 90], [70, 90], [78, 90]
] ws = [
[4, 100], [10, 100], [16, 100], [24, 100], [32, 100], [40, 100], [48, 100], [56, 100], [64, 100], [72, 100]
]
- filterweights:
np.arange(1, 11)**(-1.25) + 0.25
References
- 1
Kumar G R K, Reddy M R. Designing a sum of squared correlations framework for enhancing SSVEP-based BCIs[J]. IEEE Transactions on Neural Systems and Rehabilitation Engineering, 2019, 27(10): 2044-2050.
- 2
Kumar G R K, Reddy M R. Correction to “Designing a Sum of Squared Correlations Framework for Enhancing SSVEP Based BCIs”[J]. IEEE Transactions on Neural Systems and Rehabilitation Engineering, 2020, 28(4): 1044-1045.
- transform(X: numpy.ndarray)
- class brainda.algorithms.decomposition.trca.FBTRCA(n_components: Optional[int] = None, max_components: Optional[int] = None, is_ensemble: bool = False, n_jobs: Optional[int] = None, filterbank: Optional[List[numpy.ndarray]] = None, filterweights: Optional[numpy.ndarray] = None)
Bases:
brainda.algorithms.decomposition.base.FilterBankFilter Bank TRCA method in paper [1]_.
Modified from https://github.com/mnakanishi/TRCA-SSVEP/blob/master/src/filterbank.m and https://github.com/mnakanishi/TRCA-SSVEP/blob/master/src/test_trca.m
filterbank and weights suggested in the paper.
- wp = [
[6, 90], [14, 90], [22, 90], [30, 90], [38, 90], [46, 90], [54, 90], [62, 90], [70, 90], [78, 90]
] ws = [
[4, 100], [10, 100], [16, 100], [24, 100], [32, 100], [40, 100], [48, 100], [56, 100], [64, 100], [72, 100]
]
- filterweights:
np.arange(1, 11)**(-1.25) + 0.25
Notes
nearly the same as matlab code above
References
- 1
Nakanishi M, Wang Y, Chen X, et al. Enhancing detection of SSVEPs for a high-speed brain speller using task-related component analysis[J]. IEEE Transactions on Biomedical Engineering, 2017, 65(1): 104-112.
- transform(X: numpy.ndarray)
- class brainda.algorithms.decomposition.trca.SSCOR(n_components: Optional[int] = None, max_components: Optional[int] = None, transform_method: Optional[str] = None, is_ensemble: bool = False, n_jobs: Optional[int] = None)
Bases:
sklearn.base.BaseEstimator,sklearn.base.TransformerMixin- fit(X: numpy.ndarray, y: numpy.ndarray)
- transform(X: numpy.ndarray)
- class brainda.algorithms.decomposition.trca.TRCA(n_components: Optional[int] = None, max_components: Optional[int] = None, transform_method: Optional[str] = None, is_ensemble: bool = False, n_jobs: Optional[int] = None)
Bases:
sklearn.base.BaseEstimator,sklearn.base.TransformerMixin- fit(X: numpy.ndarray, y: numpy.ndarray)
- transform(X: numpy.ndarray)
- brainda.algorithms.decomposition.trca.sscor_feature(W: numpy.ndarray, X: numpy.ndarray, n_components: int = 1) numpy.ndarray
Return sscor features.
Modified from https://github.com/mnakanishi/TRCA-SSVEP/blob/master/src/test_sscor.m
- Parameters
W (ndarray) – spatial filters from csp_kernel, shape (n_channels, n_filters)
X (ndarray) – eeg data, shape (n_trials, n_channels, n_samples)
n_components (int, optional) – the first k components to use, usually even number, by default 1
- Returns
features of shape (n_trials, n_components, n_samples)
- Return type
ndarray
- Raises
ValueError – n_components should less than half of the number of channels
- brainda.algorithms.decomposition.trca.sscor_kernel(X: numpy.ndarray, y: Optional[numpy.ndarray] = None, n_jobs: Optional[int] = None) Tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray]
The kernel part in SSCOR algorithm based on paper[1]_., [2]_.
Modified from https://github.com/mnakanishi/TRCA-SSVEP/blob/master/src/train_sscor.m
- Parameters
X (ndarray) – EEG data assuming removing mean, shape (n_trials, n_channels, n_samples)
y (ndarray) – labels, shape (n_trials, ), not used here
n_jobs (int, optional) – the number of jobs to use, default None
- Returns
W (ndarray) – filters, shape (n_channels, n_filters)
D (ndarray) – eigenvalues in descending order
A (ndarray) – spatial patterns, shape (n_channels, n_filters)
References
- 1
Kumar G R K, Reddy M R. Designing a sum of squared correlations framework for enhancing SSVEP-based BCIs[J]. IEEE Transactions on Neural Systems and Rehabilitation Engineering, 2019, 27(10): 2044-2050.
- 2
Kumar G R K, Reddy M R. Correction to “Designing a Sum of Squared Correlations Framework for Enhancing SSVEP Based BCIs”[J]. IEEE Transactions on Neural Systems and Rehabilitation Engineering, 2020, 28(4): 1044-1045.
- brainda.algorithms.decomposition.trca.trca_feature(W: numpy.ndarray, X: numpy.ndarray, n_components: int = 1) numpy.ndarray
Return trca features.
Modified from https://github.com/mnakanishi/TRCA-SSVEP/blob/master/src/test_trca.m
- Parameters
W (ndarray) – spatial filters from csp_kernel, shape (n_channels, n_filters)
X (ndarray) – eeg data, shape (n_trials, n_channels, n_samples)
n_components (int, optional) – the first k components to use, usually even number, by default 1
- Returns
features of shape (n_trials, n_components, n_samples)
- Return type
ndarray
- Raises
ValueError – n_components should less than half of the number of channels
- brainda.algorithms.decomposition.trca.trca_kernel(X: numpy.ndarray, y: Optional[numpy.ndarray] = None, n_jobs: Optional[int] = None) Tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray]
The kernel part in TRCA algorithm based on paper[1]_.
Modified from https://github.com/mnakanishi/TRCA-SSVEP/blob/master/src/train_trca.m
- Parameters
X (ndarray) – EEG data assuming removing mean, shape (n_trials, n_channels, n_samples)
y (ndarray) – labels, shape (n_trials, ), not used here
n_jobs (int, optional) – the number of jobs to use, default None
- Returns
W (ndarray) – filters, shape (n_channels, n_filters)
D (ndarray) – eigenvalues in descending order
A (ndarray) – spatial patterns, shape (n_channels, n_filters)
Notes
trca can be used in each class separately without y labels.
References
- 1
Nakanishi, Masaki, et al. “Enhancing detection of SSVEPs for a high-speed brain speller using task-related component analysis.” IEEE Transactions on Biomedical Engineering 65.1 (2018): 104-112.
Utils
- class brainda.algorithms.decomposition.base.FilterBank(base_estimator: sklearn.base.BaseEstimator, filterbank: Optional[List[numpy.ndarray]], n_jobs: Optional[int] = None)
Bases:
sklearn.base.BaseEstimator,sklearn.base.TransformerMixin- fit(X: numpy.ndarray, y: Optional[numpy.ndarray] = None, **kwargs)
- transform(X: numpy.ndarray, **kwargs)
- transform_filterbank(X: numpy.ndarray)
- class brainda.algorithms.decomposition.base.FilterBankSSVEP(filterbank: List[numpy.ndarray], base_estimator: sklearn.base.BaseEstimator, filterweights: Optional[numpy.ndarray] = None, n_jobs: Optional[int] = None)
Bases:
brainda.algorithms.decomposition.base.FilterBankFilter bank analysis for SSVEP.
- transform(X: numpy.ndarray)
- brainda.algorithms.decomposition.base.generate_cca_references(freqs, srate, T, phases: Optional[numpy.ndarray] = None, n_harmonics: int = 1)
- brainda.algorithms.decomposition.base.generate_filterbank(passbands: List[Tuple[float, float]], stopbands: List[Tuple[float, float]], srate: int, order: Optional[int] = None, rp: float = 0.5)
- brainda.algorithms.decomposition.base.robust_pattern(W: numpy.ndarray, Cx: numpy.ndarray, Cs: numpy.ndarray) numpy.ndarray
Transform spatial filters to spatial patterns based on paper [1]_.
- Parameters
W (ndarray) – Spatial filters, shape (n_channels, n_filters).
Cx (ndarray) – Covariance matrix of eeg data, shape (n_channels, n_channels).
Cs (ndarray) – Covariance matrix of source data, shape (n_channels, n_channels).
- Returns
A – Spatial patterns, shape (n_channels, n_patterns), each column is a spatial pattern.
- Return type
ndarray
References
- 1
Haufe, Stefan, et al. “On the interpretation of weight vectors of linear models in multivariate neuroimaging.” Neuroimage 87 (2014): 96-110.
- brainda.algorithms.decomposition.base.sign_flip(u, s, vh=None)
Flip signs of SVD or EIG using the method in paper [1]_.
- Parameters
u (ndarray) – left singular vectors, shape (M, K).
s (ndarray) – singular values, shape (K,).
vh (ndarray or None) – transpose of right singular vectors, shape (K, N).
- Returns
u (ndarray) – corrected left singular vectors.
s (ndarray) – singular values.
vh (ndarray) – transpose of corrected right singular vectors.
References