Python sklearn树在拆分期间将分类变量视为浮点变量,我应该如何解决这个问题?

Python sklearn树在拆分期间将分类变量视为浮点变量,我应该如何解决这个问题?,python,scikit-learn,regression,sklearn-pandas,Python,Scikit Learn,Regression,Sklearn Pandas,我在使用sklearn软件包时遇到了回归树问题。这是关于一本书的数据集,其中的回归树如下所示: 问题出在STORY\u语言变量中。这是一个值为0、1、2和3的分类变量,它们都对应于本书的不同语言。在运行模型之前,我已经确保STORY\u LANGUAGE是一个分类变量,但树仍然将其拆分并将其视为浮点(1.5) 我应该如何解决这个问题?感谢您的帮助 通过将整数列表作为特性传递给scikit learn,您告诉它特性之间存在某种排序依赖关系。例如0与1的关系比与2的关系更密切。要解决这个问题,您需

我在使用sklearn软件包时遇到了回归树问题。这是关于一本书的数据集,其中的回归树如下所示:

问题出在
STORY\u语言
变量中。这是一个值为0、1、2和3的分类变量,它们都对应于本书的不同语言。在运行模型之前,我已经确保
STORY\u LANGUAGE
是一个分类变量,但树仍然将其拆分并将其视为浮点(1.5)


我应该如何解决这个问题?感谢您的帮助

通过将整数列表作为特性传递给scikit learn,您告诉它特性之间存在某种排序依赖关系。例如
0
1
的关系比与
2
的关系更密切。要解决这个问题,您需要使用内置的热编码。如果您有三个类别,
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)

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