相关性(Correlation)是统计学中用来衡量两个变量之间关系的一种指标。它描述了两个变量在多大程度上以及以何种方式共同变化。相关性可以帮助我们理解变量之间的依赖性和预测关系。

相关系数

相关性的常用指标是相关系数,通常取值在 -1 和 1 之间:

  • 1 表示完全正相关:当一个变量增加时,另一个变量也以线性方式增加。
  • 0 表示无相关性:两个变量之间没有线性关系。
  • -1 表示完全负相关:当一个变量增加时,另一个变量以线性方式减少。

需要注意的是,相关系数仅衡量线性关系,如果两个变量之间存在非线性关系,相关系数可能无法准确反映其依赖性。

常用的相关系数

1. 皮尔逊相关系数(Pearson Correlation Coefficient)

  • 计算线性关系的强度和方向。
  • 公式:
  • 要求:变量之间是线性关系,并且数据是连续的和正态分布的。

2. 斯皮尔曼秩相关系数(Spearman’s Rank Correlation Coefficient)

  • 计算两个变量的秩序关系,不要求线性关系。
  • 公式:

其中 是两个变量的秩之差, 是样本数量。

3. 肯德尔秩相关系数(Kendall’s Tau Coefficient)

  • 衡量两个变量秩序关系的一致性。
  • 公式:

其中 是一致对, 是不一致对, 是重复值的对数。

相关系数矩阵

假设我们有两个变量 ,使用 np.corrcoef(x, y) 计算相关系数矩阵,得到: 其中:

  • 第一个元素 的相关系数,自相关性为 1。
  • 第二个元素 的相关系数,即我们通常关心的相关系数
  • 第三个元素 的相关系数,与 相同,即
  • 第四个元素 的相关系数,自相关性为 1。

计算步骤

以皮尔逊相关系数为例,计算步骤如下:

  1. 计算每个变量的均值
  2. 计算每个数据点的偏差
  3. 计算偏差的乘积和
  4. 计算每个变量的偏差平方和
  5. 代入公式计算相关系数

示例

假设有以下数据:

xy
12
23
35
44
56

计算皮尔逊相关系数:

  1. 计算均值:

  2. 计算偏差:

  3. 计算偏差乘积和:

  4. 计算 的偏差平方和:

  5. 计算 的偏差平方和:

  6. 计算相关系数:

Python 代码示例

import numpy as np
 
# 数据点
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 3, 5, 4, 6])
 
# 计算皮尔逊相关系数
correlation = np.corrcoef(x, y)[0, 1]
 
print(f'Pearson correlation coefficient: {correlation}')](<import numpy as np
 
# 数据点
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 3, 5, 4, 6])
 
# 计算相关系数矩阵
# np.corrcoef 返回一个相关系数矩阵,其中 [0, 0] 和 [1, 1] 是自相关系数,值为 1
# [0, 1] 和 [1, 0] 是 x 和 y 之间的相关系数
corr_matrix = np.corrcoef(x, y)
 
# 打印相关系数矩阵以便查看
print("Correlation matrix:")
print(corr_matrix)
 
# 提取 x 和 y 之间的相关系数
# 相关系数矩阵的 [0, 1] 位置上的值是 x 和 y 之间的皮尔逊相关系数
correlation = corr_matrix[0, 1]
 
print(f'Pearson correlation coefficient: {correlation}')>)

残差(Residual)

残差是实际值与预测值之间的差异,表示模型预测误差。对于每一个数据点

其中:

  • 是第 个数据点的实际值。
  • 是第 个数据点的预测值。

均方误差(Mean Squared Error, MSE)

均方误差是残差的平方的平均值,用于衡量模型的预测精度。它更重视大误差,因为误差被平方了。

其中:

  • 是数据点的数量。
  • 是第 个数据点的实际值。
  • 是第 个数据点的预测值。

平均绝对误差(Mean Absolute Error, MAE)

平均绝对误差是残差绝对值的平均值,用于衡量模型的平均预测误差。它对大误差的敏感度较低,因为误差没有被平方。

其中:

  • 是数据点的数量。
  • 是第 个数据点的实际值。
  • 是第 个数据点的预测值。

均方根误差(Root Mean Squared Error, RMSE)

均方根误差是均方误差(MSE)的平方根,用于衡量预测值与实际值之间的差异。RMSE 和 MSE 一样,对大误差比较敏感,因为误差被平方了。RMSE 的单位和原始数据的单位相同,使得其更容易解释。

其中:

  • 是数据点的数量。
  • 是第 个数据点的实际值。
  • 是第 个数据点的预测值。

示例

假设有以下数据点的实际值和预测值:

实际值 预测值
32.5
-0.50.0
22.1
78.1

我们可以计算残差、MSE、MAE 和 RMSE:

  1. 残差

  2. MSE

  3. MAE

  4. RMSE

Python 代码示例

import numpy as np
 
# 实际值和预测值
y = np.array([3, -0.5, 2, 7])
y_pred = np.array([2.5, 0.0, 2.1, 8.1])
 
# 计算残差
residuals = y - y_pred
print("Residuals:", residuals)
 
# 计算MSE
mse = np.mean((y - y_pred) ** 2)
print("Mean Squared Error (MSE):", mse)
 
# 计算MAE
mae = np.mean(np.abs(y - y_pred))
print("Mean Absolute Error (MAE):", mae)
 
# 计算RMSE
rmse = np.sqrt(mse)
print("Root Mean Squared Error (RMSE):", rmse)
 
# Residuals: [ 0.5 -0.5 -0.1 -1.1]
# Mean Squared Error (MSE): 0.43
# Mean Absolute Error (MAE): 0.55
# Root Mean Squared Error (RMSE): 0.6557438524302003