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树剪枝。

  • 相关阅读:
    oracle 随机函数
    cmd和dos的区别
    SAP HANA 常用函数
    编程语言发展史
    PL/SQL Job
    ETL工具总结
    JDK、JRE、JVM三者间的关系
    Redis过滤器如何与Envoy代理一起使用
    apache配置https
    kubernetes监控和性能分析工具:heapster+influxdb+grafana
  • 原文地址:https://www.cnblogs.com/charleechan/p/11434774.html
Copyright © 2011-2022 走看看