首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在数据集中使用连续变量和分类变量创建决策树?

如何在数据集中使用连续变量和分类变量创建决策树?
EN

Data Science用户
提问于 2018-06-04 18:23:34
回答 4查看 85.7K关注 0票数 24

假设我在一个数据集中有3个分类属性和2个连续属性。如何使用这5个变量构建决策树?

编辑:

对于分类变量,可以很容易地说,我们只将它们除以{yes/no}并计算出gini的总增益,但是我的怀疑主要是关于连续属性的。假设我有一个像{1,2,3,4,5}这样的连续属性的值。我的分裂点选择是什么?它们是在每个数据点(如{<1,>=1......& so on till} )上被检查,还是分裂点将类似于列的平均值?

EN

回答 4

Data Science用户

回答已采纳

发布于 2018-06-04 18:36:26

决策树可以同时处理分类变量和数值变量,这样做没有任何问题。

理论

决策树中的每一个分割都基于一个特性。如果该特性是绝对的,则使用属于特定类的元素进行拆分。如果该特性是连续的,则使用高于阈值的元素完成拆分。在每一次分裂时,决策树都会在那一刻获得最好的变量。这将根据与分裂的枝条的杂质测量。用于拆分的变量是绝对的或连续的(事实上,决策树通过创建带有阈值的二进制区域来对连续变量进行分类)。

Implementation

尽管在理论层面上,决策树处理分类变量是非常自然的,但大多数实现都不这样做,只接受连续变量:

  • 这个答案反映在scikit上的决策树上--学习不处理分类变量。然而,其中一个scikit-learn开发人员认为

目前它不能。然而,在实践中,RF对于被滥用编码为整数特征的分类特征往往是非常健壮的。

  • 另一个职位关于xgboost的注释,没有处理分类变量。
  • R中的rpart可以处理作为因子传递的类别,正如解释的在这里
  • Lightgbm和catboost可以处理类别。Catboost进行“动态”目标编码,而lightgbm则需要使用序号编码对分类变量进行编码。

下面是lightgbm处理类别的示例:

代码语言:javascript
复制
import pandas as pd
from sklearn.datasets import load_iris
from lightgbm import LGBMRegressor
from category_encoders import OrdinalEncoder

X = load_iris()['data']
y = load_iris()['target']

X = OrdinalEncoder(cols=[3]).fit_transform(X)

dt = LGBMRegressor()
dt.fit(X, y, categorical_feature=[3])
票数 19
EN

Data Science用户

发布于 2019-05-16 20:49:23

我不确定大多数答案是否考虑到分裂分类变量是相当复杂的事实。考虑一个具有"q“可能值的预测器/特性,然后有~ 2^q可能的分裂,对于每一个分割,我们可以计算一个基尼指数或任何其他形式的度量。从概念上说,“每个分割都是基于度量(MSE表示连续,例如,gini索引用于分类)”,这在概念上更容易理解,但重要的是要补充这样一个事实:对于给定的特征,可能的分割数在类别数中是指数型的。CART没有指数复杂度地处理它是正确的,但是它所使用的算法是非常重要的,我们应该承认任务的困难。

票数 8
EN

Data Science用户

发布于 2018-06-04 18:51:44

那得看情况。一些算法,例如ID3,能够处理分类变量。其他,就像购物车算法不一样。

将分类数据编码为连续数据有两种基本方法。

  • 单热编码
  • 平均编码

单热编码非常简单,并在大多数软件包中实现。缺点是,如果有许多类别,则会遇到问题(因为编码维数等于类别数)。

平均编码(有时也称为目标编码)由具有目标均值的编码类别组成(例如,在回归中,如果有类0和1,则类0由0的响应均值对0等进行编码)。在这个网站上有一些关于提供更多细节的答案。我还鼓励您了解这段视频,如果您想了解它是如何工作的,以及如何实现它(有几种方法表示编码,而且每种方法都有其优缺点)。

在Python中,您可以表示自己编码(在我链接的系列视频中显示了一些方法),或者您可以尝试使用scikit的类别编码器 -学习方法。

票数 3
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/32622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档