scipy.stats.Covariance.
from_eigendecomposition#
- static Covariance.from_eigendecomposition(eigendecomposition)[source]#
透過特徵分解提供的共變異數表示法
- 參數:
- eigendecomposition序列
一個序列 (名義上為元組),包含由
scipy.linalg.eigh
或numpy.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