cart分类与回归树

mdumpling mdumpling     2022-09-24     328

关键词:

from www.jianshu.com/p/b90a9ce05b28

本文结构:

  • CART算法有两步
  • 回归树的生成
  • 分类树的生成
  • 剪枝

CART - Classification and Regression Trees

分类与回归树,是二叉树,可以用于分类,也可以用于回归问题,最先由 Breiman 等提出。

分类树的输出是样本的类别, 回归树的输出是一个实数。


CART算法有两步:

决策树生成和剪枝。

决策树生成:递归地构建二叉决策树的过程,基于训练数据集生成决策树,生成的决策树要尽量大;

自上而下从根开始建立节点,在每个节点处要选择一个最好的属性来分裂,使得子节点中的训练集尽量的纯。

不同的算法使用不同的指标来定义"最好":

分类问题,可以选择GINI,双化或有序双化;
回归问题,可以使用最小二乘偏差(LSD)或最小绝对偏差(LAD)。

决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时损失函数最小作为剪枝的标准。

这里用代价复杂度剪枝 Cost-Complexity Pruning(CCP)


回归树的生成

回归树模型表示为:

技术分享
 

其中,数据空间被划分成了 R1~Rm 单元,每个单元上有一个固定的输出值 cm。
这样就可以计算模型输出值与实际值的误差:

技术分享
 

我们希望每个单元上的 cm,可以使得这个平方误差最小化,易知当 cm 为相应单元上的所有实际值的均值时,可以达到最优

技术分享
 

那么如何生成这些单元划分?

假设,我们选择变量 xj 为切分变量,它的取值 s 为切分点,那么就会得到两个区域:

技术分享
 

当 j 和 s 固定时,我们要找到两个区域的代表值 c1,c2 使各自区间上的平方差最小,

技术分享
 

前面已经知道 c1,c2 为区间上的平均,

技术分享
 

那么对固定的 j 只需要找到最优的 s,
然后通过遍历所有的变量,我们可以找到最优的 j,
这样我们就可以得到最优对(j,s),并得到两个区间。

上述过程表示的算法步骤为:

技术分享
 

即:
(1)考虑数据集 D 上的所有特征 j,遍历每一个特征下所有可能的取值或者切分点 s,将数据集 D 划分成两部分 D1 和 D2
(2)分别计算上述两个子集的平方误差和,选择最小的平方误差对应的特征与分割点,生成两个子节点。
(3)对上述两个子节点递归调用步骤(1)(2),直到满足停止条件。


分类树的生成

(1)对每个特征 A,对它的所有可能取值 a,将数据集分为 A=a,和 A!=a 两个子集,计算集合 D 的基尼指数:

技术分享
 

(2)遍历所有的特征 A,计算其所有可能取值 a 的基尼指数,选择 D 的基尼指数最小值对应的特征及切分点作为最优的划分,将数据分为两个子集。
(3)对上述两个子节点递归调用步骤(1)(2), 直到满足停止条件。
(4)生成 CART 决策树。

其中 GINI 指数:

1、是一种不等性度量;
2、是介于 0~1 之间的数,0-完全相等,1-完全不相等;
3、总体内包含的类别越杂乱,GINI指数就越大(跟熵的概念很相似)

定义:
分类问题中,假设有 K 个类,样本属于第 k 类的概率为 pk,则概率分布的基尼指数为:

技术分享
 

样本集合 D 的基尼指数为:

技术分享
 

其中 Ck 为数据集 D 中属于第 k 类的样本子集。

如果数据集 D 根据特征 A 在某一取值 a 上进行分割,得到 D1 ,D2 两部分后,那么在特征 A 下集合 D 的基尼指数为:

技术分享
 

其中算法的停止条件有:

1、节点中的样本个数小于预定阈值,
2、样本集的Gini系数小于预定阈值(此时样本基本属于同一类),
3、或没有更多特征。

下面来看一下例子:

最后一列是我们要分类的目标。

技术分享
 

例如,按照“体温为恒温和非恒温”进行划分,计算如下:

恒温时包含哺乳类5个、鸟类2个

技术分享
 

非恒温时包含爬行类3个、鱼类3个、两栖类2个

技术分享
 

得到特征‘体温’下数据集的GINI指数:

技术分享
 

最后我们要选 GINI_Gain 最小的特征和相应的划分。


剪枝

就是在完整的决策树上,剪掉一些子树,使决策树变小。

技术分享
 

是为了减少决策树过拟合,如果每个属性都被考虑,那决策树的叶节点所覆盖的训练样本基本都是“纯”的,这时候的决策树对训练集表现很好,但是对测试集的表现就会比较差。

决策树很容易发生过拟合,可以改善的方法有:
1、通过阈值控制终止条件,避免树形结构分支过细。
2、通过对已经形成的决策树进行剪枝来避免过拟合。
3、基于Bootstrap的思想建立随机森林。

