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\) 的白化通过计算 \(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