主要通过使用 NumPy 和 Pandas 创建协方差矩阵,下面跟随我的步骤来吧。
第 1 步:收集数据
首先,您需要收集将用于协方差矩阵的数据。
出于演示目的,让我们使用以下有关 3 个变量的数据:
A | B | C |
45 | 38 | 10 |
37 | 31 | 15 |
42 | 26 | 17 |
35 | 28 | 21 |
39 | 33 | 12 |
步骤 2:使用 Python 获取总体协方差矩阵
若要获取总体协方差矩阵(基于 N),需要在下面的代码中将偏差设置为 True。
这是使用 NumPy 派生总体协方差矩阵的 Python 代码:
import numpy as np
A = [45, 37, 42, 35, 39]
B = [38, 31, 26, 28, 33]
C = [10, 15, 17, 21, 12]
data = np.array([A, B, C])
cov_matrix = np.cov(data, bias=True)
print(cov_matrix)
运行代码,你将获得以下矩阵:
[[ 12.64 7.68 -9.6 ]
[ 7.68 17.36 -13.8 ]
[ -9.6 -13.8 14.8 ]]
第 3 步:获取矩阵的可视化表示
您可以使用 seaborn 和 matplotlib 来直观地表示协方差矩阵。
代码:
import numpy as np
import seaborn as sn
import matplotlib.pyplot as plt
A = [45, 37, 42, 35, 39]
B = [38, 31, 26, 28, 33]
C = [10, 15, 17, 21, 12]
data = np.array([A, B, C])
cov_matrix = np.cov(data,bias=True)
sn.heatmap(cov_matrix, annot=True, fmt='g')
plt.show()
推导样本协方差矩阵
若要获取样本协方差(基于 N-1),需要在下面的代码中将偏差设置为 False。
下面是基于 NumPy 的代码:
import numpy as np
A = [45, 37, 42, 35, 39]
B = [38, 31, 26, 28, 33]
C = [10, 15, 17, 21, 12]
data = np.array([A, B, C])
covMatrix = np.cov(data, bias=False)
print(covMatrix)
这是您将得到的矩阵:
[[ 15.8 9.6 -12. ]
[ 9.6 21.7 -17.25]
[-12. -17.25 18.5 ]]
您还可以使用 Pandas 来获取样本协方差矩阵。
然后,您可以使用 Pandas 应用以下代码:
import pandas as pd
data = {'A': [45, 37, 42, 35, 39],
'B': [38, 31, 26, 28, 33],
'C': [10, 15, 17, 21, 12]
}
df = pd.DataFrame(data)
cov_matrix = pd.DataFrame.cov(df)
print(cov_matrix)
你会得到与 NumPy 派生的相同的矩阵:
A B C
A 15.8 9.60 -12.00
B 9.6 21.70 -17.25
C -12.0 -17.25 18.50
最后,您可以使用 seaborn 和 matplotlib 直观地表示协方差矩阵:
import pandas as pd
import seaborn as sn
import matplotlib.pyplot as plt
data = {'A': [45, 37, 42, 35, 39],
'B': [38, 31, 26, 28, 33],
'C': [10, 15, 17, 21, 12]
}
df = pd.DataFrame(data)
cov_matrix = pd.DataFrame.cov(df)
sn.heatmap(cov_matrix, annot=True, fmt='g')
plt.show()