我有二维 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/