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将返回无偏估计,即使同时指定了 fweights 和 aweights,而ddof=0将返回简单平均值。有关详细信息,请参见注释。默认值为None。fweights (array_like, int, 可选) – 一维整数频率权重张量;每个观察向量应该重复的次数。
aweights (array_like, 可选) – 观测向量权重的一维张量。这些相对权重通常对于被认为“重要”的观测较大,对于被认为不那么“重要”的观测较小。如果
ddof=0,则权重数组可用于为观测向量分配概率。
- Returns
 out – 变量的协方差矩阵。
- Return type
 张量
另请参阅
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 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\) 之间的相关性为负。
此外,请注意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