决策树-Cart算法二
本文结构:
- 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
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
参考
http://www.jianshu.com/p/b90a9ce05b28
决策树-Cart算法二的更多相关文章
- 02-23 决策树CART算法
目录 决策树CART算法 一.决策树CART算法学习目标 二.决策树CART算法详解 2.1 基尼指数和熵 2.2 CART算法对连续值特征的处理 2.3 CART算法对离散值特征的处理 2.4 CA ...
- 03机器学习实战之决策树CART算法
CART生成 CART假设决策树是二叉树,内部结点特征的取值为“是”和“否”,左分支是取值为“是”的分支,右分支是取值为“否”的分支.这样的决策树等价于递归地二分每个特征,将输入空间即特征空间划分为有 ...
- 机器学习——十大数据挖掘之一的决策树CART算法
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第23篇文章,我们今天分享的内容是十大数据挖掘算法之一的CART算法. CART算法全称是Classification ...
- 李航统计学习方法(第二版)(十):决策树CART算法
1 简介 1.1 介绍 1.2 生成步骤 CART树算法由以下两步组成:(1)决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大;(2)决策树剪枝:用验证数据集对己生成的树进行剪枝并选择最优子 ...
- 决策树模型 ID3/C4.5/CART算法比较
决策树模型在监督学习中非常常见,可用于分类(二分类.多分类)和回归.虽然将多棵弱决策树的Bagging.Random Forest.Boosting等tree ensembel 模型更为常见,但是“完 ...
- 机器学习总结(八)决策树ID3,C4.5算法,CART算法
本文主要总结决策树中的ID3,C4.5和CART算法,各种算法的特点,并对比了各种算法的不同点. 决策树:是一种基本的分类和回归方法.在分类问题中,是基于特征对实例进行分类.既可以认为是if-then ...
- 统计学习五:3.决策树的学习之CART算法
全文引用自<统计学习方法>(李航) 分类与回归树(classification and regression tree, CART)模型是由Breiman等人于1984年提出的另一类决策树 ...
- 决策树之CART算法
顾名思义,CART算法(classification and regression tree)分类和回归算法,是一种应用广泛的决策树学习方法,既然是一种决策树学习方法,必然也满足决策树的几大步骤,即: ...
- 《机器学习实战》学习笔记第九章 —— 决策树之CART算法
相关博文: <机器学习实战>学习笔记第三章 —— 决策树 主要内容: 一.CART算法简介 二.分类树 三.回归树 四.构建回归树 五.回归树的剪枝 六.模型树 七.树回归与标准回归的比较 ...
随机推荐
- html页面去掉滚动条
有时候特别需要,个别网页要去掉横向滚动条和竖向滚动条,那该怎么去掉呢,很简单,看代码: 让竖条没有: <body style=`overflow:-Scroll;overflow-y:hidde ...
- jQuery 学习笔记1 弹出一个对话框
这里推荐使用sublime text 2来写,外加zen coding. 首先是写html 只需要html:xt,然后tab就可以得到一个html的完整结构. <!DOCTYPE html PU ...
- RabbitMQ中各种消息类型如何处理?
一:消息类型 Map String(含json字符串类型) 二:处理方法 2.1 Map消息 如果发送的消息类型是map类型,可以通过SerializationUtils.deserialize方法将 ...
- 未能加载文件或程序集“System.Web.Mvc, Version=3.0.0.0,
直接下载安装 ASP.NET MVC 3.0就可以了
- mariadb是替代MySQL的好方式
像Oracle这样成熟稳定的数据库,足以支撑海量数据的存储与查询了?为什么还需要数据切片呢?的确,Oracle的DB确实很成熟很稳定,但是高昂的使用费用和高端的硬件支撑不是每一个公司能支付的起的.试想 ...
- 新浪微博 oauth2.0 redirect_uri_mismatch
新浪微博开放平台出来很久了,现在才开始研究,貌似有点晚了.... 第一次折腾,总是出现这样那样的问题,即使照着别人成功的例子也是一样,这不,开始运行的时候,运行下面的例子,总是报error:redir ...
- PHP——安装wampserver丢失MSVCR110.dll
win8系统 64位,在安装wampserver时显示计算机丢失MSVCR110.dll 1.首先是打开浏览器,在浏览器的地址栏里输入 http://www.microsoft.com/zh-CN ...
- [开发笔记]-ASP.NET项目在IIS上使用虚拟目录
说一下我想要实现的效果: 假如我做一个图片展示类的网站,或者其他需要用户上传文件的网站,需要将用户上传的文件保存到一个Uploadfiles文件夹下,一般我们在做项目时用户上传的文件都是保存在网站项目 ...
- 输//ip提示找不到应用程序
输//ip提示找不到应用程序??? (未测试)试试:环境变量的 PATH 中添加 C:\Windows\system32 (未测试)试试:默认程序里----协议关联里:管理ie
- MacBook如何用Parallels Desktop安装windows7/8
虽然MacBook真的很好用,不过在天朝的国情下,有很多软件还是仅支持IE和windows系统下才有.所以有必要为自己的MacBook装一个windows版本的系统,之前试过用Boot Camp来建立 ...