scipy.stats.Covariance.

from_eigendecomposition#

статический Ковариация.from_eigendecomposition(разложение по собственным значениям)[источник]#

Представление ковариации через собственное разложение

Параметры:
разложение по собственным значениямпоследовательность

Последовательность (номинально кортеж), содержащая массивы собственных значений и собственных векторов, вычисленные с помощью scipy.linalg.eigh или numpy.linalg.eigh.

Примечания

Пусть ковариационная матрица будет \(A\), пусть \(V\) будет матрицей собственных векторов, и пусть \(W\) была диагональной матрицей собственных значений такой, что V W V^T = A.

Когда все собственные значения строго положительны, отбеливание точки данных \(x\) выполняется путем вычисления \(x^T (V W^{-1/2})\), где обратный квадратный корень можно взять поэлементно. \(\log\det{A}\) рассчитывается как \(tr(\log{W})\), где \(\log\) операция выполняется поэлементно.

Это Covariance класс поддерживает вырожденные ковариационные матрицы. При вычислении _log_pdet, неположительные собственные значения игнорируются. Отбеливание не определено корректно, когда точка для отбеливания не лежит в пространстве столбцов ковариационной матрицы. Принятое здесь соглашение — рассматривать обратный квадратный корень неположительных собственных значений как нули.

Примеры

Подготовить симметричную положительно определённую ковариационную матрицу A и точка данных x.

>>> import numpy as np
>>> from scipy import stats
>>> rng = np.random.default_rng()
>>> n = 5
>>> A = rng.random(size=(n, n))
>>> A = A @ A.T  # make the covariance symmetric positive definite
>>> x = rng.random(size=n)

Выполнить собственное разложение A и создать Covariance объект.

>>> w, v = np.linalg.eigh(A)
>>> cov = stats.Covariance.from_eigendecomposition((w, v))

Сравните функциональность Covariance объекта с эталонными реализациями.

>>> res = cov.whiten(x)
>>> ref = x @ (v @ np.diag(w**-0.5))
>>> np.allclose(res, ref)
True
>>> res = cov.log_pdet
>>> ref = np.linalg.slogdet(A)[-1]
>>> np.allclose(res, ref)
True