深度学习基础系列:协方差矩阵

协方差矩阵

协方差(covariance)可以用来观测变量之间是否存在线性相关性。然而,协方差本身有一些局限性,因此在实际应用中,我们通常还会使用相关系数来进一步评估变量之间的相关性。

协方差的局限性

  1. 尺度依赖性

    • 协方差的值受变量尺度的影响。如果一个变量的值范围很大,而另一个变量的值范围很小,即使它们之间有很强的线性关系,协方差的绝对值也可能很大或很小,这使得直接比较不同变量之间的协方差变得困难。
  2. 单位依赖性

    • 协方差的单位是两个变量单位的乘积。例如,如果一个变量的单位是米,另一个变量的单位是秒,那么协方差的单位将是米·秒。这使得协方差的解释更加复杂。

相关系数

为了克服协方差的这些局限性,我们通常使用 皮尔逊相关系数(Pearson correlation coefficient),它是一个标准化的协方差,范围在 -1 到 1 之间。

皮尔逊相关系数的定义

皮尔逊相关系数 ( r ) 定义为: $$ r_{XY} = \frac{\text{Cov}(X, Y)}{\sigma_X \sigma_Y} $$

其中:

  • $\sigma_X $ 是 X 的标准差。
  • $\sigma_Y$ 是 Y 的标准差。

解释

  • ( r = 1 ):完全正相关,即两个变量完全同向变化。
  • ( r = -1 ):完全负相关,即两个变量完全反向变化。
  • ( r = 0 ):没有线性相关性。
  • ( |r| ) 接近 1:表示强相关性。
  • ( |r| ) 接近 0:表示弱相关性或没有相关性。

Python 示例

可以使用 numpypandas 库来计算皮尔逊相关系数。

使用 numpy

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import numpy as np

# 示例数据
data = np.array([
    [1, 4],  # 观测值1
    [2, 5],  # 观测值2
    [3, 6]   # 观测值3
])

# 计算协方差矩阵
cov_matrix = np.cov(data, rowvar=False)
print("协方差矩阵:\n", cov_matrix)

# 计算相关系数矩阵
corr_matrix = np.corrcoef(data, rowvar=False) # correlation coefficient
print("相关系数矩阵:\n", corr_matrix)

这里的np.cov()np.corrcoef(),如果不指定第二个参数,那么第二个参数默认rowvar = True,意思就是这组数据是按照横向放置的,意思就是每一行是一个属性

而在有时候需要从文件里面读取一些属性,例如

1
2
3
X	Y	Z
x1	y1	z1
x2	y2	z2

那么这个时候,就可以把默认值设置为False,代表每一列是一个属性

使用 pandas

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
import pandas as pd

# 示例数据
data = pd.DataFrame({
    'X': [1, 2, 3],
    'Y': [4, 5, 6]
})

# 计算协方差矩阵
cov_matrix = data.cov()
print("协方差矩阵:\n", cov_matrix)

# 计算相关系数矩阵
corr_matrix = data.corr()
print("相关系数矩阵:\n", corr_matrix)

结论

协方差提供关于变量之间线性关系的一些信息,但建议使用皮尔逊相关系数。

相关系数不仅标准化了协方差,还提供了一个易于解释的度量,范围在 -1 到 1 之间。1代表存在正相关关系,-1代表负相关关系。

花有重开日,人无再少年
使用 Hugo 构建
主题 StackJimmy 设计