《老饼讲解机器学习》http://ml.bbbdata.com/teach#108


目录

一. 学习决策树原理的顺序

二.CART分类树

(一)分类树模型结构

(二).分类树构建过程

(二).剪枝(防止过拟合)

三. CART回归树模型

四. ID3算法

五.C4.5算法

(一) ID3的缺陷

(二) C4.5打上补丁

六.决策树演进与对比


能来看算法原理的,估计都对决策树有一些初步理解了。
决策树算法原理其实非常简单, 但由于网上杂文过多,往往把概念弄得非常混乱,造成原理理解困难。

本文对原理进行简单介绍与梳理 。

一. 学习决策树原理的顺序

决策树算法有CART,ID3,C4.5 几种,如果把多种算法原理概念混在一起,必然很难理解。
思想起源来自于ID3,所以一般会先介绍ID3,但我建议不要从ID3入手,学习路线线最好如下安排:
理解CART分类树---->理解CART回归树--->理解ID3算法---->理解C4.5算法。

为什么先理解CART分类树
(1) matlab,python的sklearn都只实现CART算法,没有ID3,C4.5算法。
(2)CART和ID3(c4.5)是两条支线。现在人们所说的决策树,现在基本都是暗指CART,而非ID3,C4.5,所以没有必要纠结着ID3,C4.5不放。
重要的事说三遍, 先理解CART,先理解CART,先理解CART,再理解ID3,C4.5。
CART更加成熟,更加合理,更加实用,更加容易理解,越不成熟,越不合理的东西越难理解。
(3)CART(classification and regression tree)望文思义就是分类与回归树,使用得更多的是分类树,而回归树是在分类树的基础上的改动成适用于回归问题。

二.CART分类树

(一)分类树模型结构

CART分类树的结构就是一棵二叉树,每个节点有一个变量与一个判断值,该变量<=值,则判为左节点,否则为右节点。
树的训练则是指构建这样一棵树,使它能够较好的预测新样本。

(二).分类树构建过程

构建过程是逐节点构建的方式,直到所有样本都分配到叶子节点,即完成树的构建。

构建树的核心问题是:
(1)节点是作为叶子,还是继续分裂(即叶子准则)。
(2)如果分裂,该选择哪个变量作为判断值,变量的阈值是多少。
(3)叶子节点的所属类别是哪个。

所以,构建树是一个while循环过程,例如一开始根节点是150个样本,则开始while循环,
如图所示,根据分裂准则,确定了变量与阈值,则可把根节点分为左右两个子节点,假设现在50个分配到左节点,100个分配到右节点。
再根据叶子准则,判断到左节点是叶子,不再分裂。右节点不是叶子,则继续把这100个样本分裂...直到所有样本都落在叶子节点。

现在,只要确定以上三个核心问题即可。
1.叶子准则
(1) 节点样本<min_samples_split则作为叶子
(2) 超过了树分枝最大深度max_depth,则作为叶子
(3) 其它类似的条件。

2.确定节点变量与阈值
分裂选择哪个变量,和阈值是多少?
这个问题极其简单,先定一个分裂收益评估函数,把所有变量和阈值的可能组合都代进去算一遍,哪个收益大,就用哪组[变量,阈值],
怎么比较哪种分裂效果更好?主要评估子节点的清晰度。如果左节点上全是A类,那左节点就很清晰了。如果左节点上A,B两类各占50%,那就还不是很明朗。
也即是,从节点中任意抽取两个样本,这两个样本不属同一类的概率
(这概率的怎么来的后面会放链接)越小说明节点分得越清晰,这个概率称为基尼系数(GINI)。
分裂后有左右两个节点,取两个节点的加权概率即可

G越小,就代表分得越清晰。(如果是定义收益函数,收益函数需要越大越好,则取上式相反数)
通过比较每种分裂的GINI系数,最后取GINI系数(即在左/右节点随机抽两个样本,两个样本不属同一类的概率)最小的分裂对应的[特征-阈值] 即可。

3.叶子节点类别判定
叶子节点上的样本,哪类样本最多,叶子就属于哪一类。
在构建完树后,预测时只要判断新样本落在哪个叶子,就预测为哪一类。
至此,CART回归树的建树原理就结束了。

(二).剪枝(防止过拟合)

剪枝分为预剪枝和后剪枝,

1.预剪枝
预剪枝就是在构建树过程设定一个条件,防止节点分度分裂,好家伙,其实就是叶子准则,设严此,就是预剪枝了。

2.后剪枝
后剪枝就是在树构建完后再剪掉一些叶子节点。通常使用的是CCP(Cost Complexity Pruning)后剪枝法。
损失函数定义为树的代价+复杂度:

