文章目录

  • 决策树CART算法
  • 决策树CART算法学习目标
  • 决策树CART算法详解
    • 基尼指数和熵
    • CART算法对连续值特征的处理
    • CART算法对离散值特征的处理
    • CART算法剪枝
      • 生成剪枝后的决策树
      • 选择最优子树
    • CART算法剪枝流程
      • 输入
      • 输出
      • 流程
  • 决策树CART算法流程
    • 输入
    • 输出
    • 分类CART树算法流程
    • 回归CART树算法流程
      • 处理连续值
      • 预测结果
  • 决策树CART算法优缺点
    • 优点
    • 缺点
  • 小结

决策树CART算法

  决策树C4.5算法虽然对决策树ID3算法做了很大的改良,但是缺点也是很明显的,无法处理回归问题、使用较为复杂的熵来作为特征选择的标准、生成的决策树是一颗较为复杂的多叉树结构,CART算法针对这些问题又做了进一步的优化。

决策树CART算法学习目标

  1. 基尼指数和熵
  2. CART算法对连续值和特征值的处理
  3. CART算法剪枝
  4. 决策树CART算法的步骤
  5. 决策树CART算法的优缺点

决策树CART算法详解

  CART的英文名全称是classification and regression tree,所以有时候也把CART称它为分类回归树,分类回归树由特征选择、树的生成以及剪枝组成,既可以用于分类也可以用于回归。

基尼指数和熵

# 基尼指数和熵示例图
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
%matplotlib inline
font = FontProperties(fname='/Library/Fonts/Heiti.ttc')p = np.arange(0.001, 1, 0.001)
gini = 2*p*(1-p)
entropy = -(p*np.log2(p) + (1-p)*np.log2(1-p))/2
error = 1-np.max(np.vstack((p, 1-p)), 0)
plt.plot(p, entropy, 'r-', label='基尼指数')
plt.plot(p, gini, 'g-', label='熵之半$(1/2*H(p))$')
plt.plot(p, error, 'b-', label='分类误差率')
plt.xlabel('p', fontproperties=font)
plt.ylabel('损失', fontproperties=font)
plt.legend(prop=font)
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-blnb0GBe-1582805411133)(02-23%20%E5%86%B3%E7%AD%96%E6%A0%91CART%E7%AE%97%E6%B3%95_files/02-23%20%E5%86%B3%E7%AD%96%E6%A0%91CART%E7%AE%97%E6%B3%95_7_0.png)]

  上图可以看出二分类问题中基尼指数和熵的曲线非常接近,因此基尼指数可以作为熵的一个近似替代。而CART算法就是使用了基尼指数来选择决策树的特征,同时为了进一步简化基尼指数的计算,CART算法每次对某个特征进行二分,因此CART算法构造的决策树是一颗二叉树模型。

CART算法对连续值特征的处理

  CART算法类似于C4.5算法对连续值特征的处理,只是CART算法使用基尼指数取代了信息增益比对连续值做了处理。

  假设现有一个特征FFF的特征值为连续值,从大到小排序为f1,f2,…,fmf_1,f_2,\ldots,f_mf1​,f2​,…,fm​,CART算法对相邻样本间的特征值fi,fi+1f_i,f_{i+1}fi​,fi+1​取平均数,一共可以得到m−1m-1m−1个划分点,其中第jjj个划分点可以表示为
Sj=fi+fi+12S_j = {\frac {f_i + f_{i+1}} {2}} Sj​=2fi​+fi+1​​
对于这m−1m-1m−1个划分点,分别计算以该点作为二元分类点的基尼指数,选择基尼指数最小的点作为该连续特征的二元离散分类点,把改点记作ftf_tft​,则特征值小于ftf_tft​的点记作c1c_1c1​;特征值大于ftf_tft​的点记作c2c_2c2​,这样就实现了连续特征值的离散化。