这里我们用 代价复杂度剪枝 Cost-Complexity Pruning(CCP) 方法来对 CART 进行剪枝。

技术分享
 

从整个树 T0 开始,先剪去一棵子树,生成子树 T1,
在 T1 上再剪去一棵子树,生成子树 T2,
重复这个操作,直到最后只剩下一个根节点的子树 Tn,
得到了子树序列 T0~Tn,
利用独立的验证数据集,计算每个子树的平方误差或者基尼指数,
选择误差最小的那个子树作为最优的剪枝后的树。

那么这个子树序列是怎么剪出来的?
因为建模的时候,目标就是让损失函数达到最优,那剪枝的时候也用损失函数来评判。

损失函数是什么呢?
对任意子树 T,损失函数如下形式,cost-complexity function:

技术分享
 

其中 CT 为误差(例如基尼指数),|T| 为 T 的叶节点个数,alpha 为非负参数,用来权衡训练数据的拟合程度和模型的复杂度。

alpha 固定时,一定可以找到一个子树 T,使得等式右边达到最小,那么这个 T 就叫做最优子树。

对固定的 alpha 找到损失函数最小的子树 T,二者之间有这样的关系:alpha 大时,T 偏小,alpha 小时,T 偏大。

那如果将 alpha 从小增大设置为一个序列,T 就可以从大到小得到相应的最优子树序列,并且还是嵌套的关系。

剪的时候,哪个树杈是可以被剪掉的呢?
很容易想到的是,如果剪掉后和没剪时的损失函数一样或者差别不大的话,那当然是剪掉好了,只留下一个点,就能代表一个树杈,这样树就被简化了。

以节点 t 为单节点树时,它的损失函数为:(后面剪枝后就可以用一个点来代替一个树杈)

技术分享
 

以节点 t 为根节点的子树 Tt,它的损失函数为:(后面剪枝这个树杈)

技术分享
 

那么接下来的问题就是能不能找到这样的点呢?
上面令 alpha=0,就有 Tt 和 t 的损失函数的关系为:

技术分享
 

那么增大 alpha,当它为如下形式时:

技术分享
 

此时,Tt 和 t 的损失函数相等,而 t 的节点少,那么保留 t 就可以了,Tt 就可以剪掉了。

技术分享
 

那么在剪枝算法的第三步时,对每个 t,计算一下 gt,也就是能找到子树 Tt 和 t 的损失函数相等时的 alpha,

每个点 t 都可以找到符合这样条件的 alpha,
遍历所有节点 t 后,找到最小的这个 alpha,

第四步,再把这个 alpha 对应的节点 t 的子树 Tt 剪掉,
并用多数投票表决法决定 t 上的类别,
这样得到的剪枝后的树 T 记为 Tk,
这时的 alpha 记为 alpha k,

经过上面步骤,会得到:
α1?α2? ... ?αk? ...
T1?T2? ... ?Tk? ... ?{root}

例子:

下面这棵树,有三个点 t1≡root,t2,t3

技术分享
 

α(1)=0

计算每个点的 gt:

技术分享
 

t2,t3 时的 gt 相等,此时我们可以选择剪枝少的点,那就是 t3 剪掉。

技术分享
 

并且 α(2)=1/8

这时剩下 t1,t2,再继续计算 gt:

技术分享
 

t2 的小,所以剪掉 t2:

技术分享
 

并且令 α(3)=1/8

最后剩下 t1,计算后 gt=1/4,所以 α(4)=1/4。

如此我们得到:α(0)=0,α(1)=1/8,α(2)=1/8,α(3)=1/4
并且得到了相应的子树,
接下来就可以利用独立的验证数据集,计算每个子树的平方误差或者基尼指数,
选择误差最小的那个子树作为最优的剪枝后的树。



作者:不会停的蜗牛
链接:http://www.jianshu.com/p/b90a9ce05b28
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。




































































cart分类与回归树与gbdt(gradientboostdecisiontree)

一、CART分类与回归树资料转载:http://dataunion.org/5771.html      ClassificationAndRegressionTree(CART)是决策树的一种,并且是非常重要的决策树,属于TopTenMachineLearningAlgorithm。顾名思义,CART算法既可以用于创建分类树... 查看详情

数据挖掘十大经典算法--cart:分类与回归树

...策树的类型 在数据挖掘中,决策树主要有两种类型:分类树的输出是样本的类标。回归树的输出是一个实数(比如房子的价格,病人呆在医院的时间等)。术语分类和回归树(CART)包括了上述两种决策树,最先由Breiman等提出.分... 查看详情

用cart(分类回归树)作为弱分类器实现adaboost

