是否有一个 RandomForest 实现可以处理分类数据而无需在 python 中编码?

数据挖掘 Python r 随机森林 分类数据 编码
2022-02-21 06:35:06

我正在从事具有连续和分类特征的二元分类项目。我知道 RandomForest 的 R 实现可以处理作为因子类型数据传入的分类数据。然而,Python 的 scikit-learn 实现需要对分类数据进行编码(例如 one-hot)。我很好奇我使用这两种实现收到的结果的差异,我想知道是否有人知道 RandomForest 的 python 实现可以在不编码的情况下处理分类数据。

2个回答

因为 sklearn 使用 CART 算法,所以它不能按原样接受分类数据(正如您所指出的)。有一张现有的可以改变这一点。

这个问题真的应该改写为支持决策树上的分类分裂 - 而不是随机森林,因为随机森林只是使用这些决策树作为拟合器的集成方法。

我不知道支持此功能的 python 包,但我确实怀疑它有助于提高性能,因为它可以避免在热编码数据上使用随机森林的常见陷阱;请参阅One-Hot Encoding 使您的基于树的集成变得更糟,这就是为什么?

同时 -当我知道我需要使用 Random Forrest 时,我会使用TargetEncoder 。它允许以“智能”方式对分类数据进行编码,而无需使用 one-hot 编码。

CatboostLightGBM可以处理分类特征。它们基于决策树(随机森林也基于决策树),因此您可以使用它们(它们通常比随机森林更好),但与随机森林相比,它们使用更多的计算能力,但您仍然可以调整它们(使用 Catboost 非常容易,LightGBM 需要一些练习),并且仍然可以从它们的编码功能中受益,并且您将拥有不那么复杂的管道。