CART算法对离散值特征的处理

  CART算法对离散值特征的处理采用的是不停的二分离散化特征的思想。

  假设一个训练集DDD的某个特征FFF有f1,f2,f3f_1,f_2,f_3f1​,f2​,f3​三种类别。如果我们使用的是ID3算法或者是C4.5算法,则会生成333个子节点,即三叉子节点,也因此导致决策树变成一颗多叉树。但是CART算法会基于这三个特征形成f1f_1f1​和f2,f3f_2,f_3f2​,f3​、f2f_2f2​和f1,f3f_1,f_3f1​,f3​、f3f_3f3​和f1,f2f_1,f_2f1​,f2​这三种组合,并且在这三个组合中找到基尼指数最小的组合,然后生成二叉子节点。

  假设f1f_1f1​和f2,f3f_2,f_3f2​,f3​在这三者中基尼指数最小,则生成的二叉做子节点为f1f_1f1​,二叉右子节点为f2,f3f_2,f_3f2​,f3​。由于右子节点并没有被完全分开,因此在之后会继续求出f2f_2f2​和f3f_3f3​的基尼指数,然后找到最小的基尼指数来划分特征FFF。

CART算法剪枝

  回归CART树和分类CART树剪枝策略除了在特征选择的时候一个使用了均方误差,另一个使用了基尼指数,其他内容都一样。

  无论是C4.5算法还是CART算法形成的决策树都很容易对训练集过拟合,因此可以使用剪枝的方式解决过拟合问题,这类似于线性回归中的正则化。

  CART算法采用的事后剪枝法,即先生成决策树,然后产生所有可能的剪枝后的CART树,然后使用交叉验证来检验各种剪枝的效果,选择返回泛化能力最好的剪枝方法。即CART树的剪枝方法可分为两步:

  1. 使用原始的决策树T0T_0T0​从它的底端开始不断剪枝,直到T0T_0T0​的根节点生成一个子树序列{T0,T1,…,Tn}\{T_0,T_1,\ldots,T_n\}{T0​,T1​,…,Tn​}
  2. 通过交叉验证法选择泛化能力最好的剪枝后的树作为最终的CART树,即最优子树

生成剪枝后的决策树

  在剪枝过程中,子树TTT的损失函数为
Cα(T)=C(T)+α∣T∣C_\alpha(T) = C(T) + \alpha|T| Cα​(T)=C(T)+α∣T∣
其中TTT是任意子树,αα≥0\alpha \quad \alpha\geq0αα≥0为正则化参数,它权衡训练数据的拟合程度与模型的复杂度;C(T)C(T)C(T)是训练数据的预测误差(分类树使用基尼指数度量,回归树使用均方差度量),∣T∣|T|∣T∣是子树TTT的叶子节点的数量。

  当α=0\alpha=0α=0时没有正则化,即原始的决策树为最优子树;当α\alphaα逐渐增大时,则正则化强度越大,生成的最优子树相比较原生的子树就越小;当α=∞\alpha=\inftyα=∞时,即正则化强度达到最大,此时由原始的决策树的根节点组成的单节点树为最优子树。因此对于固定的α\alphaα,从子树的损失函数中可以看出一定存在使损失函数Cα(T)C_\alpha(T)Cα​(T)最小的唯一子树TaT_aTa​,TaT_aTa​在损失函数最小的意义下是最优的。

  可以递归的方法对书进行剪枝。将α\alphaα从小增大,0=α0<α1<⋯αn<+∞0=\alpha_0<\alpha_1<\cdots\alpha_n<+\infty0=α0​<α1​<⋯αn​<+∞,产生一系列的区间[αi,αi+1),i=0,1,…,n[\alpha_i,\alpha_{i+1}),i=0,1,\ldots,n[αi​,αi+1​),i=0,1,…,n;剪枝得到的子序列对应着区间α∈[αi,αi+1)\alpha{\in}{[\alpha_i,\alpha_{i+1})}α∈[αi​,αi+1​)的最优子树序列{T0,T1,…,Tn}\{T_0,T_1,\ldots,T_n\}{T0​,T1​,…,Tn​}(注:每个区间内是有可能有多个子树的),序列中的子树是嵌套的。

  从原始的决策树T0T_0T0​开始剪枝,对T0T_0T0​的任意内部节点ttt,以ttt为单结点树的损失函数是
Cα(t)=C(t)+αC_\alpha(t) = C(t) + \alpha Cα​(t)=C(t)+α
以ttt为根节点的子树TtT_tTt​的损失函数是
Cα(Tt)=C(Tt)+α∣Tt∣C_\alpha(T_t) = C(T_t) + \alpha|T_t| Cα​(Tt​)=C(Tt​)+α∣Tt​∣
  当α=0\alpha=0α=0以及α\alphaα充分小时(最优子树为原始的决策树),有不等式
