zoukankan      html  css  js  c++  java
  • 机器学习实战笔记-9-树回归

    CART(classification and regression trees)树回归

    1. 优点:可对复杂非线性的数据建模;缺点:结果不易理解;适用于:数值型和标称型。

    2. 构建树函数createTree()的伪代码:

      选择最好的划分方式(得到最佳划分的特征与阈值):用于回归树和模型树
      如果该节点不能再分,将该节点存为叶节点
      执行二元划分
      在右子树调用createTree()函数
      在左子树调用createTree()函数
      
    3. 选择最好的划分方式 伪代码:用于回归树和模型树

      如果所有标签都一样,返回一个叶子节点
      计算当前误差
      对每个特征:
        对每个特征值:
          将数据集划分为两份
          计算划分的误差
          如果当前误差小于当前最小误差,将当前划分设置为最佳划分并更新最小误差
      如果误差减小得不大((S-bestS)<tolS),返回一个叶子节点(不进行划分) (预剪枝)
      如果划分出的数据集很小(shape(mat0)[0]<tolN),返回一个叶子节点(不进行划分)(预剪枝)
      返回最佳划分的特征和阈值
      
    4. 回归树中 创建叶子节点 函数代码:回归树中叶子节点是常数值(一堆数据的y平均值)

      def regLeaf(dataset):  
        return mean(dataset[:,-1])
      
    5. 树剪枝(可以避免过拟合) 函数伪代码:

      基于已有的树划分测试数据:
        如果存在任一子集是一棵树,则在该子集递归剪枝过程
        计算将当前两个叶节点合并后的误差
        计算不合并的误差
        如果合并会降低误差,将叶节点合并
      

    分割线:前面是回归树,后面是模型树。上文中的误差是:方差的平方,即误差(值-平均值)的平方和。


    下文中的误差是:误差(真实值-预测值)的平方和。


    1. 模型树中 创建叶子节点 函数代码:模型树中的叶子是一个函数模型

      def modelLeaf(dataset):
        ws,X,Y=linearSolve(dataset)
        return ws
      def modelErr(dataset):
        ws,X,Y=linearSolve(dataset)
        yHat=X*ws
        return sum(power(Y-yHat,2))
      

    可用(corrcoef(yHat, y, rowvar =0))比较树回归和标准的线性回归法,计算相关系数(R^{2})的值。

    如何检查过拟合(分类划分得太细导致预测时失误率增加;回归关注低过细导致预测时误差大)?

    交叉验证(每次挑选一部分作为训练集,其余部分作为测试集,重复多次求测试结果的平均值)。

    如何避免?提前终止,数据集扩增,正则化。CART树剪枝。

  • 相关阅读:
    Thread中带参方法无法使用之解决方案
    项目相关的风险要素及分类
    AspNetPager分页示例之DataGrid(PostBack分页)
    Substitution 类 (asp.net 2.0 )
    自定义HTTP处理程序显示图片(asp.net 2.0)
    常见文件扩展名和它们的说明
    基于.NET的开源GIS项目(转)
    项目开发流程标准
    AOP(Aspect Oriented Programming) 面向方面编程
    项目实施及管理标准
  • 原文地址:https://www.cnblogs.com/charleechan/p/11434774.html
Copyright © 2011-2022 走看看