mars.tensor.cov#

mars.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\)的方差。

查看算法的概述说明。

Parameters
  • m (array_like) – 一个包含多个变量和观测值的一维或二维数组。m 的每一行代表一个变量,每一列代表所有这些变量的单个观测值。另见下面的 rowvar

  • y (类似数组, 可选) – 一组额外的变量和观测值。 y 的形式与 m 的形式相同。

  • rowvar (bool, 可选) – 如果 rowvar 为 True(默认),则每行代表一个变量,列中包含观察值。否则,关系会被转置:每列代表一个变量,而行包含观察值。

  • 偏差 (布尔值, 可选) – 默认归一化 (False) 是通过 (N - 1), 其中 N 是给定的观察数量(无偏估计)。如果 偏差 为 True,那么归一化是通过 N。这些值可以通过在 numpy 版本 >= 1.5 中使用关键字 ddof 来覆盖。

  • ddof (int, 可选) – 如果不是 None,则默认值由 bias 覆盖。 注意,ddof=1 将返回无偏估计,即使同时指定了 fweightsaweights,而 ddof=0 将返回简单平均值。有关详细信息,请参见注释。默认值为 None

  • fweights (array_like, int, 可选) – 一维整数频率权重张量;每个观察向量应该重复的次数。

  • aweights (array_like, 可选) – 观测向量权重的一维张量。这些相对权重通常对于被认为“重要”的观测较大,对于被认为不那么“重要”的观测较小。如果 ddof=0,则权重数组可用于为观测向量分配概率。

Returns

out – 变量的协方差矩阵。

Return type

张量

另请参阅

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