决策树6:分类与回归树CART
0x01 概念介绍
1.1 CART算法
CART算法:Classification And Regression Tree。顾名思义,CART算法既可以用于创建分类树(Classification Tree),也可以用于创建回归树(Regression Tree)、模型树(Model Tree),两者在建树的过程稍有差异。既可以解决分类问题,也可以解决回归问题。根据某一个维度d和某一个阈值v进行二分,得到的决策树是二叉树。
ID3中使用了信息增益选择特征,增益大优先选择。C4.5中,采用信息增益比选择特征,减少因特征值多导致信息增益大的问题。CART分类树算法使用基尼系数来代替信息增益比,基尼系数代表了模型的不纯度,基尼系数越小,不纯度越低,特征越好。这和信息增益(比)相反。
1.2 回顾基尼系数
回顾一下之前学习的关于基尼系数的知识:
基尼指数(基尼不纯度)= 样本被选中的概率 * 样本被分错的概率 有如下公式:
对上述公式进行说明:
表示选中的样本属于k类别的概率,则这个样本被分错的概率是
因为样本集合中有k个类别,一个随机选中的样本可以属于这k个类别中的任意一个,因而累加所有的k个类别。
当二分类时,
样本集合D的基尼系数:假设集合中有K个类别,每个类别的概率是 ,其中 表示类别k的样本个数, 表示样本总数,则:
1.3 基尼系数和熵模型的比较
比较基尼系数和熵模型的表达式,二次运算比对数简单很多。尤其是二分类问题,更加简单。
和熵模型的度量方式比,基尼系数对应的误差有多大呢?对于二类分类,基尼系数和熵之半的曲线如下:
基尼系数和熵之半的曲线非常接近,仅在45度角附近误差稍大。因此,基尼系数可以作为熵模型的一个近似替代。
CART分类树算法每次仅对某个特征的值进行二分,而不是多分,这样CART分类树算法建立起来的是二叉树,而不是多叉树。
0x02 CART作为分类树
CART作为分类树时,特征属性可以是连续类型也可以是离散类型,但观察属性(即标签属性或者分类属性)必须是离散类型。
2.1 对离散特征和连续特征的处理
2.1.1 离散特征
CART分类树算法对离散值的处理,采用的思路:不停的二分离散特征。
在ID3、C4.5,特征A被选取建立决策树节点,如果它有3个类别A1,A2,A3,我们会在决策树上建立一个三叉点,这样决策树是多叉树。
CART采用的是不停的二分。会考虑把特征A分成{A1}和{A2,A3}、{A2}和{A1,A3}、{A3}和{A1,A2}三种情况,找到基尼系数最小的组合。
比如{A2}和{A1,A3},然后建立二叉树节点,一个节点是A2对应的样本,另一个节点是{A1,A3}对应的样本。**由于这次没有把特征A的取值完全分开,各分支下的子数据集必须依旧包含该特征,该连续特征在接下来的树分支过程中可能依旧起着决定性作用。后面还有机会对子节点继续选择特征A划分A1和A3。这和ID3、C4.5不同,在ID3或C4.5的一颗子树中,离散特征只会参与一次节点的建立。
2.1.2 连续特征
CART分类树算法对连续值的处理,思想和C4.5相同,都是将连续的特征离散化。唯一区别在选择划分点时,C4.5是信息增益比,CART是基尼系数。
具体思路:m个样本的连续特征A有m个,从小到大排列 ,则CART取相邻两样本值的平均数做划分点,一共取m-1个,其中第i个划分点Ti表示为: 。分别计算以这m-1个点作为二元分类点时的基尼系数。选择基尼系数最小的点为该连续特征的二元离散分类点。比如取到的基尼系数最小的点为 ,则小于 的值为类别1,大于 的值为类别2,这样就做到了连续特征的离散化。另外,对于连续属性先进行排序(升序),只有在决策属性(即分类发生了变化)发生改变的地方才需要切开,这可以显著减少运算量。
注意的是,与ID3、C4.5处理离散属性不同的是,如果当前节点为连续属性,则该属性在后面还可以参与子节点的产生选择过程。
2.2 CART分类树算法流程
CART分类树建立算法流程,之所以加上建立,是因为CART分类树算法有剪枝。
算法从根节点开始,用训练集递归建立CART分类树。
输入:训练集D,基尼系数的阈值,样本个数阈值。
输出:决策树T。
1)对于当前节点的数据集为D,如果样本个数小于阈值或没有特征,则返回决策子树,当前节点停止递归。
2)计算样本集D的基尼系数,如果基尼系数小于阈值,则返回决策树子树,当前节点停止递归。
3)计算当前节点现有的各个特征的各个特征值对数据集D的基尼系数。
4)在计算出来的各个特征的各个特征值对数据集D的基尼系数中,选择基尼系数最小的特征A和对应的特征值a。根据这个最优特征和最优特征值,把数据集划分成两部分D1和D2,同时建立当前节点的左右节点,做节点的数据集D为D1,右节点的数据集D为D2。
5)对左右的子节点递归的调用1-4步,生成决策树。
对生成的决策树做预测的时候,假如测试集里的样本A落到了某个叶子节点,而节点里有多个训练样本。则对于A的类别预测采用的是这个叶子节点里概率最大的类别。
0x03 CART作为回归树
3.1 回归问题思路
当数据拥有众多特征并且特征之间关系十分复杂时,构建全局模型的想法就显得太难了,也略显笨拙。而且,实际生活中很多问题都是非线性的,不可能使用全局线性模型来拟合任何数据。一种可行的方法是将数据集切分成很多份易建模的数据,然后利用线性回归技术来建模。如果首次切分后仍然难以拟合线性模型就继续切分。在这种切分方式下,树结构和回归法就相当有用。
回归树的目标是连续数据,树被用来预测目标变量的值是多少。
CART回归树和CART分类树的建立类似,区别在于样本的输出,如果样本输出是离散值,这是分类树;样本输出是连续值,这是回归树。分类树的输出是样本的类别,回归树的输出是一个实数。
并且分类树采用基尼系数的大小度量特征各个划分点的优劣。而回归树采用最小化均方差和进行最优划分特征的选择,对于划分特征A,划分点s两边的数据集D1和D2,求出使D1和D2各自集合的均方差最小,同时D1和D2的均方差之和最小,对应的特征和特征值划分点。。
和方差表达式为:
其中:C1为D1数据集的样本输出均值,C2为D2数据集的样本输出均值。
这很好理解,以预测年龄为例子:被预测出错的人数越多,错的越离谱,均方差就越大,通过最小化均方差能够找到最靠谱的分枝依据。分枝直到每个叶子节点上人的年龄都唯一(这太难了)或者达到预设的终止条件(如叶子个数上限),若最终叶子节点上人的年龄不唯一,则以该节点上所有人的平均年龄做为该叶子节点的预测年龄。
对于决策树建立后做预测的方式,CART分类树采用该叶子节点里概率最大的类别作为当前节点的预测类别。回归树输出不是类别,采用叶子节点的均值或者中位数来预测输出结果。
3.2 CART剪枝
由于决策树算法很容易对训练集过拟合,而导致泛化能力差,为了解决这个问题,我们需要对CART树进行剪枝,来增加决策树的泛化能力。CART采用的办法是后剪枝法。
CART树的剪枝算法可以概括为两步:
从原始决策树生成各种剪枝效果的决策树
用交叉验证来检验剪枝后的预测能力,选择泛化预测能力最好的剪枝后的树作为最终的CART树。
那么按照步骤来进行,我们可以分析如下:
对于位于节点t的任意一颗子树Tt,如果没有剪枝,它的损失函数是 。其中 是正则化因子, 是子树 的结点的个数, 为训练数据的预测误差。
如果将其剪掉,仅仅保留根节点,则损失是 。
那么如何才能确定剪枝呢?
可以假设当剪枝前和剪枝后的损失函数相同,即T这个树的结点数更少,可以对Tt这个子树进行剪枝,直接将其变为树T。我们可以得到等式如下:
解得:
那么如何选择出最优的CART分类树呢?我们可以采用交叉验证策略,上面我们计算出了每个子树是否剪枝的阈值α,如果我们把所有的节点是否剪枝的值α都计算出来,然后分别针对不同的α所对应的剪枝后的最优子树做交叉验证。这样就可以选择一个最好的α,有了这个α,我们就可以用对应的最优子树作为最终结果。
0x04 代码
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.model_selection import train_test_splitboston = datasets.load_boston()
X = boston.data
y = boston.target
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666)from sklearn.tree import DecisionTreeRegressordt_reg = DecisionTreeRegressor()
dt_reg.fit(X_train, y_train)dt_reg.score(X_test, y_test)
不进行调参,决策树回归器得到的结果,其R方值是很低的。但是对于训练数据来说,R方值是100%,显然过拟合了。
0xFF 总结
本文介绍了CART算法。该算法既可以做分类,又可以做回归。在分类和回归时,其算法流程大致相同,但是其特征划分、输出预测结果等步骤是不同的,大家要多加对比和注意。
本篇文章是决策树系列的最后一篇,通过6篇文章,我相信大家对决策树有了一定的理解。希望大家要多多复习,为以后学习AdaBoost、GBDT等经典算法打下坚实的基础。大家加油!
热门文章
直戳泪点!数据从业者权威嘲讽指南!
AI研发工程师成长指南
数据分析师做成了提数工程师,该如何破局?
算法工程师应该具备哪些工程能力
数据团队思考:如何优雅地启动一个数据项目!
数据团队思考:数据驱动业务,比技术更重要的是思维的转变
决策树6:分类与回归树CART相关推荐
- ML之DT之CART:分类与回归树CART算法的简介、应用、经典案例之详细攻略
ML之DT之CART:分类与回归树CART算法的简介.应用.经典案例之详细攻略 目录 分类与回归树CART算法简介 1.CART原理-比较ID3.C4.5 2.CART算法描述 CART算法的案经典案 ...
- 分类与回归树(CART)相关知识
文章目录 CART算法 CART回归树生成 CART分类树的生成 连续值处理: 离散值处理: CART 剪枝 CART算法 分类与回归树(CART)是应用广泛的算法,同样由特征选择.树的生成及剪枝组成 ...
- 数据挖掘十大经典算法--CART: 分类与回归树
一.决策树的类型 在数据挖掘中,决策树主要有两种类型: 分类树 的输出是样本的类标. 回归树 的输出是一个实数 (例如房子的价格,病人呆在医院的时间等). 术语分类和回归树 (CART) 包含了上述 ...
- 1. 分类与回归树原理(CART)
1. 简介 分类与回归树(Classification And Regression Tree),采用二分递归分割技术,将当前样本集划分成两个子集,即其结构为二叉树,每个内部节点均只有两个分支.左分支 ...
- CART分类与回归树
一.CART分类与回归树 资料转载: http://dataunion.org/5771.html http://blog.sina.com.cn/s/blog_afe2af380102x020.ht ...
- 机器学习实战6-sklearn训练决策树实现分类和回归
简介: 与SVM一样,决策树也是一种多功能的机器学习算法,它可以实现分类和回归任务,甚至是多输出任务.它们功能强大,能够拟合复杂的数据集.决策树同时也是随机森林(参见第7章)的基本组成部分,后者是现今 ...
- 【机器学习】深入剖析梯度提升决策树(GBDT)分类与回归
1. 梯度提升决策树概述 梯度提升决策树(Gradient Boosting Decision Tree,GBDT)是以决策树为基学习器的一种Boosting算法,它在每一轮迭代中建立一个决策树,使当 ...
- CART分类与回归树的原理与实现
算法概述 CART(Classification And Regression Tree)算法是一种决策树分类方法. 它采用一种二分递归分割的技术,分割方法采用基于最小距离的基尼指数估计函数,将当前的 ...
- 机器学习实战(八)分类回归树CART(Classification And Regression Tree)
目录 0. 前言 1. 回归树 2. 模型树 3. 剪枝(pruning) 3.1. 预剪枝 3.2. 后剪枝 4. 实战案例 4.1. 回归树 4.2. 模型树 学习完机器学习实战的分类回归树,简单 ...
最新文章
- Android中Preference的使用以及监听事件分析
- Mercurial 版本控制服务器(Web Server)的搭建
- Debug shell: Syntax error: “(“ unexpected
- MongoDB shell 操作
- 20220201--CTF刷题MISC方向--第5题
- 三种单例模式的C++实现
- shiro-cas------本地配置cas为HTTPS登录
- java并发编程实战读书笔记之FutureTask
- 美国旧金山之行第三天
- day 17 - 1 递归函数
- Mac版WebStorm破解方案
- 3d打印机c语言程序下载,C语言下载
- 亚马逊森林大火----- 我也来评论一下
- 【MATLAB】使用“蒙特卡罗(Monter Carlo)”算法计算不规则图形的面积
- RabbitMQ 基本消息模型和消息确认机制
- Linux 虚拟机VMware安装失败,提示没有选择磁盘no disks selected
- 共识算法-Mencius详解
- Vizard基础操作
- Spark Mllib里的分布式矩阵(行矩阵、带有行索引的行矩阵、坐标矩阵和块矩阵概念、构成)(图文详解)...
- 牛客 牛牛与LCM(LCM)
热门文章
- .net framework 3.5 dotNetFx35setup 能不需要网络支持吗?
- Escape HTML
- illustrator插件-画板功能开发-插入页码-js脚本开发-ai插件
- 【论文阅读】用于自动中文作文评分的多阶段预训练
- mybatis查询更新
- C语言系统程序总体框图,c语言学生成绩管理系统(含源代码)精要.doc
- ubuntu各种方法卸载软件
- matlab中a2=poly(p2),插值与拟合matlab实现
- IO_FILE hack FSOP
- ideaIU_13.1.3安装图解。