好吧,我很惊讶,但事实证明,sklearn的决策树确实无法处理分类数据。从2015年6月开始,这个问题(#4899)出现了Github问题,但是它仍然是开放的(我建议您快速浏览一下该线程,因为有些评论非常有趣)。
正如您在此处所做的那样,将分类变量编码为整数的问题在于,它对它们强加了一个 顺序 ,根据情况的不同,该 顺序 可能有意义,也可能没有意义。例如,你可以编码['low', 'medium', 'high']
的[0, 1, 2]
,因为'low' < 'medium' < 'high'
(我们称这些分类变量 序数 ),但你仍然隐含作出额外的(也可能是不希望的)假设之间的距离'low'
和'medium'
与之间的距离相同'medium'
,并'high'
(在没有影响决策树,但很重要,例如在k- nn和聚类中)。但是这种方法在诸如['red','green','blue']
或的情况下完全失败了['male','female']
,因为我们不能要求它们之间有任何有意义的相对顺序。
因此,对于非常规分类变量,正确编码它们以供sklearn决策树使用的方法是使用OneHotEncoder
模块。用户指南的“编码分类功能”部分也可能会有所帮助。