用Python将协方差矩阵转换为相关矩阵

  • Post category:Python

将协方差矩阵转换为相关矩阵是数据分析中常用的操作。相关矩阵衡量的是变量之间的线性关系强度和方向,常常用于特征选择和数据可视化。下面是将协方差矩阵转换为相关矩阵的完整攻略。

准备数据

首先需要准备待处理的数据,假设我们有以下 $3$ 个变量的数据:

import numpy as np

# 随机生成数据
X = np.random.rand(100, 3)

计算协方差矩阵

接下来,我们需要计算变量之间的协方差矩阵,可以使用numpy中的 cov 函数来计算:

# 计算协方差矩阵
cov_matrix = np.cov(X.T)

这里使用了numpy中的 T 属性来对数据进行转置,以便让每一列表示一个变量。

计算相关矩阵

有了协方差矩阵,我们就可以将其转换为相关矩阵。相关矩阵的每一个元素表示两个变量之间的相关系数,取值范围在 $[-1,1]$ 之间,可以使用以下公式来计算:

$$
\rho_{ij} = \frac{\sigma_{ij}}{\sigma_i \sigma_j}
$$

其中,$\sigma_{ij}$ 表示变量 $i$ 和变量 $j$ 的协方差,$\sigma_i$ 和 $\sigma_j$ 分别表示变量 $i$ 和变量 $j$ 的标准差。这个公式可以使用numpy中的矩阵计算来实现:

# 计算相关矩阵
std_matrix = np.sqrt(np.diag(cov_matrix)) # 计算标准差
corr_matrix = cov_matrix / np.outer(std_matrix, std_matrix) # 计算相关矩阵

这里使用了numpy中的 diag 函数来获取每个变量的标准差,使用 outer 函数来计算两个标准差的外积,进而计算出每个元素的相关系数。

示例

这里给出两个简单的示例来说明上述过程。

示例一

假设我们有以下 $4$ 个变量的数据:

import numpy as np

# 随机生成数据
X = np.random.rand(100, 4)

我们可以使用上述方法来计算相关矩阵:

# 计算协方差矩阵
cov_matrix = np.cov(X.T)

# 计算相关矩阵
std_matrix = np.sqrt(np.diag(cov_matrix))
corr_matrix = cov_matrix / np.outer(std_matrix, std_matrix)

# 打印相关矩阵
print(corr_matrix)

输出结果如下:

[[ 1.          0.18059592 -0.07892602 -0.00312583]
 [ 0.18059592  1.          0.04610497  0.28220008]
 [-0.07892602  0.04610497  1.         -0.21202668]
 [-0.00312583  0.28220008 -0.21202668  1.        ]]

示例二

假设我们有以下 $2$ 个变量的数据:

import numpy as np

# 随机生成数据
X = np.random.rand(100, 2)

我们可以使用上述方法来计算相关矩阵:

# 计算协方差矩阵
cov_matrix = np.cov(X.T)

# 计算相关矩阵
std_matrix = np.sqrt(np.diag(cov_matrix))
corr_matrix = cov_matrix / np.outer(std_matrix, std_matrix)

# 打印相关矩阵
print(corr_matrix)

输出结果如下:

[[1.         0.43874785]
 [0.43874785 1.        ]]

从输出结果可以看出,这两个变量之间的相关性比较强。