sklearn树在拆分期间将分类变量视为float,我应如何解决呢?

时间:2019-04-24 16:11:52

标签: python scikit-learn regression sklearn-pandas

我在使用sklearn软件包的回归树上遇到了麻烦。它是关于书籍数据集的,其中的回归树如下所示:

sklearn tree

问题出在Datum.all变量中。这是一个类别变量,其值分别为0、1、2和3,它们都对应于该书的另一种语言。在运行模型之前,我已经确保STORY_LANGUAGE是一个分类变量,但是树仍然将其拆分并将其视为浮点数(1.5)。

我该如何解决?任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:1)

通过将整数列表作为特征传递给scikit-learn,您可以告诉它这些特征之间存在某种排序依赖性。那例如01的关联比与2的关联更紧密。为了解决这个问题,您将需要使用内置的OneHotEncoder进行一次热编码。如果您有012这三个类别,则0将被转换为[1,0,0],而1将被转换到[0,1,0]。基本上,您的一个功能将在对应于其类别的位置处被一个等于1的向量所取代,否则就被0所取代。

import numpy as np
from sklearn.preprocessing import OneHotEncoder

# Generate random integers between 0 and 2
x = np.random.randint(0,3, size=(100,1))
# Create the one-hot encoder object, specifying not to use sparse arrays.
m = OneHotEncoder(sparse=False)
# Transform your features
x_one_hot = m.fit_transform(x)

答案 1 :(得分:0)

如果您使用的是sklearn的DecisionTreeRegressor,则标签编码的要素将被简单地视为数字要素。如果希望将它们视为类别,则可以执行一次热编码(例如,使用OneHotEncoder),也可以使用开箱即用的支持分类功能的算法(例如lightGBM)。