【问题标题】:Can sklearn random forest classifier handle categorical variables?sklearn 随机森林分类器可以处理分类变量吗?
【发布时间】:2023-03-09 20:57:01
【问题描述】:

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

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

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

【问题讨论】:

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

标签: python machine-learning scikit-learn random-forest


【解决方案1】:

如果将max_features 设置为低于实际列数的值(这是可取的方法,请参阅docsmax_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 的正常和推荐使用,我很高兴看到您已将其纳入答案;)
猜你喜欢
  • 2014-09-03
  • 2019-11-16
  • 2018-02-18
  • 2013-12-13
  • 2021-08-13
  • 2018-10-23
  • 2019-08-11
  • 2018-05-20
  • 1970-01-01
相关资源
最近更新 更多