scipy.stats.Covariance.

from_eigendecomposition#

static Covariance.from_eigendecomposition(eigendecomposition)[source]#

透過特徵分解提供的共變異數表示法

參數:
eigendecomposition序列

一個序列 (名義上為元組),包含由 scipy.linalg.eighnumpy.linalg.eigh 計算出的特徵值和特徵向量陣列。

註解

令共變異數矩陣為 \(A\),令 \(V\) 為特徵向量矩陣,並令 \(W\) 為特徵值的對角矩陣,使得 V W V^T = A

當所有特徵值都嚴格為正數時,資料點 \(x\) 的白化 (whitening) 透過計算 \(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