maxframe.tensor.cov#
- maxframe.tensor.cov(m, y=None, rowvar=True, bias=False, ddof=None, fweights=None, aweights=None)[源代码]#
给定数据和权重,估计协方差矩阵。
协方差表示两个变量一起变化的程度。如果我们检查 N 维样本 \(X = [x_1, x_2, ... x_N]^T\),则协方差矩阵元素 \(C_{ij}\) 是 \(x_i\) 和 \(x_j\) 的协方差。元素 \(C_{ii}\) 是 \(x_i\) 的方差。
有关算法的概述,请参见说明。
- 参数:
m (array_like) -- 包含多个变量和观测值的 1-D 或 2-D 数组。m 的每一行代表一个变量,每一列代表所有这些变量的一个观测值。另请参见下面的 rowvar。
y (array_like, optional) -- 一组额外的变量和观测值。y 的形式与 m 相同。
rowvar (bool, optional) -- 如果 rowvar 为 True(默认值),则每一行代表一个变量,列中是观测值。否则,关系是转置的:每一列代表一个变量,行中包含观测值。
bias (bool, optional) -- 默认归一化(False)是使用
(N - 1),其中N是给定的观测值数量(无偏估计)。如果 bias 为 True,则归一化使用N。在 numpy 版本 >= 1.5 中,这些值可以通过使用关键字ddof覆盖。ddof (int, optional) -- 如果不为
None,则覆盖由 bias 暗示的默认值。请注意,即使指定了 fweights 和 aweights,ddof=1也会返回无偏估计,而ddof=0会返回简单平均值。详见说明。默认值为None。fweights (array_like, int, optional) -- 整数频率权重的一维张量;每个观测向量应重复的次数。
aweights (array_like, optional) -- 观测向量权重的 1-D 张量。这些相对权重通常对于被认为 "重要" 的观测值较大,而对于被认为不太 "重要" 的观测值较小。如果
ddof=0,权重数组可用于为观测向量分配概率。
- 返回:
out -- 变量的协方差矩阵。
- 返回类型:
Tensor
参见
corrcoef归一化的协方差矩阵
备注
假设观测值位于观测数组 m 的列中,并且为了简洁起见,令
f = fweights和a = aweights。计算加权协方差的步骤如下:>>> w = f * a >>> v1 = mt.sum(w) >>> v2 = mt.sum(w * a) >>> m -= mt.sum(m * w, axis=1, keepdims=True) / v1 >>> cov = mt.dot(m * w, m.T) * v1 / (v1**2 - ddof * v2)
请注意,当
a == 1时,归一化因子v1 / (v1**2 - ddof * v2)会变为1 / (np.sum(f) - ddof),这是正确的。示例
考虑两个变量 \(x_0\) 和 \(x_1\),它们完全相关但方向相反:
>>> import maxframe.tensor as mt
>>> x = mt.array([[0, 2], [1, 1], [2, 0]]).T >>> x.execute() array([[0, 1, 2], [2, 1, 0]])
注意 \(x_0\) 增加的同时 \(x_1\) 减少。协方差矩阵清楚地显示了这一点:
>>> mt.cov(x).execute() array([[ 1., -1.], [-1., 1.]])
请注意元素 \(C_{0,1}\) 显示了 \(x_0\) 和 \(x_1\) 之间的相关性,它是负的。
此外,请注意 x 和 y 是如何组合的:
>>> x = [-2.1, -1, 4.3] >>> y = [3, 1.1, 0.12] >>> X = mt.stack((x, y), axis=0) >>> print(mt.cov(X).execute()) [[ 11.71 -4.286 ] [ -4.286 2.14413333]] >>> print(mt.cov(x, y).execute()) [[ 11.71 -4.286 ] [ -4.286 2.14413333]] >>> print(mt.cov(x).execute()) 11.71