HOWTO · NumPy
Python NumPy 中的协方差
用 numpy.cov() 在 Python 中计算协方差:协方差的含义、一个双数组的完整示例、样本归一化与总体归一化(bias/ddof)的区别,以及如何解读协方差矩阵。
本页内容
理解协方差对于数据分析至关重要,尤其是当您试图确定两个变量如何一起变化时。在 Python 中,NumPy 库提供了一个函数 numpy.cov(),它为您计算两个或多个数组之间的协方差。无论您是数据科学家、统计学家,还是只是对数据分析感兴趣的人,掌握这个函数都可以增强您的分析技能并改进您的项目。
在本文中,我们将探讨如何有效地使用 numpy.cov(),提供清晰的示例和详细的说明,帮助您掌握 Python 中协方差的概念。那么,让我们开始吧!
什么是协方差?
协方差是一种统计度量,它表明两个随机变量一起变化的程度。如果变量倾向于一起增加和减少,则协方差为正。相反,如果一个变量倾向于增加而另一个变量减少,则协方差为负。接近零的协方差表明变量之间没有线性关系 — 请注意,这比独立性要弱:两个变量可以以非线性的方式相互依赖,而协方差仍然为零。
在实践中,协方差常用于金融、统计和机器学习,以理解不同数据集之间的关系。通过计算协方差,您可以深入了解一个数据集的变化如何影响另一个数据集。
使用 numpy.cov() 计算协方差
numpy.cov() 函数是在 Python 中计算协方差的首选方法。您可以向它传递两个一维数组(或一个行是变量的二维数组),它会返回协方差矩阵:对角线上是各变量的方差,对角线外是每对变量之间的协方差。默认情况下,它计算样本协方差,即除以 N-1,其中 N 是观测值的数量。
计算两个数组之间协方差的示例
让我们从一个计算两个 NumPy 数组之间协方差的简单示例开始。假设您有两个数据集,分别代表一组人的身高和体重。
import numpy as np
heights = np.array([1.5, 1.6, 1.7, 1.8, 1.9])
weights = np.array([50, 55, 60, 65, 70])
cov_matrix = np.cov(heights, weights)
print(cov_matrix)
输出:
[[2.50e-02 1.25e+00]
[1.25e+00 6.25e+01]]
在此示例中,我们首先导入 NumPy 库并创建两个数组:heights 和 weights。然后我们使用 numpy.cov() 来计算这两个数组之间的协方差矩阵。(当前的 NumPy 在这里以科学计数法打印小数值;2.50e-02 是 0.025,6.25e+01 是 62.5。)
左上角的值 (0.025) 是身高的方差,右下角的值 (62.5) 是体重的方差。对角线外的两个值 (1.25) 是身高与体重之间的协方差 — 为正,因为在这组数据中,个子较高的人也更重。这个矩阵简洁地展示了这两个变量如何相互作用。
使用总体归一化计算协方差
默认情况下,numpy.cov() 除以 N-1 — 这是样本归一化,当您的数据是来自更大总体的样本时,这是正确的选择。如果您的数据就是整个总体,则改为传递 bias=True(等价于 ddof=0)以除以 N:
import numpy as np
heights = np.array([1.5, 1.6, 1.7, 1.8, 1.9])
weights = np.array([50, 55, 60, 65, 70])
cov_matrix_population = np.cov(heights, weights, bias=True)
print(cov_matrix_population)
输出:
[[2.e-02 1.e+00]
[1.e+00 5.e+01]]
每个值都比样本版本小 (N-1)/N 倍 — 这里是 4/5,因此协方差从 1.25 降至 1.0。这两个版本一般来说都不比另一个“更准确”;它们回答的是不同的问题,并且当 N 很大时差异可以忽略不计。当数据涵盖了您关心的整个总体时使用总体形式,否则使用默认的样本形式。
解读协方差矩阵
理解协方差矩阵对于根据数据做出明智的决策至关重要。协方差矩阵的对角元素表示每个变量的方差,而非对角元素表示变量之间的协方差。
在解读协方差值时,请考虑以下几点:
- 正协方差表示变量倾向于一起增加或减少。
- 负协方差表明一种反比关系,其中一个变量增加而另一个变量减少。
- 接近零的协方差意味着变量之间没有线性关系。
协方差不会告诉您的一件事是关系的强度:它的大小取决于变量的单位和尺度,因此协方差值在不同的数据集之间不可比较。这种可比性正是相关性所增加的,它将协方差归一化到 -1 到 1 的范围内。在我们的示例中,身高与体重之间的正协方差只说明随着身高的增加,体重也倾向于增加 — 这一洞察可以指导进一步的分析或决策过程。
结论
协方差是统计学和数据分析中的一个基本概念,Python 中的 numpy.cov() 函数使得计算数据集之间的协方差变得容易。通过理解如何使用这个函数 — 包括在样本归一化和总体归一化之间进行选择 — 您可以获得关于不同变量之间关系的宝贵洞察。无论您是分析金融数据、进行科学研究,还是从事机器学习项目,掌握协方差都将增强您的分析工具包。那么,开始使用 NumPy,探索数据关系这个迷人的世界吧!
FAQ
-
什么是协方差?
协方差是一种统计度量,它表明两个随机变量如何一起变化,展示它们之间的关系。 -
如何在 Python 中计算协方差?
您可以使用numpy.cov()函数在 Python 中计算协方差,该函数接收一个或多个 NumPy 数组并返回协方差矩阵。 -
正协方差是什么意思?
正协方差表示随着一个变量的增加,另一个变量也倾向于增加。 -
协方差可以是负数吗?
是的,负协方差表明一个变量倾向于增加,而另一个变量减少。 -
协方差和相关性之间有什么区别?
协方差衡量两个变量之间关系的方向,而相关性衡量该关系的强度和方向,并归一化到 -1 和 1 之间。