《机器学习实战》笔记(九):Ch9 - 树回归

烈酒焚心 提交于 2020-01-31 23:57:56

第九章 树回归([代码][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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!