首页 > 解决方案 > 如何计算 MxN 相关矩阵

问题描述

我有一个 CSV 文件,其中包含一些推文和两组功能(A 和 B),如下所示:

TWEET, A1, A2, B1, B2, B3
tweet text, 0.23, 0.54, 120, 60, 39
tweet text, 0.33, 0.7, 70, 20, 36
tweet text, 0.8, 0.41, 68, 52, 29

如您所见,它们具有不同的长度(A 特征为 2 列,B 特征为 3 列)。我想比较他们的关系(或依赖)。我的目标是识别依赖特征以删除一些并减少特征尺寸。一种可能的解决方案是使用correlation matrix,它可以通过DataFrame.corr . 但是这个矩阵只接受相同大小的数组。问题是如何计算correlation matrix不同长度的特征,如上例中的 A 和 B?相关之后,我就可以说,比如特征A1和B2就足够了,我们可以去掉其他的特征;因为它们完全依赖于 A1 和 B2。

欢迎任何其他建议。

标签: pythondataframecorrelationcross-correlationpearson-correlation

解决方案


相关性不必是 MxN。您所做的只是检查N列之间的相关性,因此它将是NxN矩阵。从中N*N你可以考虑你喜欢的而忽略其他的。

import seaborn as sns
import pandas as pd
from io import StringIO
df = pd.read_csv(StringIO('''TWEET, A1, A2, B1, B2, B3
tweet text, 0.23, 0.54, 120, 60, 39
tweet text, 0.33, 0.7, 70, 20, 36
tweet text, 0.8, 0.41, 68, 52, 29
'''),sep=',')
print(df.corr()) # Pandas correlation matrix
sns.heatmap(df.corr(),annot = True)

输出:

    A1              A2          B1         B2          B3
A1  1.000000    -0.732859   -0.661319   0.167649    -0.991352
A2  -0.732859   1.000000    -0.025703   -0.793614   0.637235
B1  -0.661319   -0.025703   1.000000    0.628619    0.754036
B2  0.167649    -0.793614   0.628619    1.000000    -0.036827
B3  -0.991352   0.637235    0.754036    -0.036827   1.000000

在此处输入图像描述


推荐阅读