Python 如果相关性大于0.75,则从数据帧中删除该列
我有一个数据帧名称Python 如果相关性大于0.75,则从数据帧中删除该列,python,r,pandas,machine-learning,scikit-learn,Python,R,Pandas,Machine Learning,Scikit Learn,我有一个数据帧名称data,我使用 corr = data.corr() 如果两列之间的corr大于0.75,请从数据帧data中删除其中一列。我尝试了一些选择 raw =corr[(corr.abs()>0.75) & (corr.abs() < 1.0)] raw=corr[(corr.abs()>0.75)和(corr.abs()
data
,我使用
corr = data.corr()
如果两列之间的corr
大于0.75,请从数据帧data
中删除其中一列。我尝试了一些选择
raw =corr[(corr.abs()>0.75) & (corr.abs() < 1.0)]
raw=corr[(corr.abs()>0.75)和(corr.abs()<1.0)]
但这并没有帮助,我需要来自raw的列号,其值为非零。基本上是用一些python命令替换下面的R命令
{hc=findCorrelation(corr,cutoff = 0.75)
hc = sort(hc)
data <- data[,-c(hc)]}
{hc=findCorrelation(corr,cutoff=0.75)
hc=排序(hc)
数据使用np.eye
忽略对角线值,并查找具有某个绝对值大于阈值的值的所有列。使用逻辑求反作为索引和列的掩码
你的例子
m = ~(corr.mask(np.eye(len(corr), dtype=bool)).abs() > 0.75).any()
raw = corr.loc[m, m]
np.random.seed([3,1415])
data = pd.DataFrame(
np.random.randint(10, size=(10, 10)),
columns=list('ABCDEFGHIJ'))
data
A B C D E F G H I J
0 0 2 7 3 8 7 0 6 8 6
1 0 2 0 4 9 7 3 2 4 3
2 3 6 7 7 4 5 3 7 5 9
3 8 7 6 4 7 6 2 6 6 5
4 2 8 7 5 8 4 7 6 1 5
5 2 8 2 4 7 6 9 4 2 4
6 6 3 8 3 9 8 0 4 3 0
7 4 1 5 8 6 0 8 7 4 6
8 3 5 8 5 1 5 1 4 3 9
9 5 5 7 0 3 2 5 8 8 9
工作示例
m = ~(corr.mask(np.eye(len(corr), dtype=bool)).abs() > 0.75).any()
raw = corr.loc[m, m]
np.random.seed([3,1415])
data = pd.DataFrame(
np.random.randint(10, size=(10, 10)),
columns=list('ABCDEFGHIJ'))
data
A B C D E F G H I J
0 0 2 7 3 8 7 0 6 8 6
1 0 2 0 4 9 7 3 2 4 3
2 3 6 7 7 4 5 3 7 5 9
3 8 7 6 4 7 6 2 6 6 5
4 2 8 7 5 8 4 7 6 1 5
5 2 8 2 4 7 6 9 4 2 4
6 6 3 8 3 9 8 0 4 3 0
7 4 1 5 8 6 0 8 7 4 6
8 3 5 8 5 1 5 1 4 3 9
9 5 5 7 0 3 2 5 8 8 9
当应用上面的代码时,我得到了一些单元格的NAs,这正常吗?视情况而定。为了让我告诉你,我需要想象一个可能发生这种情况的场景,或者你可以问一个问题,你在哪里提供了发生这种情况的示例数据集。步骤是,1.提供产生问题的最小数据集。2.描述y您正在尝试。3.您尝试尝试尝试的代码。4.为什么结果不是您期望的结果。5.表示您期望的数据集。从机器学习的上下文中,除了一个高度相关的列外,应该删除所有列。例如,取列“C”和“H”。您应该删除其中一个,而不是两个。如果您根据我的评论更正代码,我将不胜感激。此函数应成为数据帧的一部分。它可以节省通过corr矩阵搜索高相关性功能的时间
raw = corr.loc[m, m]
raw
A B D I
A 1.00 0.22 -0.12 0.13
B 0.22 1.00 -0.08 -0.34
D -0.12 -0.08 1.00 -0.45
I 0.13 -0.34 -0.45 1.00