gpt4 book ai didi

python - 删除 numpy 中高度相关的列(没有 pandas)

转载 作者:行者123 更新时间:2023-12-01 07:18:40 25 4
gpt4 key购买 nike

我有二维 numpy 数组

[[1 3 4 2]
[2 4 6 4]
[-1 6 8 -2]
[6 4 2 12]]

我想删除高度相关的列,结果应该是这样的:

 [[1 3 4 ]
[2 4 6 ]
[-1 6 8]
[6 4 2 ]]

看到了吗?第 4 列被删除,因为它与第 1 列高度相关

我可以得到相关矩阵

np.corrcoef(numpy_array)

问题是如何删除相关性高的列?

我已经搜索了解决方案,但只得到了使用 Pandas 数据框的解决方案。由于某种原因我不想使用 Pandas 。我想要只使用 numpy 的解决方案

最佳答案

我们将利用 corr2_coeff获取所有列的成对相关值,然后选出相关值为 1 的对作为完全相关的列。

因此,步骤看起来像这样 -

In [47]: a # Input array
Out[47]:
array([[ 1, 3, 4, 2],
[ 2, 4, 6, 4],
[-1, 6, 8, -2],
[ 6, 4, 2, 12]])

# Get correlation values
In [48]: cor = corr2_coeff(a.T,a.T)

In [49]: cor
Out[49]:
array([[ 1. , -0.44992127, -0.87705802, 1. ],
[-0.44992127, 1. , 0.71818485, -0.44992127],
[-0.87705802, 0.71818485, 1. , -0.87705802],
[ 1. , -0.44992127, -0.87705802, 1. ]])

# Get pairs, which are the ones that are forming perfect correlation
In [53]: p = np.argwhere(np.triu(np.isclose(corr2_coeff(a.T,a.T),1),1))

In [54]: p
Out[54]: array([[0, 3]])

# Delete those cols
In [51]: np.delete(a,p[:,1],axis=1)
Out[51]:
array([[ 1, 3, 4],
[ 2, 4, 6],
[-1, 6, 8],
[ 6, 4, 2]])

关于python - 删除 numpy 中高度相关的列(没有 pandas),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57817499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com