如何可视化一个大的相关矩阵?

数据挖掘 熊猫 相关性
2022-02-15 23:34:34

我有一个包含 24 个变量的数据集,其中 21 个是数字的。作为模型构建的一部分,我决定研究特征之间的相关性,所以我得到的是一个大的相关矩阵 (21 * 21)。

现在,可视化如此大的矩阵变得非常混乱,最终会伤到眼睛。所以我所做的是设置一个阈值并切掉那些大于这个值的行(比如 0.60)。但是,我得到了一个现在有几个 NaN 的矩阵。当我尝试删除这些空值时,矩阵会丢失所有数据,剩下的是 0*0 矩阵。

corr_matrix = data.corr()

threshold = 0.60

high_corr = corr_matrix.loc[corr_matrix >= 0.60]

high_corr.dropna(inplace=True)

print(high_corr)
Empty DataFrame
Columns = []

用 nans 可视化矩阵是一个好主意,但它也会导致空方格。我正在寻找一种方法,只保留那些值 >= 阈值的行,没有 nans。这将产生一个更小的矩阵,在 matplotlib 中绘制时会变得更简单。但是我无法这样编码;任何人都可以提出一些策略来处理如此大的矩阵吗?

1个回答

试试这个(注意我没有添加错误检查,所以如果你的阈值删除了所有值,它会崩溃)。另外,我将其设为绝对高通而不是普通高通,因为我假设您也会对强负相关感兴趣?如果不是,只需删除abs()过滤器功能中的 。

from numpy.random      import randn
from pandas            import DataFrame
from seaborn           import heatmap
from matplotlib.pyplot import show
from itertools         import combinations

def absHighPass(df, absThresh):
    passed = set()
    for (r,c) in combinations(df.columns, 2):
        if (abs(df.loc[r,c]) >= absThresh):
            passed.add(r)
            passed.add(c)
    passed = sorted(passed)
    return df.loc[passed,passed]

labels = [chr(x) for x in range(65,91)]
corrDf = DataFrame(randn(26,26), index=labels, columns=labels).corr()

#heatmap(corrDf,cmap="YlGnBu")
heatmap(absHighPass(corrDf,0.5),cmap="YlGnBu")
show()

这是过滤后的热图:

过滤

这是另一次运行,但使用未过滤的热图:

未经过滤的