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 暗示的默认值。请注意,即使指定了 fweightsaweightsddof=1 也会返回无偏估计,而 ddof=0 会返回简单平均值。详见说明。默认值为 None

  • fweights (array_like, int, optional) -- 整数频率权重的一维张量;每个观测向量应重复的次数。

  • aweights (array_like, optional) -- 观测向量权重的 1-D 张量。这些相对权重通常对于被认为 "重要" 的观测值较大,而对于被认为不太 "重要" 的观测值较小。如果 ddof=0,权重数组可用于为观测向量分配概率。

返回:

out -- 变量的协方差矩阵。

返回类型:

Tensor

参见

corrcoef

归一化的协方差矩阵

备注

假设观测值位于观测数组 m 的列中,并且为了简洁起见,令 f = fweightsa = 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\) 之间的相关性,它是负的。

此外,请注意 xy 是如何组合的:

>>> 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