Cα(Tt)<Cα(t)C_\alpha(T_t) < C_\alpha(t) Cα​(Tt​)<Cα​(t)
  当α\alphaα增大时,在某一α\alphaα有
Cα(Tt)=Cα(t)C_\alpha(T_t) = C_\alpha(t) Cα​(Tt​)=Cα​(t)
  当α\alphaα继续增大时(最优子树为根节点组成的单节点树),有
Cα(Tt)>Cα(t)C_\alpha(T_t) > C_\alpha(t) Cα​(Tt​)>Cα​(t)
并且只要当α=C(t)−C(Tt)∣Tt∣−1\alpha = {\frac {C(t)-C(T_t)} {|T_t|-1} }α=∣Tt​∣−1C(t)−C(Tt​)​(注:当TtT_tTt​和ttt有相同的损失函数时该公式由ttt和TtT_tTt​的损失函数联立得到)。由于ttt的节点少,因此ttt比TtT_tTt​更可取,因此可以对子树TtT_tTt​剪枝,也就是将它的子节点全部剪掉,变为一个叶子节点ttt。

选择最优子树

  上面说到可以计算出每个子树是否剪枝的阈值α\alphaα,如果把所有的节点是否剪枝的值α\alphaα都计算出来,然后分别针对不同的α\alphaα所对应的剪枝后的最优子树做交叉验证,这样就可以选择一个最优的α\alphaα,通过这个α\alphaα则可以用对应的最优子树作为最终结果。

CART算法剪枝流程

输入

  假设现在有一个原始的决策树T0T_0T0​。

输出

  最优子树TαT_\alphaTα​。

流程

  1. 初始化αmin=∞\alpha_{min}=\inftyαmin​=∞,最优子树集合s={T}s=\{T\}s={T}
  2. 自下而上的对各内部结点ttt计算C(Tt)C(T_t)C(Tt​)、∣Tt∣|T_t|∣Tt​∣以及正则化阈值α=min{αmin,g(t)=C(t)−C(Tt)∣Tt∣−1}\alpha = min\{\alpha_{min},g(t)={\frac{C(t)-C(T_t)}{|T_t|-1}}\}α=min{αmin​,g(t)=∣Tt​∣−1C(t)−C(Tt​)​}(注:g(t)g(t)g(t)由ttt和TtT_tTt​的损失函数联立得到,即表示剪枝后整体损失函数的减少程度),并且更新αmin=α\alpha_{min}=\alphaαmin​=α。其中TtT_tTt​表示以ttt为根节点的子树,C(Tt)C(T_t)C(Tt​)是训练数据的预测误差,∣Tt∣|T_t|∣Tt​∣是TtT_tTt​的叶节点个数
  3. 得到所有节点的α\alphaα值的集合MMM
  4. 从MMM中选择最大的值αi\alpha_iαi​,自上而下的访问子树ttt的内部节点,如果C(t)−C(Tt)∣Tt∣−1≤αi{\frac{C(t)-C(T_t)}{|T_t|-1}}\leq\alpha_i∣Tt​∣−1C(t)−C(Tt​)​≤αi​(注:g(t)=Cα(t)−Cα(Tt)+αg(t)=C_\alpha(t)-C_\alpha(T_t)+\alphag(t)=Cα​(t)−Cα​(Tt​)+α,如果g(t)≤αg(t)\leq\alphag(t)≤α,则Cα(t)−Cα(Tt)<0C_\alpha(t)-C_\alpha(T_t)<0Cα​(t)−Cα​(Tt​)<0,则Cα(t)<Cα(Tt)C_\alpha(t)<C_\alpha(T_t)Cα​(t)<Cα​(Tt​),则以ttt为单节点的树的误差会更小),进行剪枝并决定叶节点的值。如果是分类树,则是概率最高的类别;如果是回归树,则是所有样本输出的均值或所有样本的中位数。然后得到αi\alpha_iαi​对应的最优子树TkT_kTk​
  5. 最优子树集合s=s⋃Tis=s\bigcup{T_i}s=s⋃Ti​,M=M−aiM=M-{a_i}M=M−ai​
  6. 如果MMM不为空,回到步骤4,否则已经得到了所有可能的最优子树集合sss
  7. 采用交叉验证在sss中选择最优子树TαT_\alphaTα​

