zoukankan      html  css  js  c++  java
  • 决策树算法(3)

    CART树:

    该树的生成就是递归的构建二叉决策树的过程,对回归树用平方误差最小化准则,对分类树用gini指数最小化准则,进行特征选择,生成二叉树。

    (1)回归树

    假设X和Y分别为输入和输出变量,Y为连续变量,给定数据集D={(x1,y1),(x2,y2),...(xn,yn)}

    假设输入空间划分为M个单元R1,R2,...,RM,并且在每个单元Rm上有一个固定的输出cm,于是回归树模型可以表示为:

    当输入空间划分确定时,可用平方误差

    来表示回归树对于数据集的预测误差,用平方误差最小的准则求解每个单元的最优输出。单元Rm上的cm的最优值是Rm的所有输入实例xi对应的输出yi的均值,下式子用于计算最小二乘法:

    从每个子cart树中寻找划分点的过程分为选取第j个变量x(j)和其取值s,作为切分变量和切分点,按照如下要求对样本集进行划分:

    然后寻找最优切分变量j和最优切分点s,具体表现为求解

    对固定输入变量j可以找到最优切分点s

    遍历所有输入变量,找到最优切分变量j,构成对(j,s),以此划分2个区域,对每个区域重复上述划分过程,直到满足停止条件为止,从而生成决策树,这种方法也成为最小二乘回归树。(总结为变量的遍历,然后寻找最佳切分点,然后做递归生成树)

    最小二乘回归树算法如下:

    输入:训练数据集D

    输出:回归树f(x)

    在训练数据集空间,递归将每个区域划分为2个子区域并决定每个子区域的输出值,构建决策树

    (1)选择最优切分变量j和切分点s,求解

    遍历变量j,对固定切分变量j扫描切分点s,使上市达到最小值的(j,s)

    (2)用选定的(j,s)划分区域并决定相应输出值,左右空间分别表示为:

     

     (3)重复对子区域调用步骤(1)、(2)

     (4)将输入空间划分M个区域R1,R2,...Rm,并生成决策树 

    (2)分类树

    分类数采用gini指数作为特征筛选条件,假设有K的类,样本点属于第k类的概率为pk,则概率分布的gini指数定义为:

    (因为

    如果目标是二分类的话,概率分布的基尼值也可以表示为:

    Gini(p)=2p(1-p)

    因此,样本集D的基尼指数同样可以表示为:

    上式的Ck是D中属于第k类的样本集,K是类的个数

    CART树算法

    输入:训练数据集D

    输出:CART决策树

     (1) 设结点训练数据集为D,计算现有特征基尼系数,对每个特征A,对其可能取值的a,根据样本点对A=a的测试为"是"或“否”将D分割成D1和D2两部分,计算属于特征A的基尼系数

     (2) 在所有可能的特征A及可能的切分点a中,选择基尼系数最小的特征及对应切分点作为最优特征和最优切分点。并依次将训练集分配到2个子结点

     (3) 递归调用(1)和(2),直到分配完毕

     (4) 生成CART决策树

    CART剪枝:

    CART树剪枝通过从决策树T0底端开始剪枝,往上遍历直到根结点,形成子树序列{T0,T1,...,Tn},然后通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择最优子树。这里书上讲的并不细致,可以按照以下方式来理解。首先介绍剪枝后属于子结点转为叶结点t的损失函数:

    Ca(t)=C(t)+a

    以及剪枝之前子树的损失函数:

    Ca(Tt)=C(Tt)+a|Tt|

    上式中|Tt|表示叶结点的数量,假若进行剪枝,则叶结点的数量则为1.

    将剪枝前后的损失函数进行相减,可得到:

    a存在临界值g(t)使得当a>g(t)的时候有:Ca(Tt)>Ca(t)

    当a<g(t)时候有:Ca(Tt)<Ca(t)

    由于在生成CART树之后,各子结点及对应的树结点的a值都已确定,因此按照a值从大到小进行排序。给定剪枝的a给定阈值a',若计算的a<a',则可进行剪枝,然后逐渐按照小到大逐渐剪枝到阈值为止,然后记录当前树。将阈值从小到大不断调整 ,得到不同的剪枝后决策树。通过另外的测试集来判断该不同的决策树的准确率,选取准确率最高的作为最终结果。

    输入:CART算法生成的决策树T0

    输出:最优决策树Ta

     (1) 设k=0   T=T0

     (2)设a=+∞

     (3)自上而下对内部结点t计算C(Tt),|Tt|以及

     

    其中,Tt表示t为根结点的子树,C(Tt)表示对训练数据的预测误差(如基尼指数),|Tt|是Tt的叶结点个数

     (4) 对g(t)=a的内部结点t进行剪枝,并对叶结点t以多数表决法决定所属类别,并得到树T

     (5)设k=k+1 , ak=a  ,Tk=T

     (6) 如果Tk不是由根结点及两个叶结点构成的树,则返回步骤3, 否则令Tk=Tn

     (7) 用交叉验证法在子树序列T0,T1,....,Tn中选取最优子树Ta

  • 相关阅读:
    Yii2中多表关联查询(join、joinwith)
    Yii2.0实用功能技巧解密之——分页功能
    Yii2.0中文开发向导——RBAC(基于角色的访问控制权限)表结构原理分析
    Yii2.0源码分析之——控制器文件分析(Controller.php)创建动作、执行动作
    Yii2.0源码分析之——主题(Theme)
    Yii2.0源码分析之——YiiBase自动加载类、引用文件(autoload)
    MySQL 性能调优的10个方法
    PHP,Mysql-根据一个给定经纬度的点,进行附近地点查询–算法
    ThinkPHP3.2.3验证码显示、刷新、校验
    Yii2 基于RESTful架构的 advanced版API接口开发 配置、实现、测试
  • 原文地址:https://www.cnblogs.com/xiaochouk/p/7978411.html
Copyright © 2011-2022 走看看