3

我有一个包含大约 30 个特征的数据集,我想找出哪些特征对结果贡献最大。我有 5 种算法:

  1. 神经网络
  2. 后勤
  3. 幼稚的
  4. 随机森林
  5. Adaboost

我读了很多关于信息增益技术的文章,它似乎独立于所使用的机器学习算法。它就像一种预处理技术。

我的问题是,最佳实践是独立地为每个算法执行特征重要性还是只使用信息增益。如果是的话,每个使用的技术是什么?

4

2 回答 2

4

首先,值得强调的是,您必须仅根据训练数据执行特征选择,即使它是一个单独的算法。在测试期间,您然后从测试数据集中选择相同的特征。

一些浮现在脑海中的方法:

  1. 基于互信息的特征选择(例如这里),独立于分类器。
  2. 向后或向前选择(请参阅stackexchange 问题),适用于任何分类器,但可能成本高昂,因为您需要训练/测试许多模型。
  3. 作为分类器优化一部分的正则化技术,例如Lasso弹性网络。后者在具有高共线性的数据集中可能会更好。
  4. 主成分分析或任何其他对特征进行分组的降维技术(示例)。
  5. 一些模型计算潜在变量,您可以将其用于解释而不是原始特征(例如偏最小二乘法典型相关分析)。

特定的分类器可以通过提供有关特征/预测器的额外信息来帮助可解释性,这在我的脑海中:

  • 逻辑回归:您可以获得每个特征的 p 值。在您的解释中,您可以关注那些“显着”(例如 p 值 <0.05)。(二类线性判别分析相同)
  • 随机森林:可以返回一个变量重要性指数,将变量从最重要到最不重要进行排序。

我有一个包含大约 30 个特征的数据集,我想找出哪些特征对结果贡献最大。

这将取决于算法。如果你有 5 种算法,你可能会得到 5 个稍微不同的答案,除非你在分类之前执行特征选择(例如使用互信息)。一个原因是随机森林和神经网络会拾取非线性关系,而逻辑回归则不会。此外,朴素贝叶斯对交互视而不见。因此,除非您的研究明确涉及这 5 个模型,否则我宁愿选择一个模型并继续进行。

于 2019-01-04T10:36:10.633 回答
1

由于您的目的是对正在发生的事情有一些直觉,因此您可以执行以下操作:

为简单起见,让我们从随机森林开始,但您也可以使用其他算法来做到这一点。首先,你需要建立一个好的模型。很好,您需要对其性能感到满意,它应该是Robust,这意味着您应该使用验证和/或测试集。这些点非常重要,因为我们将分析模型如何做出决策,所以如果模型不好,你会得到不好的直觉。

建立模型后,您可以在两个级别上对其进行分析:针对整个数据集(了解您的过程),或针对给定的预测。对于这项任务,我建议您查看SHAP 库,该库计算可用于两种方法的特征贡献(即特征对我的分类器的预测有多大影响)。

有关此过程和更多工具的详细说明,您可以查看 fast.ai机器学习系列的优秀课程,其中第 2/3/4/5 课是关于这个主题的。

希望能帮助到你!

于 2019-01-07T09:22:49.923 回答