第九章 树回归([代码][ch09])
-
树回归算法的优缺点
-
优点:可以对复杂和非线性的问题建模.
-
缺点:结果不容易理解.
-
适用数据类型:数值型和标称型.
-
-
树回归和分类树的思路类似,且方法如下
-
收集数据
- 采用任意方法收集数据.
-
准备数据
- 需要数值型的数据,标称型数据应该映射成为二值型数据.
-
分析数据
- 汇出数据的二维可视化显示结果,以字典方式生成树
-
训练算法
- 大部分时间都花费在叶节点树模型的构建上.
-
测试算法
- 使用测试数据上的R*R值来分析模型的效果.
-
使用算法
- 使用训练出的树做预测,预测结果还可以来做很多事情.
-
-
连续和离散型特征的树的构建
-
在树的构建过程中,需要使用到字典,该字典包含以下4个元素
-
带切分的特征
-
待切分的特征值
-
右子树
-
左子树
-
-
构建树的伪代码
-
找到最佳的待切分特征
-
如果该节点不能再分,将该节点存为叶节点
-
执行二元切分
-
在右子树调用方法
-
在左子树调用方法
-
-
-
将CART算法用于回归
-
在构建树种新增伪代码
-
对每个特征
-
对每个特征值
-
将数据切成两份
-
计算切分的误差
-
如果当前误差小于当前最小误差,那么将切分设定为最佳切分并且更新最小误差
-
-
-
树剪枝
一棵树如果节点过多,就会出现“过拟合”
通过降低决策树的复杂度来避免过拟合的过程称为剪枝-
预剪枝方法
-
定义一个高度,当决策树达到该高度的时候就停止决策树的增长
-
达到某个节点的实例具有相同的特征向量,即使这些实例不属于同一类,也可以停止决策树的生长,这个方法对处理数据冲突的时候比较有效
-
定义一个阀值,当某个节点树小于阀值的时候就可以停止
-
定义一个阀值,通过计算每次扩张对系统性能的增益,并比较增益值与该阀值大小来决定是否停止决策树的增长
-
-
后剪枝方法
-
REP(错误率降低剪枝)
-
删除以此节点为根的子树
-
使其成为叶子节点
-
赋予该节点关联的训练数据的最常见分类
-
当修剪后的树对于验证集合的性能不会比原来的树差时,才真正删除该节点
-
-
PEP(悲观错误剪枝)
-
根据剪枝前后错误率来判定子树的修剪。弥补了REP种的缺陷,在评价子树的训练错误公式中添加了一个常数,假定每个叶子节点都动自动对实例的某个部分进行错误的分类
-
缺陷
-
PEP算法使用的从上往下的剪枝策略,会导致剪枝过度
-
会出现剪枝失败的情况
-
-
-
CCP(代价复杂度剪枝)
- 根据真实的误差估计选择最佳决策树
-
EBP(基于错误剪枝)
-
计算叶节点的错分类样本率估计的置信区上线为U
-
计算叶节点的预测分类样本数
-
判断是否剪枝以及如何剪枝
-
-
-
以下是集中剪枝的方法比较
REP | PEP | CCP | |
---|---|---|---|
剪枝方式 | 自底向上 | 自顶向下 | 自底向上 |
计算复杂度 | o(n) | o(n) | o(n)*o(n) |
误差估计 | 剪枝集上误差估计 | 使用连续纠正 | 标准误差 |
-
小节
CART算法可以用于构建二元树并处理离散型和连续型的切分,该算法构建出的树会倾向于对数据过拟合。
代码托管见Github
[ch09]:https://github.com/Lornatang/machine_learning_in_action_py3/tree/master/src/ch09
来源:CSDN
作者:lornatang
链接:https://blog.csdn.net/shiyipaisizuo/article/details/80371727