【问题标题】:How to see correlation between features in scikit-learn?如何查看 scikit-learn 中特征之间的相关性?
【发布时间】:2019-12-01 02:55:43
【问题描述】:

我正在开发一个模型,它可以预测员工是继续工作还是离开公司。

特点如下

  • satisfaction_level
  • last_evaluation
  • number_projects
  • average_monthly_hours
  • time_spend_company
  • work_accident
  • promotion_last_5years
  • 部门
  • 工资
  • 左(布尔值)

在特征分析期间,我提出了两种方法,在这两种方法中,我得到了不同的特征结果。如图所示 here

当我绘制 heatmap 时,可以看出 satisfaction_level 与 left 有 负相关

另一方面,如果我只使用 pandas 进行分析,我得到的结果类似于 this

在上图中,可以看出satisfaction_level在分析中非常重要,因为较高满意程度保留工作的员工。

虽然在 time_spend_company 的情况下,热图显示它很重要,而另一方面,差异在第二张图像中并不是很重要。

现在我很困惑是否将其作为我的功能之一,以及我应该选择哪种方法来选择功能。

请帮我解决这个问题。

顺便说一句,我在 scikit-learn 中进行 ML,数据取自 here

【问题讨论】:

    标签: scikit-learn feature-selection


    【解决方案1】:

    特征之间的相关性与特征重要性关系不大。您的热图正确显示相关性。 事实上,在大多数情况下,当您谈论特征重要性时,您必须提供您正在使用的模型的上下文。不同的模型可能会选择不同的重要特征。此外,许多模型假设数据来自 IID(独立同分布随机变量),因此接近于零的相关性是可取的。

    例如,在 sklearn 中学习回归以估计特征重要性,您可以检查 coef_ 参数。

    【讨论】:

    • 那么,在上述两种方法中,我可以始终获得最佳结果的最佳方法是什么?
    • 如果您使用 pandas,请使用 corr = df.corr(),然后根据需要打印/绘制您的相关性。在这里查看方法的文档pandas.pydata.org/pandas-docs/stable/reference/api/…
    • @StukedCoder 是的。但是,您应该使用交叉验证来检查特征选择是否有用。请注意,Recursive feature elimination 等技术需要模型提供 coef_feature_importances_ 属性。
    • 所以最终应该使用所有方法并得出结论以选择最佳功能,如果我错了,请纠正我。
    • 我认为尝试所有方法都不可行。一个应该 CrossValidate 最有前途的方法,并选择一种在 CrossValidation 数据集(而不是在测试集上)表现最好的方法
    猜你喜欢
    • 2018-03-01
    • 2017-02-08
    • 2017-11-04
    • 1970-01-01
    • 2016-02-25
    • 2018-02-24
    • 2018-06-01
    • 2019-02-14
    • 2020-05-01
    相关资源
    最近更新 更多