决策树CART算法流程

输入

  假设有训练数据集DDD,停止计算的条件:节点中的样本个数小于预定阈值,或样本集的基尼指数小于预定阈值,或没有更多特征。

输出

  CART树

分类CART树算法流程

  CART算法从根节点开始,用训练集递归的建立CART树。

  1. 设节点的训练集为DDD,计算现有的所有特征对该训练集的基尼指数。此时对每一个特征FFF,对其可能取的每个值fff,根据样本点对F=fF=fF=f的测试为“是”或“否”将DDD分割成D1D_1D1​和D2D_2D2​两个子集,利用基尼指数公式计算F=fF=fF=f时的基尼指数。
  2. 在所有可能的特征TTT以及它们所有可能的切分点ttt中,选择基尼指数最小的特征与其对应的切分点作为最优切分点,依据该最优切分点切割,生成两个子节点,左子节点为D1D_1D1​,右子节点为D2D_2D2​。
  3. 对两个子节点递归调用步骤1−21-21−2,直至满足停止条件生成一颗完整的二叉CART决策树。
  4. 对生成的分类CART决策树做预测的时候,如果测试集里的某个样本AAA落到了某个叶子节点,该叶子节点里存在多个类别的训练样本,则概率最大的训练样本则是样本AAA的类别。

回归CART树算法流程

  回归CART树和分类CART树的建立算法和过程大部分是相同的,所以本文只讨论两者生成决策树的区别,两者的区别有以下两点

  1. 回归CART树和分类CART树最大的区别在于样本输出,如果输出的是离散值,则它是一颗分类树;如果输出的是连续值,则它是一颗回归树。
  2. 两者的区别在于对连续值处理的方式不同以及决策树建立后做预测的方式不同。

处理连续值

  分类CART树用基尼指数最小化准则,而回归CART树用均方误差最小化准则作为特征和划分点选择的方法。

  对任意的划分特征FFF,对应的任意划分点sss把训练集DDD划分成两个子集D1D_1D1​和D2D_2D2​,求出使得两个子集D1D_1D1​和D2D_2D2​以及两个子集之和的均方差最小的对应划分点sss特征FFF和划分点sss,即
min⏟F,s[min⏟c1∑xi∈D1(F,s)(yi−c1)2+min⏟c2∑xi∈D2(F,s)(yi−c2)2]\underbrace{min}_{F,s} [ \underbrace{min}_{c_1} \sum_{{x_i}\in{D_1(F,s)}} (y_i-c_1)^2 + \underbrace{min}_{c_2} \sum_{{x_i}\in{D_2(F,s)}} (y_i-c_2)^2 ] F,smin​​[c1​min​​xi​∈D1​(F,s)∑​(yi​−c1​)2+c2​min​​xi​∈D2​(F,s)∑​(yi​−c2​)2]
其中已经假设样本按照某个特征FFF和划分点sss划分成功,则输入一个xxx会有一个输出值cmc_mcm​。c1c_1c1​则是D1D_1D1​数据集中所有的xxx的样本输出均值,c2c_2c2​是D2D_2D2​数据集中所有的xxx的样本输出均值。

  使用该方法生成的回归CART树通常称作最小二乘回归树(least squares regression tree)。

预测结果

  分类CART树选择概率最大的类别作为样本AAA的类别的方式不同的是:回归CART树由于输出的不是类别,而是一个连续值,因此它通常采用的是使用最终叶子的均值或者中位数来预测输出结果。

决策树CART算法优缺点

优点

  1. 既可以做分类又可以做回归

缺点

  1. 你要说缺点其实还真的有,CART算法做特征分类决策的时候是由某一个特征决定的,而真实情况应该是由一组特征决定的,这样决策得到的决策树更加准确,这个决策树叫做多变量决策树(mutil-variate decision tree),这个算法的代表是OC1,这里不多赘述。

小结

  CART树是决策树的一次创新,摒弃了信息熵使用了基尼指数,基于C4.5算法可以处理回归问题,可以使用剪枝防止过拟合,解释型强。

  CART树可以说是完美的,但是它最大的一个问题就是CART算法会把所有的特征全部用于构造决策树中,这对于生成决策树来讲是一个非常大的问题,在集成学习中使用随机森林将能一点程度的减轻该问题。

  由于随机森林属于集成学习,所以下一篇很遗憾的告诉你不是讲随机森林,而将带你走入概率的天堂,即朴素贝叶斯法。

