pyriemann.classification.class_distinctiveness

pyriemann.classification.class_distinctiveness(X, y, exponent=1, metric='riemann', return_num_denom=False)

Measure class distinctiveness between classes of SPD matrices.

For two class problem, the class distinctiveness between class A and B on the manifold of SPD matrices is quantified as [1]:

\[\mathrm{classDis}(A, B, p) = \frac{d \left(\bar{X}^{A}, \bar{X}^{B}\right)^p} {\frac{1}{2} \left( \sigma_{X^{A}}^p + \sigma_{X^{B}}^p \right)}\]

where \(\bar{X}^{K}\) is the center of class K, ie the mean of matrices from class K (see pyriemann.utils.mean.mean_covariance()) and \(\sigma_{X^{K}}\) is the class dispersion, ie the mean of distances between matrices from class K and their center of class \(\bar{X}^{K}\):

\[\sigma_{X^{K}}^p = \frac{1}{m} \sum_{i=1}^m d \left(X_i, \bar{X}^{K}\right)^p\]

For more than two classes, it is quantified as:

\[\mathrm{classDis}\left(\left\{K_{j}\right\}, p\right) = \frac{\sum_{j=1}^{c} d\left(\bar{X}^{K_{j}}, \tilde{X}\right)^p} {\sum_{j=1}^{c} \sigma_{X^{K_{j}}}^p}\]

where \(\tilde{X}\) is the mean of centers of class of all \(c\) classes and \(p\) is the exponentiation of the distance measure named exponent at the input of this function.

Parameters
Xndarray, shape (n_matrices, n_channels, n_channels)

Set of SPD matrices.

yndarray, shape (n_matrices,)

Labels for each matrix.

exponentint, default=1

Parameter for exponentiation of distances, corresponding to p in the above equations:

  • exponent = 1 gives the formula originally defined in [1];

  • exponent = 2 gives the Fisher criterion generalized on the manifold, ie the ratio of the variance between the classes to the variance within the classes.

metricstring | dict, default=’riemann’

The type of metric used for centroid and distance estimation. See mean_covariance for the list of supported metric. The metric could be a dict with two keys, mean and distance in order to pass different metrics for the centroid estimation and the distance estimation. The original equation of class distinctiveness in [1] uses ‘riemann’ for both the centroid estimation and the distance estimation but you can customize other metrics with your interests.

return_num_denombool, default=False

Whether to return numerator and denominator of class_dis.

Returns
class_disfloat

Class distinctiveness value.

numfloat

Numerator value of class_dis. Returned only if return_num_denom is True.

denomfloat

Denominator value of class_dis. Returned only if return_num_denom is True.

Notes

New in version 0.4.

References

1(1,2,3)

Defining and quantifying users’ mental imagery-based BCI skills: a first step F. Lotte, and C. Jeunet. Journal of neural engineering, 15(4), 046030, 2018.