...aboost昨晚集成学习的例子),其后我们分别学习了决策树分类原理和adaboost原理和实现,上两篇我们学习了cart(决策分类树),决策分类树也是决策树的一种,也是很强大的分类器,但是cart的深度太深,我们可以指定cart的深度... 查看详情

数据挖掘gbdt面试题:其中基分类器cart回归树,节点的分裂标准是什么?与rf的区别?与xgb的区别?

...代提升树算法中的残差,去拟合一个回归树。回归和分类基学习器都是CART回归树,区别在 查看详情

机器学习决策树理论第二卷

...大家多多指教!本卷的大纲为1CART算法1.1CART回归树1.2CART分类树2CART剪枝3总结1CART算法CART分类与回归树(classificationandregressiontree,CART)模型室友Breiman等人1984年提出,是应用广泛的决策 查看详情

分类回归树(代码片段)

  CART(ClassificationandRegressiontree)分类回归树由L.Breiman,J.Friedman,R.Olshen和C.Stone于1984年提出。CART是一棵二叉树,采用二元切分法,每次把数据切成两份,分别进入左子树、右子树。而且每个非叶子节点都有两个孩子,所以CART的... 查看详情

cart分类回归树算法(代码片段)

CART分类回归树算法与上次文章中提到的ID3算法和C4.5算法类似,CART算法也是一种决策树分类算法。CART分类回归树算法的本质也是对数据进行分类的,最终数据的表现形式也是以树形的模式展现的,与ID3,C4.5算法... 查看详情

决策树(主要针对cart)的生成与剪枝

...、cart的生成。cart的全称是classificationandregressiontree,意为分类回归树。也就是说这类决策树既可以解决分类问题 查看详情

cart算法

参考技术ACART算法就是分类回归树,它只支持二叉树,既可以作分类树,又可以作回归树。那什么是分类树,什么是回归树呢?假如有个数据集,分别给出了,不同年龄、职业、性别的不同学习时间。如果我构造了一棵决策树,... 查看详情

机器学习笔记——cart树

...可以根据特征值的种类生成2个以上的结点。  (2)CART分类树的划分依据是基尼指数(Giniindex)最小化准则,而后两者是根据熵的最小化准则。  (3)CART树可以实现回归和分类两个功能,而后两者只能用作分类。  下面 查看详情

机器学习算法决策树-5cart回归树法,m5回归树算法对cart算法改进了什么

...式、如何利用模型树来提升CART回归树的效能CART回归树和分类数大体上是相同的。只有在叶结点的地方比较特别,分类树在叶结点是yes或者no,回归树就是一个值。数值其实就是平均数,方差作为不纯度衡量的标准ÿ... 查看详情

再谈xgboost原理

GBDT的核心就在于累加所有树的结果作为最终结果。分类树决策树的分类算法有很多,以具有最大熵的特征进行分类,以信息增益特征进行分类(ID3),以增益率特征进行分类(C4.5),以基尼系数特征进行分类(CART分类与回归树... 查看详情

决策树

 CART简介 ClassificationAndRegressionTree,分类回归树,简称CART。通过前面文章的介绍知道了决策树的几种生成方法比如ID3,C4.5等。CART是决策树有一种常见生成方法,既可以用于分类,也可以用于回归。CART假设决策树是二叉树,... 查看详情

regressiontree(回归树)

...有一条数据的过拟合现象。     CART在分类问题和回归问题中的相同和差异:相同:在分类问题和回归问题中,CART都是一棵二叉树,除叶子节点外的所有节点都有且仅有两个子节点;所有落在同一片叶子中的输... 查看详情

决策树算法

...杂的熵来度量,使用了相对较为复杂的多叉树,只能处理分类不能处理回归等。对于这些问题,CART算法大部分做了改进。CART算法也就是我们下面的重点了。由于CART算法可以做回归,也可以做分类,我们分别加以介绍,先从CART... 查看详情

sklearnapi参数解析——cart

参考技术ACART是分类与回归树(ClassificationandRegressionTrees,CART),是一棵二叉树,可用于回归与分类。下面是分类树:class sklearn.tree.DecisionTreeClassifier(criterion=’gini’, splitter=’best’, max_depth=None, min_samples_split=2, ... 查看详情

cart&gbdt

分类回归树(ClassificationandRegressionTree,CART)在构建回归树时,主要有两种不同的树:回归树(RegressionTree),其每个叶节点是单个值模型树(ModelTree),其每个叶节点是一个线性方程  在进行树的左右子树划分时,有一个很重要的... 查看详情

cart回归树算法过程

回归树:使用平方误差最小准则训练集为:D={(x1,y1),(x2,y2),…,(xn,yn)}。输出Y为连续变量,将输入划分为M个区域,分别为R1,R2,…,RM,每个区域的输出值分别为:c1,c2,…,cm则回归树模型可表示为:则平方误差为:假如使用特征j的取值s... 查看详情