02-23 决策树CART算法相关推荐

  1. 决策树CART算法、基尼系数的计算方法和含义

    决策树CART算法--基尼系数 决策树的CART算法使用基尼系数来选择划分属性.一个数据集的纯度可以用基尼系数来度量 Gini(D)=∑k=1∣y∣∑k′≠kpkpk′=1−∑k=1∣y∣pk2\be ...

  2. 机器学习第五篇:详解决策树-CART算法

    01|前言: 本篇接着上一篇决策树详解,CART是英文"classification and regression tree"的缩写,翻译过来是分类与回归树,与前面说到的ID3.C ...

  3. 决策树-CART算法

    总第80篇 01|前言: 本篇接着上一篇决策树详解,CART是英文"classification and regression tree"的缩写,翻译过来是分类与回归树,与前面说到 ...

  4. cart算法_机器学习十大算法之一——决策树CART算法

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第23篇文章,我们今天分享的内容是十大数据挖掘算法之一的CART算法. CART算法全称是Classification ...

  5. 分类算法之决策树CART算法

    1. CART算法的认识 Classification And Regression Tree,即分类回归树算法,简称CART算法,它是决策树的一种实现,通常决策树主要有三种实现,分别是ID3算法,C ...

  6. 决策树——CART算法+实战(sklearn)

    CART算法 CART举例 剪枝 优缺点 数据集 from sklearn import tree import numpy as np # 载入数据 data = np.genfromtxt(&qu ...

  7. cart算法实例matlab,matlab 决策树cart算法源代码

    matlab源码 决策树 c4.5 cart function D = CART(train_features, train_targets, params, region) % Classify u ...

  8. 决策树CART算法讲解

    ID3和C4.5在上一篇,点击 转载:https://www.cnblogs.com/pinard/p/6053344.html

  9. 决策树分类算法研究及用例

    文章目录 1 题目 2 理论及算法原理 2.1决策树模型的构成 2.2决策树的数据结构 2.3决策树的功能 2.4实现决策树模型的算法 2.5决策树生成算法原理 3算法对比分析 3.1算法概括 3.2 ...

最新文章

  1. 用dotTace模仿下老赵的“使用Profiler分析程序性能”
  2. php禁止国外访问,wordpress 禁止国外ip访问
  3. 63. 不同路径 II(JavaScript)
  4. Android九宫格闪烁,js实现九宫格点击按钮随机三个格子闪烁,发生错误
  5. 企业库2.0培训系列课程大纲[意见征询]
  6. python语法学习第五天--函数(2)
  7. Intel 45 纳米处理器加速VMware虚拟架构普及
  8. 湖北移动中兴B860AV2.1_S905L_线刷固件包
  9. 个人设计web前端大作业——HTML+CSS华为官网首页
  10. nofollow是什么意思,nofollow标签的作用是什么?
  11. 计算机考证忘记密码了怎么办,计算机忘记开机密码怎么办?
  12. 私藏的自媒体图片素材网站,一键下载,免费使用
  13. 【云图】如何制作东莞酒店地图?
  14. [生存志] 第104节 吕览一字千金
  15. androidx使用Toolbar
  16. 评论-Mophie果汁包(不是果汁包空气)
  17. BootStrap-Table主子表
  18. 2020,上市也疯狂
  19. Linux下xmms
  20. 计算机模拟病例考试试题,计算机模拟病例考试系统的开发应用与统计学研究

热门文章

  1. CPRI和10GBASE-KR的关系
  2. 01 熟悉python绘图工具——matplotlib
  3. 解决警告You are running the esm-bundler build of vue-i18n. It is recommended to configure your bundler
  4. android多类型启动广告,如何在我的应用启动界面实现「开屏广告」?
  5. 响应USB接口为串口类型的拔插事件
  6. Ubuntu18.04安装g2o报错(bal_example.cpp:96:52: error: template argument 2 is invalid)
  7. 离散数学——命题与逻辑
  8. 案例 局部获取坐标位置 和全局获取坐标位置
  9. NLP点滴——文本相似度
  10. 9个非常实用的计算机网络命令