sklearn随机森林可以直接处理分类功能?

时间:2014-07-12 16:54:01

标签: python scikit-learn random-forest one-hot-encoding

假设我有一个分类功能,颜色,它取值

['red','blue','green','orange'],

我想用它来预测随机森林里的东西。如果我对它进行单热编码(即我将其更改为四个虚拟变量),我如何告诉sklearn这四个虚拟变量实际上是一个变量?具体来说,当sklearn随机选择要在不同节点使用的特征时,它应该包括红色,蓝色,绿色和橙色虚拟对象,或者它不应包括任何一个。

我听说没有办法做到这一点,但我认为必须有一种方法来处理分类变量,而不会随意将它们编码为数字或类似的东西。

4 个答案:

答案 0 :(得分:29)

不,没有。某人的working on this和补丁可能会在某天合并到主线,但是现在除了虚拟(一热)编码之外,scikit-learn中不支持分类变量。

答案 1 :(得分:11)

接受分类输入的随机森林(以及许多其他机器学习算法)的大多数实现要么只是为您自动编码分类特征,要么使用变为computationally intractable for large numbers of categories的方法。

A notable exception is H2O。 H2O具有非常efficient method的直接处理分类数据,这通常使它比基于树的方法具有优势,这些方法需要单热编码。

This article by Will McGinnis has a very good discussion of one-hot-encoding and alternatives

This article by Nick Dingwall and Chris Potts has a very good discussion about categorical variables and tree based learners

答案 2 :(得分:8)

您必须将分类变量分为一系列虚拟变量。是的,我知道它很烦人,似乎没必要,但这就是sklearn的工作原理。 如果你正在使用熊猫使用pd.get_dummies,它的效果非常好。

答案 3 :(得分:0)

也许你可以用1~4来代替这四种颜色,也就是那一栏的数字而不是颜色名称。然后可以在模型中使用带有数字的列