sklearn 随机森林分类器可以处理分类变量吗?

Posted

技术标签:

【中文标题】sklearn 随机森林分类器可以处理分类变量吗?【英文标题】:Can sklearn random forest classifier handle categorical variables? 【发布时间】:2020-08-15 02:56:47 【问题描述】:

我找到了this thread from 2014,答案是不,sklearn 随机森林分类器不能处理分类变量(或者至少不能直接处理)。 2020年的答案有变化吗?

我想提供 gender 作为我模型的功能。但是,gender 可以采用三个值:MFnp.nan。如果我将此列编码为三列二分法,随机森林分类器如何知道这三列代表一个特征?

想象max_features = 7。在训练给定树时,它会随机选择七个特征。假设选择了gender。如果gender 被分成三列(gender_Mgender_Fgender_NA),随机森林分类器是否总是选择所有三列并将其计为一个特征,或者是否有机会只选择一两个?

【问题讨论】:

任何模型都可以处理正确编码的分类数据(例如 One0hot 编码) 是的,但是一种热编码会将一列变成多列... 是的。而且我认为这没有任何害处。 如果在训练树时只选择了其中一列,则树将仅根据整个类别范围中的 一个 类别进行拆分。 @DivyanshuSrivastava 夸大特征数量确实是个问题;我建议你仔细想想 【参考方案1】:

如果将max_features 设置为低于实际列数的值(这是可取的方法,请参阅docs 中max_features 的推荐值),那么是的,有可能随机森林中的给定 估计器 仅考虑虚拟列的子集。

但这并不一定太糟糕。在决策树中,选择一个特征作为给定级别的节点,旨在优化某个度量,独立于其他特征,即只考虑实际特征和目标。所以从某种意义上说,模型不会将这些虚拟列视为属于同一特征

不过,一般来说,二进制特征的最佳方法是想出一种适当的方法来填充缺失值,并将其转换为编码为 0s 和 1s 的单列。

【讨论】:

所有正确,但应该提醒一下,作为一项规则,max_features 确实设置为一个值(可能远低于特征总数)。这实际上是 RF 非常具有创新性的特性之一。见Why is Random Forest with a single tree much better than a Decision Tree classifier? AFAIK 在单个树中选择特征的随机性有利于整体分类,因为它降低了偏差。虽然我看不出单个估算器会是怎样的情况?我的意思是,我同意你的观点,但是在查看帖子时,我正在描绘一个每个特征都相关的示例,并且对这些 IMO 进行随机子样本应该会使模型恶化。也许我错过了一些东西,只是对链接帖子@desertnaut 的一些想法 正如我在链接的答案中明确提到的那样,仅随机特征选择就可以提高性能这一事实已得到公认。我同意这不是很直观 - 也许可以将其(非常粗略地)视为“套索类型”正则化。但我评论的重点不是,而是max_features 的正常和推荐使用,我很高兴看到您已将其纳入答案;)

以上是关于sklearn 随机森林分类器可以处理分类变量吗?的主要内容,如果未能解决你的问题,请参考以下文章

来自 sklearn 的 SelectFromModel 在随机森林和梯度提升分类器上提供了显着不同的特征

如何在 Sklearn 的随机森林分类器中将训练模型用于另一个数据集?

sklearn库学习----随机森林(RandomForestClassifier,RandomForestRegressor)

如何序列化大型随机森林分类器

随机森林分类器学习

在拥有分类数据时,使用 Sklearn 随机森林进行特征选择并没有给我预期的结果