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

标签 python numpy

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

相关文章:

Python列出错误: localvars

java - 使用 Excel 工作表中的数据填充 Web 文本字段,提交页面,重复?

python - 如何使用 pip 和 virtualenv 创建、共享和运行 python 程序

python - 如何在不先转换为 numpy 的情况下将一个数据帧除以另一个数据帧?

python - 将 Python Pandas 数据框相乘以获得列中值的乘积

python - 如何在 Pandas 中重新采样数据帧字典(雅虎数据)?

c++ - cython 中循环的并行化

python - 使用 NumPy(或 SciPy)裁剪部分图像

python - 计算二值图像的质心 (openCV Python)

python - 如何读写透明的 GIF 动画