相关系数说明-特征选择

时间:2020-06-15 15:06:26

标签: python heatmap correlation feature-selection

如何根据相关系数确定要从模型中删除的变量。

请参见下文变量示例:

Top 10 Absolute Correlations:
  Variable 1      Variable 2        Correlation Value
    pdays           pmonths           1.000000
    emp.var.rate    euribor3m         0.970955
    euribor3m       nr.employed       0.942545
    emp.var.rate    nr.employed       0.899818
    previous        pastEmail         0.798017
    emp.var.rate    cons.price.idx    0.763827
    cons.price.idx  euribor3m         0.670844
    contact         cons.price.idx    0.585899
    previous        nr.employed       0.504471
    cons.price.idx  nr.employed       0.490632

自变量的相关矩阵热图”:

Below picture is the correlation matrix heat map of Independent variables

问题:

1)如何从两个变量之间的相关值中删除一个高相关变量

Ex pdays pmonths 之间的相关值为 1.000000 从模型中删除哪个变量?天还是月?如何确定变量?

2)什么是删除变量的相关阈值范围?例如:> 0.65或> 0.90等

3)能否请您解释上面的热图,并说明要删除的变量及其原因?

3 个答案:

答案 0 :(得分:4)

您可以尝试使用其他选择标准在每对高度相关的功能之间进行选择。例如,您可以使用信息增益(IG),该信息可以度量某个要素提供的有关该类的信息(即,其熵的减少量[TAL14],[SIL07])。一旦您检测到一对高度相关的功能(例如,如您提到的 pdays pmonths ),就可以测量每个变量的IG并保持其最高IG。不过,您也可以使用其他选择标准代替IG(例如,互信息最大化[BHS15])。

对于阈值,您可以选择所需的值(取决于您的问题)。但是,为了安全起见,我会选择较高的值(例如0.95),尽管您也可以考虑将其设置在0.94或0.9附近。此外,您总是可以稳定一个较高的值,然后降低该值来检查模型的性能。

[TAL14]唐继良,塞勒姆·阿莱亚尼和刘欢。分类的特征选择:评论,第37–64页。 CRC出版社,2014年1月。

[SIL07] Yvan Saeys,IñakiInza和PedroLarrañaga。生物信息学中的特征选择技术综述。生物信息学,23(19):2507-2517,2007。

[BHS15] Mohamed Bennasar,Yulia Hicks和Rossitza Setchi。使用联合互信息最大化进行特征选择。专家系统与应用,42(22):8520-8532,2015。

答案 1 :(得分:1)

在这里,我列出了其他答案未涵盖的某些方面

  1. 天,月是的,它们是相关的-尝试生成其他特征,因为它们是周期性特征,因此您可以生成其他不一定相关的特征。阅读更多here

  2. 特征选择的整个过程必须在交叉验证或保留数据内完成,否则,将引入偏差并过度拟合模型。例如,您可以基于截止点选择功能,然后对其余数据进行建模,并评估性能以查看性能。您始终可以使用scikit-learn管道自动并很好地找到这些阈值。使用网格搜索。

  3. 如果您使用套索之类的线性模型-他们会自动进行选择!

  4. 关于阈值,这很困难-但是您也可以根据可用的数据点数来查找 top-n功能

  5. 相关系数是线性模型,如果协变量在线性上非常不同,则它们在非线性空间中可能非常相似。要了解更多信息,您可以研究与相互信息相关的论文,以找到大量示例。

我的答案与您要提出的问题没有直接关系-但我相信它们对于从更大的角度考虑并有益于您的建模非常重要。

答案 2 :(得分:0)

您可以使用sklearn轻松做到这一点。

from sklearn.feature_selection import VarianceThreshold

X = [[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]]
selector = VarianceThreshold(threshold=0.2)
X = selector.fit_transform(X)
print(X)

X是删除所有与其他变量之间相关性较低的不必要变量的结果