其中
 :叶子节点个数 
 :所有样本个数
 :第 i 个叶子节点上的样本数 
 : 第i个叶子节点的损失函数(常用的有:错误占比,GINI系数,和熵。)
α  :待定系数,用于惩罚节点个数,引导模型用更少的节点。

然后根据损失函数进行剪枝,使 L最小。
后剪枝是使用者的后期操作,所以程序一般只提供一条 \alphaα的所有可能取值,与对应的叶子加权损失函数的值,供使用者自行选择α 。

具体计算方法参考《决策树后剪枝原理:CCP剪枝法》。

三. CART回归树模型

决策树用于回归
回归与分类的不同,在于回归的输出变量y为连续数值变量。
整体算法类似于分类树,关键有以下两点修改:
(1)叶子节点输出的不是类别,而是节点上所有y的均值。
(2)构树过程中节点分割评估不用基尼指数,改用 平方差

至此,CART回归树也就讲完了。信息熵呢?信息增益比呢?怎么没有讲?那是ID3,C4.5的概念。所以说不要混在一起~!

四. ID3算法

ID3与CART分类树的差异:
1.树结构不同:ID3决策树模型也是一棵树。输入变量必须全是枚举型。每个节点选择一个变量,按该变量所有可能取值分叉。

2.输入变量不同:CART是连续变量,用阈值切割,而ID3输入变量必须全是枚举型按变量所有可能取值分叉。
3.分叉依据不同:ID3是全分叉,因此没有阈值一说,仅需比较不同变量的分叉质量即可。
分叉依据的是信息增益(Gain):

   : 分叉子节点个数
    : 所有子节点的总样本数(也即父节点的样本数)
   : 第 i 个子节点上样本个数
 :第 i 个子节点上第k类样本的个数
  :父节点上第 k 类样本的个数

其中称为熵。

4.没有剪枝:对,ID3是较原始的一个算法,没有剪枝。

五.C4.5算法

C4.5就是对ID3的补充,就是对ID3打补丁

(一) ID3的缺陷

(1)变量偏好多枚举值:
ID3更偏好优先分叉枚举值多的变量。因为ID3用信息增益评估分叉质量,该评估函数会更偏好枚举值多的变量。
(如果变量A有2个枚举,B有10个枚举,肯定就偏好B了,因为B一下子把节点分叉成10个子节点,而A只分成2个子节点。分成10个子节点的确定性肯定比2个会更强些。)
(2) ID3容易过拟合。
(3) ID3不支持连续变量。
(4) 不支持数据有缺失值。

(二) C4.5打上补丁

(1) 变量偏好纠正:使用信息增益比

信息增益比:

分子就是ID3中的信息增益, 分母则是全体样本中变量v的熵
分母符号说明:
  :  全体样本(划重点,是全体样本)变量v的枚举个数
  :  全体样本个数。
 :全体样本变量v第k个枚举值的样本个数。

(2) 过拟合处理:添加剪枝
剪枝方法就是CART中所说的CCP,与CART不同的是,损失函数中节点的损失用熵函数,而不是GINI。

(3) 连续变量处理:与CART类似。
(4)变量有缺失值的处理:很复杂和别扭。

六.决策树演进与对比

1.树结构:ID3不是二叉树,C4.5在输入是连续变量时是二叉树,CART一定是二叉树。非二叉树都可以用二叉树替代,统一用二叉树更加简单优雅。
2.分裂依据:ID3分裂时用熵,C4.5用熵增益,CART用GINI。GINI很容易理解,就是抽出两个样本不属同一类的概率。GINI没有log,计算也方便。(熵也可迁移到CART中用,但CART更偏向用GINI)。
3.特征数据类型:ID3的输入变量是枚举类型,C4.5是枚举与数值兼容,CART是数值类型。完全抛弃了枚举,是因为枚举型问题可以转化为数值类型问题。
4.缺失值支持:ID3不支持缺失值,C4.5支持缺失值,CART不支持缺失值。最后抛弃了缺失值的兼容,是缺失值处理极其复杂与不够优雅。统一在入模前把缺失问题处理,更加清晰,可控。
5.剪枝:ID3没有剪枝,C4.5有剪枝,CART有剪枝。

备注:一般软件包(python,matlab)只支持CART,不支持ID3,C4.5

相关文章

《深入浅出:决策树入门简介》

《一个简单的决策树分类例子》

《sklearn决策树结果可视化》

《sklearn决策树参数详解》

