【发布时间】:2021-09-30 12:45:53
【问题描述】:
我有一个这样的数据集
Target Politics Medicine School Hospital Domestic
-1 0 0 0 0 0
-1 0 1 0 0 1
-1 0 0 0 1 0
-1 0 0 0 0 0
1 0 0 0 0 1
1 0 0 0 0 0
Target 是我的目标变量,它可以取值 -1 或 1;其他列是布尔值,它们可以取值 0/1。 我正在计算这些变量之间的相关性如下:
import seaborn as sn
corr = df.corr(method = 'pearson')
sn.heatmap(corr, annot = True)
plt.show()
这会生成一个包含目标变量和布尔变量的相关矩阵。 我的变量之间有一些相关性,例如医学和学校(想象一下由上述代码生成的以下输出,使用完整的数据集):
index Target Politics Medicine School Hospital Domestic
Target 1 0.02 -0.08 0.04 0 0.001
Politics 0.02 1 0 0.002 0 0
Medicine -0.08 0. 1 0.76 0 0
School 0.04 0.002 0.76 1 0.24 0
Hospital 0 0 0 0 1 0
Domestic 0.001 0 0 0.24 0 1
(上表仅用于为您提供相关变量的示例)。 我将阈值设置为 0.5 以上,因此学校和医学是相关的。基于与目标变量的最佳相关性,我只想保留其中一个(医学的值为 -0.08,而学校的值为 0.04)。我想将这种方法概括如下:
- 如果两个变量相互关联,则需要对目标变量进行进一步分析,以便仅保留与目标具有较高相关性的变量。
我试过如下:
threshold=0.5
a=abs(corr)
result=a[a>threshold]
result=pd.DataFrame(data=a).reset_index()
但结果未显示我需要与 Target 的相应相关值进行比较的预期输出(仅限学校和医学)。
我的预期输出将是一个最终数据集,就像上面的第一个一样,包含 Target、Politics、Medicine、Hospital 和 Domestic 列,即,School 将被排除在外,因为它与 Medicine 相关并且与目标相比的绝对值较低医学。
我想创建一个函数,如果它还不存在,它会自动检查。
【问题讨论】:
-
预期结果不明确。请您提供示例表的输出吗?
-
只是上面的数据集,没有学校:
Target Politics Medicine Hospital Domestic。我不仅对删除该列感兴趣,而且对证明选择的合理性感兴趣,在遵循上述步骤(变量之间的相关性,然后与目标之间的相关性)之后创建这个最终数据集。如果您需要,很乐意提供更多信息。在这种情况下,只有两个变量相互关联,但我也有许多变量相关的数据集,所以我想自动选择和移动