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