决策树CART、ID3、C4.5原理梳理相关推荐

  1. 机器学习爬大树之决策树(ID3,C4.5)

    自己自学机器学习的相关知识,过了一遍西瓜书后准备再刷一遍,后来在看别人打比赛的代码时多次用到XGBoost,lightGBM,遂痛下决心认真学习机器学习关于树的知识,自己学习的初步流程图为: 决策树( ...

  2. 决策树(ID3,C4.5和CART)介绍、说明、联系和区别

    决策树 决策树 1. 决策树介绍 2. 决策树构建过程 2.1 属性选择 熵 条件熵 信息增益 信息增益比 3. 决策树生成和修建 4. 决策树常见算法 ID3 C4.5 CART(基尼指数) 5.总 ...

  3. 决策树模型(ID3/C4.5/CART)原理和底层代码解读 学习笔记

    本文作者:合肥工业大学 管理学院 钱洋 email:1563178220@qq.com 内容可能有不到之处,欢迎交流. 未经本人允许禁止转载 如下为个人的学习笔记,使用latex编写,再写成文本太麻烦 ...

  4. 机器学习:决策树及ID3,C4.5,CART算法描述

    文章目录 概念理解 熵: 条件熵: 信息增益,互信息: 信息增益比 基尼指数 ID3算法描述 C4.5算法描述 CART (Classification and Regression Tree)算法描 ...

  5. 决策树之ID3,C4.5

    转自:http://www.cnblogs.com/leoo2sk/archive/2010/09/19/decision-tree.html 3.1.摘要 在前面两篇文章中,分别介绍和讨论了朴素贝叶 ...

  6. 机器学习——使用ID3算法从原理到实际举例理解决策树

    文章目录 一.什么是决策树 二.介绍建立决策树的算法 三.决策树的一般流程 四.实际举例构建决策树 使用ID3算法的原理实现构建决策树 参考链接 一.什么是决策树 基本概念 决策树是一种树形结构,其组 ...

  7. 决策树数学原理(ID3,c4.5,cart算法)

    上面这个图就是一棵典型的决策树.我们在做决策树的时候,会经历两个阶段:构造和剪枝. 构造 简单来说,构造的过程就是选择什么属性作为节点的过程,那么在构造过程中,会存在三种节点: 根节点:就是树的最顶端 ...

  8. 监督学习 | ID3 C4.5 决策树原理

    文章目录 决策树 1. 特征选择 1.1 熵 1.2 条件熵 1.3 信息增益 1.4 信息增益率 2. 决策树生成 算法1 信息增益及信息增益率的算法 2.1 ID3 算法 2.2 C4.5 算法 ...

  9. 决策树ID3、决策树C4.5、决策树CART、CART树的生成、树的剪枝、从ID3到CART、从决策树生成规则、决策树优缺点

    决策树ID3.决策树C4.5.决策树CART.CART树的生成.树的剪枝.从ID3到CART.从决策树生成规则.决策树优缺点 目录

最新文章

  1. 整理一套pandas详细教程,希望对你有帮助!
  2. node中怎样将css导入到html,CSS无法使用Node.js加载到我的HTML代码中
  3. Struts2 action的单例与多例
  4. 【MySQL数据库】一天学会MySQL笔记——MarkDown版
  5. 洛谷 2449 [SDOI2005]矩形
  6. Java7----ForkJoin框架
  7. VS2010整合NUnit进行单元测试
  8. samba服务器常用指令
  9. 成为一名数据分析师,需要学习统计学吗?
  10. 基于linux 的 PCI PCIe 总线分析总结
  11. java 物体移动不了总结_java9迁移注意问题总结
  12. 基于Android的记事本APP设计与实现
  13. 算法——实现随机拿到30道不重复的20以内的加减法题目
  14. JS基础----函数应用 案例
  15. python经典案例
  16. 9.4 多元复合函数求导
  17. docker安全配置(cpu、分区的大小设定和权限设定)
  18. 用VS2005打开方案出现“此安装不支持该项目类型
  19. flutter 仿微信展开收起两种写法
  20. 计算机学算法的意义,浅析算法在计算机编程中的重要作用

热门文章

  1. 斐讯dc1服务器什么时候修复,[4月1日更新!!]斐讯DC1插座自制固件接入ha
  2. tps和tips区别_性能测试:TPS和QPS的区别
  3. Failover feature ‘ANSYS electronics_desktop‘ is not available. No valid FLEXlm servers specified.解决方
  4. oracle rfs进程过多,Oracle物理备库RFS进程消失,不能启动--解决
  5. #智能制造#第一章 智能制造,缘何而起?
  6. web4.0之万能密码登录
  7. MATLAB实现大家来找茬GUI程序
  8. 利用Dism修复系统步骤,以及dism找不到源文件解决方案
  9. 网络编程-procmon
  10. 第15周实践项目-洗牌(范型程序设计)(1)