目录
学习完机器学习实战的分类回归树,简单的做个笔记。文中部分描述属于个人消化后的理解,仅供参考。
所有代码和数据可以访问 我的 github
如果这篇文章对你有一点小小的帮助,请给个关注喔~我会非常开心的~
0. 前言
分类回归树(Classification And Regression Tree)主要用于复杂数据的回归。
- 优点:可以对复杂和非线性的数据建模
- 缺点:结果不易理解
- 适用数据类型:数值型和标称型在数据(标称型数据需映射成二值型)
在 算法中,每次选择最佳的特征分割数据,特征有几种取值,树的结点就有几棵子树,而且连续型特征需转换为离散型。选择过的特征会被筛除,不会再次选择。
在 算法中,每次选择最佳的特征分割数据,但是只进行二元切分,产生两棵子树。选择过的特征,不会被筛除,仍有可能被选择。
- 回归树:叶子结点为常数,即预测值
- 模型树:叶子结点为线性方程
1. 回归树
在 算法中,根据信息增益定义数据的混乱度。
在 算法中,根据总方差(方差乘以样本大小)定义数据的混乱度:
在分类中,叶子节点表示的是对应的类别。
在回归中,叶子节点表示的是对应的预测值,在训练模型的时候,使用数据结果的均值作为叶子节点。
创建树的伪代码如下表示:
每次选择最佳特征和特征值时,采用误差作为衡量标准,伪代码如下表示:
注:训练数据结果相同、划分后最小误差和划分前误差相差不大、划分后数据集很小,这几种情况都直接返回叶子结点,不进行划分。
2. 模型树
模型树在训练的时候,当满足返回叶子结点的条件的时候,对剩余数据进行线性拟合,返回拟合参数,所以叶子结点是线性拟合的参数。
模型树的可解释性是它优于回归树的特点,当数据由分段函数组成的时候,模型树可以更好的发挥它的作用。
在模型树中,误差的计算采用的是误差平方和:
3. 剪枝(pruning)
如果一棵树的结点过多,可能会造成过拟合,需要对树进行剪枝,去掉不必要的枝条,以降低复杂度。
- 预剪枝(prepruning):在创建树的时候,预先判断,如果会造成过于复杂,则不扩展这个枝条
- 后剪枝(postpruning):在树创建了之后,对其进行测试,如果会造成过于复杂,则剪去这个枝条
一般地,为了达到更好的剪枝效果,会同时采用两种剪枝方法。
3.1. 预剪枝
在选择最佳特征的伪代码中,划分后最小误差和划分前误差相差不大、划分后数据集很小,就直接返回叶子结点,不划分数据扩展枝条,这就是预剪枝。
预剪枝