了解 RandomForestRegressor 中的 max_features 参数

Posted

技术标签:

【中文标题】了解 RandomForestRegressor 中的 max_features 参数【英文标题】:Understanding max_features parameter in RandomForestRegressor 【发布时间】:2014-07-19 08:05:33 【问题描述】:

在使用自举样本构建随机森林中的每棵树时,对于每个终端节点,我们从 p 个变量中随机选择 m 个变量以找到最佳分割(p 是数据中的特征总数)。我的问题(针对 RandomForestRegressor)是:

1) max_features 对应什么(m 或 p 或其他)?

2) 是从max_features变量中随机选择m个变量(m的值是多少)?

3) 如果 max_features 对应于 m,那么我为什么要将它设置为等于 p 以进行回归(默认)?这个设置的随机性在哪里(即,它与 bagging 有什么不同)?

谢谢。

【问题讨论】:

【参考方案1】:

直接来自documentation:

[max_features] 是分割节点时要考虑的随机特征子集的大小。

所以max_features 就是你所说的m。当max_features="auto"m = p 并且树中没有进行特征子集选择,所以“随机森林”实际上是普通回归树的bagged ensemble。文档继续说

经验良好的默认值是 max_features=n_features 用于回归问题,max_features=sqrt(n_features) 用于分类任务

通过不同地设置max_features,您将获得一个“真正的”随机森林。

【讨论】:

那么为什么他们声称“经验良好的默认值是回归问题的 max_features=n_features”?正如您所说,这只是装袋-随机森林不应该比装袋更好吗? @csankar69:我不是回归树方面的专家。我确实在 RF 上工作,因为我使用它们进行分类,我可以向你保证,它们的作者在这些问题上是知识渊博的。在任何情况下,您都可以自己检查属性装袋是否有助于解决您的问题。 我 95% 确定回归的 max_features=n_features 是 scikit 的一个错误。 RF 的原始论文给出了回归的 max_features = n_features/3。使用前者甚至没有意义,它甚至不是射频。 感谢@UlysseMizrah 的评论! The Wikipedia article 参考 The Elements of Statistical Learning: 2nd Edition(Hastie et. al. 2009, p. 592),其中报告说原作者推荐 n_features / 3。我想我会发布这些额外的参考,以防万一有人感兴趣。 max_features=n_features 是否具有良好默认值的问题在stats.stackexchange.com/q/324370/295421 和github.com/scikit-learn/scikit-learn/issues/7254 上进行了深入讨论【参考方案2】:

@lynnyi,max_features 是在每个拆分级别而不是在整个决策树构造上考虑的特征数量。更清楚一点,在每个决策树的构建过程中,RF 仍然会使用所有的特征(n_features),但它只考虑“max_features”特征的数量进行节点分裂。并且“max_features”特征是从整个特征中随机选择的。您可以通过在 max_features=1 的 RF 中绘制一棵决策树来确认这一点,并检查该树的所有节点以计算所涉及的特征数量。

【讨论】:

这更像是对另一条评论的评论,而不是对问题的回答。 抱歉,我现在只有不到 50 个声望可以发表评论。 等一下,随机森林中的每棵树实际上都使用了所有特征,但是在每个节点上随机选择它们的子集?还是每棵树都采用特征子集并从那里获得每个节点的 max_features? @Ambleu,“随机森林中的每棵树实际上都使用了所有特征,但是在每个节点上随机选择它们的子集”是正确的。【参考方案3】:

max_features 基本上是随机选择的特征数量,并且在拆分时没有替换。假设您有 10 个独立的列或特征,那么 max_features=5 将在每次拆分时随机选择 5 个特征且不替换。

【讨论】:

以上是关于了解 RandomForestRegressor 中的 max_features 参数的主要内容,如果未能解决你的问题,请参考以下文章

将 GridSearchCV 用于 RandomForestRegressor

sklearn 中的 RandomForestRegressor 给出负分

RandomForestRegressor,特征重要性

RandomForestRegressor 和 feature_importances_ 错误

带有 RandomForestRegressor 的 param_grid 上的 GridSearchCV 错误

sklearn RandomForestRegressor 显示的树值中的差异