假设我在一个数据集中有3个分类属性和2个连续属性。如何使用这5个变量构建决策树?
编辑:
对于分类变量,可以很容易地说,我们只将它们除以{yes/no}并计算出gini的总增益,但是我的怀疑主要是关于连续属性的。假设我有一个像{1,2,3,4,5}这样的连续属性的值。我的分裂点选择是什么?它们是在每个数据点(如{<1,>=1......& so on till} )上被检查,还是分裂点将类似于列的平均值?
发布于 2018-06-04 18:36:26
决策树可以同时处理分类变量和数值变量,这样做没有任何问题。
决策树中的每一个分割都基于一个特性。如果该特性是绝对的,则使用属于特定类的元素进行拆分。如果该特性是连续的,则使用高于阈值的元素完成拆分。在每一次分裂时,决策树都会在那一刻获得最好的变量。这将根据与分裂的枝条的杂质测量。用于拆分的变量是绝对的或连续的(事实上,决策树通过创建带有阈值的二进制区域来对连续变量进行分类)。
尽管在理论层面上,决策树处理分类变量是非常自然的,但大多数实现都不这样做,只接受连续变量:
目前它不能。然而,在实践中,RF对于被滥用编码为整数特征的分类特征往往是非常健壮的。
下面是lightgbm处理类别的示例:
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])发布于 2019-05-16 20:49:23
我不确定大多数答案是否考虑到分裂分类变量是相当复杂的事实。考虑一个具有"q“可能值的预测器/特性,然后有~ 2^q可能的分裂,对于每一个分割,我们可以计算一个基尼指数或任何其他形式的度量。从概念上说,“每个分割都是基于度量(MSE表示连续,例如,gini索引用于分类)”,这在概念上更容易理解,但重要的是要补充这样一个事实:对于给定的特征,可能的分割数在类别数中是指数型的。CART没有指数复杂度地处理它是正确的,但是它所使用的算法是非常重要的,我们应该承认任务的困难。
发布于 2018-06-04 18:51:44
那得看情况。一些算法,例如ID3,能够处理分类变量。其他,就像购物车算法不一样。
将分类数据编码为连续数据有两种基本方法。
单热编码非常简单,并在大多数软件包中实现。缺点是,如果有许多类别,则会遇到问题(因为编码维数等于类别数)。
平均编码(有时也称为目标编码)由具有目标均值的编码类别组成(例如,在回归中,如果有类0和1,则类0由0的响应均值对0等进行编码)。在这个网站上有一些关于提供更多细节的答案。我还鼓励您了解这段视频,如果您想了解它是如何工作的,以及如何实现它(有几种方法表示编码,而且每种方法都有其优缺点)。
在Python中,您可以表示自己编码(在我链接的系列视频中显示了一些方法),或者您可以尝试使用scikit的类别编码器 -学习方法。
https://datascience.stackexchange.com/questions/32622
复制相似问题