我在使用sklearn软件包的回归树上遇到了麻烦。它是关于书籍数据集的,其中的回归树如下所示:
问题出在Datum.all
变量中。这是一个类别变量,其值分别为0、1、2和3,它们都对应于该书的另一种语言。在运行模型之前,我已经确保STORY_LANGUAGE
是一个分类变量,但是树仍然将其拆分并将其视为浮点数(1.5)。
我该如何解决?任何帮助表示赞赏!
答案 0 :(得分:1)
通过将整数列表作为特征传递给scikit-learn,您可以告诉它这些特征之间存在某种排序依赖性。那例如0
与1
的关联比与2
的关联更紧密。为了解决这个问题,您将需要使用内置的OneHotEncoder进行一次热编码。如果您有0
,1
和2
这三个类别,则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)。