numpy.cov #
- 麻木的。cov ( m , y = None , rowvar = True , bias = False , ddof = None , fweights = None , aweights = None , * , dtype = None ) [来源] #
给定数据和权重,估计协方差矩阵。
协方差表示两个变量共同变化的程度。如果我们检查 N 维样本,\(X = [x_1, x_2, ... x_N]^T\),则协方差矩阵元素\(C_{ij}\)是协方差 \(x_i\)和\(x_j\)。元素\(C_{ii}\)是方差\(x_i\)。
请参阅注释以了解算法的概要。
- 参数:
- m类数组
包含多个变量和观测值的一维或二维数组。m的每一行代表一个变量,每一列代表所有这些变量的单个观察值。另请参阅下面的rowvar。
- y类似数组,可选
一组额外的变量和观察结果。y具有与m相同的形式。
- rowvar布尔值,可选
如果rowvar为 True(默认),则每行代表一个变量,在列中包含观察值。否则,关系将被转置:每列代表一个变量,而行包含观察结果。
- 偏差布尔值,可选
默认归一化 (False) 为,其中是给定的观测值数量(无偏估计)。如果偏差为 True,则标准化为。这些值可以通过使用numpy 版本 >= 1.5 中的关键字来覆盖。
(N - 1)
N
N
ddof
- ddof int,可选
如果不是,则偏差
None
隐含的默认值将被覆盖。请注意,即使 指定了fweights和aweights ,也会返回无偏估计,并且会返回简单平均值。详细信息请参阅注释。默认值为。ddof=1
ddof=0
None
1.5版本中的新功能。
- fweights array_like,int,可选
整数频率权重的一维数组;每个观察向量应重复的次数。
1.10 版本中的新功能。
- aweights array_like,可选
观察向量权重的一维数组。对于被认为“重要”的观察结果,这些相对权重通常较大,对于被认为不太“重要”的观察结果,这些相对权重通常较小。权重数组是否
ddof=0
可用于为观察向量分配概率。1.10 版本中的新功能。
- dtype数据类型,可选
结果的数据类型。默认情况下,返回数据类型至少具有
numpy.float64
精度。1.20 版本中的新增功能。
- 返回:
- 输出数组
变量的协方差矩阵。
也可以看看
corrcoef
归一化协方差矩阵
笔记
为简洁起见,假设观测值位于观测值数组m和 let的列中。计算加权协方差的步骤如下:
f = fweights
a = aweights
>>> m = np.arange(10, dtype=np.float64) >>> f = np.arange(10) * 2 >>> a = np.arange(10) ** 2. >>> ddof = 1 >>> w = f * a >>> v1 = np.sum(w) >>> v2 = np.sum(w * a) >>> m -= np.sum(m * w, axis=None, keepdims=True) / v1 >>> cov = np.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\),它们完全相关,但方向相反:
>>> x = np.array([[0, 2], [1, 1], [2, 0]]).T >>> x array([[0, 1, 2], [2, 1, 0]])
注意如何\(x_0\)增加同时\(x_1\)减少。协方差矩阵清楚地表明了这一点:
>>> np.cov(x) 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 = np.stack((x, y), axis=0) >>> np.cov(X) array([[11.71 , -4.286 ], # may vary [-4.286 , 2.144133]]) >>> np.cov(x, y) array([[11.71 , -4.286 ], # may vary [-4.286 , 2.144133]]) >>> np.cov(x) array(11.71)