zoukankan      html  css  js  c++  java
  • CART回归树(chap9)Machine Learning In Action学习笔记

    后续再次学习,现在理解有些模糊。

    优点:可以对复杂和非线性的数据建模
    缺点:结果不易理解
    适用数据类型:数值型(转换成二值型)和标称型数据

    树回归的一般方法
    收集数据:采用任意方法收集数据。
    准备数据:需要数值型的数据,标称型数据应该映射成二值型数据。
    分析数据:绘出数据的二维可视化显示结果,以字典方式生成树。
    训练算法:大部分时间都花费在叶节点树模型的构建上。
    测试算法:使用测试数据上的R2值来分析模型的效果。
    使用算法:使用训练出的树做预测,预测结果还可以用来做很多事情

    回归树与分类树的思路类似,但叶节点的数据类型不是离散型,而是连续型
    使用一部字典来存储树的数据结构,该字典将包含:
    • 待切分的特征。
    • 待切分的特征值。
    • 右子树。当不再需要切分的时候,也可以是单个值。
    • 左子树。与右子树类似。

    计算连续型数值的混乱度:首先计算所有数据的均值,然后计算每条数据的值到均值的差值。为了对正负差值同等看待,一般使用绝对值平方值来代替上述差值。类似于方差,方差是平方误差的均值(均方差),而这里需要的是平方误差的总值(总方差)。总方差可以通过均方差乘以数据集中样本点的个数来得到。

    函数createTree()的伪代码:
    找到最佳的待切分特征:  
        如果该节点不能再分,将该节点存为叶节点  
        执行二元切分  
        在右子树调用createTree()方法  
        在左子树调用createTree()方法

    函数chooseBestSplit()的伪代码:
    对每个特征:
        对每个特征值:
            将数据集切分成两份
            计算切分的误差
            如果当前误差小于当前最小误差,那么将当前切分设定为最佳切分并更新最小误差
    返回最佳切分的特征和阈值

    通过降低决策树的复杂度来避免过拟合的过程称为剪枝
    预剪枝:提前设定终止条件
    后剪枝:使用测试集和训练集

    后剪枝:将数据集分成测试集和训练集。首先指定参数,使得构建出的树足够大、足够复杂,便于剪枝。接下来从上而下找到叶节点,用测试集来判断将这些叶节点合并是否能降低测试误差。如果是的话就合并。
    函数prune()的伪代码如下:
    基于已有的树切分测试数据:
        如果存在任一子集是一棵树,则在该子集递归剪枝过程
        计算将当前两个叶节点合并后的误差
        计算不合并的误差
        如果合并会降低误差的话,就将叶节点合并

    用树来对数据建模,除了把叶节点简单地设定为常数值之外,还有一种方法是把叶节点设定为分段线性函数,这里所谓的分段线性(piecewise linear)是指模型由多个线性片段组成。






  • 相关阅读:
    正则:连续数字
    [f]聊天的时间格式化
    微信物理返回刷新页面
    npm 使用记录
    Java内存可见性volatile
    EA通过MySQL多人协作
    Sonarqube Webhook自定义参数
    使用阿里云加速Docker镜像下载
    Java异常堆栈丢失的现象及解决方法
    fo-dicom库 Dicom.Native.dll如何自动到编译输出目录
  • 原文地址:https://www.cnblogs.com/woaielf/p/5522183.html
Copyright © 2011-2022 走看看