强制随机森林分类器使用所有输入特征?

Posted

技术标签:

【中文标题】强制随机森林分类器使用所有输入特征?【英文标题】:Force the random forest classifier to use all the input features? 【发布时间】:2020-07-06 10:38:35 【问题描述】:

为了执行二元预测,我有 5 个特性要用于我的随机森林分类器,其中两个根本没有被使用。我知道机器学习的重点是仅选择有用的特征,但其他三个特征可能有偏差的数据,我想确保我的所有特征都以同等权重使用来运行我的分类器。我找不到这个问题的直接答案。我在python 中使用sklearn 来完成这项工作。任何 cmets/建议将不胜感激。

【问题讨论】:

您可以尝试仅使用未使用的 3/5 特征运行分析,并将它们的预测能力与所有 5 的运行进行比较 - 如果在那里获得非常低的准确度,它们可能只是没有用的预测变量。 感谢@katardin,但由于偏见,这是我想要避免的。我知道这两个是鉴别器的事实,只是其他 3 个特征的训练样本很可能存在偏差。这就是为什么,我正在寻找一种强制包含所有内容的方法。 如果你认为你有一个古怪的训练样本,你可以调用一个新的随机训练样本。据我所知,您已经在分析中包含了所有内容,它只是给您不喜欢的结果。在有限的深度内,随机树分类器不必最终使用所有特征。 【参考方案1】:

您可以通过设置max_features = None 来请求在随机森林分类器的每个拆分中考虑的所有特征。

来自docs:

ma​​x_features :int、float、string 或 None,可选(默认 =“auto”)

在寻找最佳分割时要考虑的特征数量:

如果是 int,则在每次拆分时考虑 max_features 特征。

如果是浮点数,则 max_features 是一个分数,并且在每次拆分时都会考虑 int(max_features * n_features) 特征。

如果是“自动”,那么max_features=sqrt(n_features)

如果“sqrt”,则为max_features=sqrt(n_features)(与“auto”相同)。

如果是“log2”,那么max_features=log2(n_features)

如果没有,那么max_features=n_features

Why is Random Forest with a single tree much better than a Decision Tree classifier? 中的答案可能有助于解释和提供一些上下文。

【讨论】:

感谢@desertnaut。我之前看过它并尝试根据它的定义使用它,但最后,当我检查它们在分类器中的重要性时,我的两个特征得到“0”。我对此感到非常困惑。 @Phyast10 该帖子准确地回答了您在问题中提出的要求。如果您已经尝试过,那么您应该在问题中包含此信息(我们要求提供代码而不是口头描述是有原因的)。鉴于这些额外信息,您的假设是错误:重要性为零并不意味着算法没有考虑这些特征;这意味着它有,但它发现它们没有信息。在这种情况下,坚持模型必须使用具有相同权重的所有特征是武断的、没有根据的,而且根本不是 ML 的工作原理。 @Phyast10 实际上,默认设置为max_features 的标准 RF 算法非常适合这种情况,确保至少对于某些拆分,一些信息量更大的特征将是从选择中排除,留给其他人考虑的空间。【参考方案2】:

它可以帮助你的是设置参数max_feature = 1,所以每个节点都会采用一个(均匀分布的)随机特征,它会被强制使用它。不过,您也需要设置树的深度,因为它会无限添加节点,直到接收到主要特征之一。

【讨论】:

感谢您的反馈。我意识到与这些功能相关的值非常小,它们都被视为“0”。这就是为什么没有包括这两个功能的原因。现在我已经对它们进行了相应的缩放,虽然随机森林不应该有这个问题。

以上是关于强制随机森林分类器使用所有输入特征?的主要内容,如果未能解决你的问题,请参考以下文章

随机森林回归器的特征选择

如何使用随机森林分类器确定用于预测类别的特征值范围

为啥以两种不同方式应用随机森林分类器的特征选择结果不同

sklearn中的随机森林

决策树与随机森林

使用随机森林(Random Forest)进行特征筛选并可视化