决策树精讲

一、决策树的构造

决策树的构造是一个递归的过程,有三种情形会导致递归返回:(1)当前结点包含的样本全属于同一类别,这时直接将该结点标记为叶结点,并设为相应的类别;(2)当前属性集为空,或是所有样本在所有属性上取值相同,无法划分,这时将该结点标记为叶结点,并将其类别设为该结点所含样本最多的类别;(3)当前结点包含的样本集合为空,不能划分,这时也将该结点标记为叶结点,并将其类别设为父结点中所含样本最多的类别。算法的基本流程如下图所示:

可以看出:决策树学习的关键在于如何选择划分属性,不同的划分属性得出不同的分支结构,从而影响整颗决策树的性能。属性划分的目标是让各个划分出来的子结点尽可能地"纯",即属于同一类别。因此下面便介绍量化纯度的具体方法,决策树最常用的算法是三种:ID3,C4.5和CART。

二、ID3算法

ID3算法使用信息增益为准则来选择划分属性,"信息熵(information entropy)"是度量样本结合纯度的常用指标,假定当前样本集合D中第k类样本所占比例为pk,则样本集合D的信息熵定义为:

假定通过属性划分样本集D,产生了V个分支结点,v表示其中第v个分支结点,易知:分支结点包含的样本数越多,表示该分支结点的影响力越大。故可以计算出划分后相比原始数据集D获得的"信息增益(information gain)"。

信息增益越大,表示使用该属性划分样本集D的效果越好,因此ID3算法在递归过程中,每次选择最大信息增益的属性作为当前的划分属性。

缺点:

  • 无剪枝策略,容易过拟合;
  • 信息熵的设定使得更多取值种类数的特征的信息增益会很大。因为更多取值情况代表了树要分裂非常多的叶子结点,并且每个叶子结点上的样本数很少,越小的数据自己其"纯度"显然越容易高,导致了信息增益会很大。
  • 只能用于处理离散分布的特征并且只能处理分类问题
  • 没有考虑缺失值

三、C4.5算法

上面我们已经提到了,ID3算法存在一个问题,就是偏向于取值数目较多的属性,例如:如果存在一个唯一标识,这样样本集D将会被划分为|D|个分支,每个分支只有一个样本,这样划分后的信息熵为零,十分纯净,但是对分类毫无用处。因此C4.5算法使用了"增益率"(gain ratio)来选择划分属性,来避免这个问题带来的困扰。增益率定义为:

但是使用增益率可能产生另外一个问题,就是如果属性取值数目较少,我们来想一个比较极端的例子,假如属性只取一个值,属性熵就是0.我们知道一个数除以一个接近0的数,会变成无穷大。所以增益率可能会偏好取值比较少的属性。因此C4.5采用了一个启发式的算法,先从候选属性中找出高于平均水平的属性,再从高于平均水平的属性中选择增益率最高的属性。

3.1 连续值处理

C4.5算法讲连续的属性进行离散化,离散化策略就是二分法。

对于离散变量,在前一轮被当作划分属性之后,下一轮就不能当作候选属性来被选作划分属性了,但是连续变量在这一轮当作划分属性之后,下一轮仍然可以当作候选属性来被选作划分属性。

3.2 缺失值处理

对于缺失值,我们需要解决两个问题:(1)如何在属性值缺失的情况下进行划分属性选择?(2)给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分?

3.3 剪枝处理

从决策树的构造流程中我们可以直观地看出:不管怎么样地训练集,决策树总是能很好地讲各个类别分离开来,这时就会遇到之前提到过地问题:过拟合(overfitting),即太依赖训练样本。剪枝(pruning)则是决策树算法对付过拟合地主要手段,剪枝的策略有两种如下:

  • 预剪枝(prepruning):在构造的过程中先评估,再考虑是否分支。
  • 后剪枝(post-pruning):在构造好一颗完整的决策树后,自底向上,评估分支的必要性。

评估指的是性能度量,即决策树的泛化性能。之前提到:可以使用测试集作为学习器泛化性能的近似,因此可以讲数据集划分为训练集和测试集。预剪枝表示在构造数的过程中,对一个节点考虑是否分支时,首先计算决策树不分枝时在测试集上的性能,再计算分支之后的性能,若分支对性能没有提升,则选择不分支(即剪枝)。后剪枝则表示再构造好一颗完整的决策树后,从最下面的节点开始,考虑该节点分支对模型的性能是否有提升,若无则剪枝,即将该节点标记为叶子节点,类别标记为其包含样本最多的类别。

上图分别表示不剪枝处理的决策树,预剪枝决策树和后剪枝决策树。预剪枝处理使得决策树的很多分支被剪掉,因此大大降低了训练时间开销,同时降低了过拟合的风险,但另一方面由于剪枝同时剪掉了当前节点后续子节点的分支,因此预剪枝”贪心“的本质阻止了分支的展开,在一定程度上带来了欠拟合的风险。而后剪枝则通常保留了更多的分支,因此采用后剪枝策略的决策树性能往往优于预剪枝,但其自底向上遍历了所有节点,并计算性能,训练时间开销相比预剪枝大大提升。

C4.5算法采用的后剪枝。

C4.5算法虽然解决了ID3的一些缺陷,但是其本身也有一些不足:

(1)C4.5生成的是多叉树,一个父节点可以有多个子节点。计算的时候,运算效率没有二叉树高;

(2)C4.5使用熵模型,里面有大量的对数运算。如果是连续值的属性,还涉及到排序运算,运算量很大。

四、CART(classification and rregression tree)

CART既可以处理分类问题,有可能处理回归问题。对回归树用平方误差最小化准则,对分类树用基尼指数最小化准则,进行特征选择,生成二叉树。

4.1 回归树的生成

每个叶子节点都对应一个样本的小区域,对应的y值就是这些样本的目标值的均值。在预测阶段,一个样本落到一个叶子节点之后,该区域的目标值的均值就是该样本的预测值。

4.2 分类树的生成

分类树用基尼指数选择最优特征,同时决定该特征的最优二值切分点。

因此我们每次都选GINi(D,A)最小的特征A作为划分属性。

4.3 CART剪枝

CART剪枝算法从"完全生长"的决策树的底端剪去一些子树,使决策树变小(模型变简单),从而能够对未知数据有更准确的预测。CART剪枝算法由两步组成:首先从生成算法产生的决策树 �0 底端开始不断剪枝,直到�0的根节点,形成一个子树序列 {�0,�1,...,��} ;然后通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择最优子树。

缺失值的处理参考下面的文章:

马东什么:决策树 ID3 C4.5 cart 总结45 赞同 · 16 评论文章正在上传…重新上传取消

马东什么:ID3、c4.5、cart、rf到底是如何处理缺失值的?32 赞同 · 7 评论文章

最后说明下基尼指数、熵、分类误差率三者之间的关系

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/3023.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32外设系列—DHT11

文章标题 一、DHT11简介二、数据手册分析2.1 接口说明2.2 串行通信说明2.2.1 单总线通信2.2.2 单总线传输数据位定义2.2.3 时序图 三、DHT11程序设计3.1 初始化GPIO3.2 发送起始信号3.3 接收一个字节数据3.4 接收温湿度信息并校准 四、总结 一、DHT11简介 DHT11是一款常用的数…

【新星计划·2023】Linux内核、发行版讲解,它们有什么区别?

作者:Insist-- 个人主页:insist--个人主页 作者会持续更新网络知识和python基础知识,期待你的关注 目录 一、Linux内核版 二、Linux发行版 1、Debian 2、Slackware 3、Red Hat 4、Gentoo 三、内核版和发行版的区别 1、内核版 2、发行…

BUUCTF 还原大师 1

题目描述: 我们得到了一串神秘字符串:TASC?O3RJMV?WDJKX?ZM,问号部分是未知大写字母,为了确定这个神秘字符串,我们通过了其他途径获得了这个字串的32位MD5码。但是我们获得它的32位MD5码也是残缺不全,E903???4D…

计算机启动

按下主机上的 power 键后,第一个运行的软件是 BIOS,BIOS 全称叫 Base Input & Output System,即基本输入输出系统。 (8086的1MB内存) 地址 0~0x9FFFF 处是 DRAM,顶部的 0xF0000~0xFFFFF&am…

AR急诊急救大平台远程专家会诊方案

随着AR技术的完善,在医院急救中,需要及时把各方面专家汇在一起会诊,在AR这方面有数据采集清晰,资料呈现方便便捷,针对客户需要,我们对业务需求分析,比较市面多种产品,把会议&#xf…

【OpenCV DNN】Flask 视频监控目标检测教程 10

欢迎关注『OpenCV DNN Youcans』系列,持续更新中 【OpenCV DNN】Flask 视频监控目标检测教程 10 3.10 OpenCV DNNFlask实时监控目标检测1、加载MobileNet SSD模型2、导入分类名称文件3、处理视频帧进行目标检测4、新建一个Flask项目5、Python 程序文件6、视频流的网…

如何使用KoodousFinder搜索和分析Android应用程序中的安全威胁

关于KoodousFinder KoodousFinder是一款功能强大的Android应用程序安全工具,在该工具的帮助下,广大研究人员可以轻松对目标Android应用程序执行安全研究和分析任务,并寻找出目标应用程序中潜在的安全威胁和安全漏洞。 账号和API密钥 在使用该工具之前,我们首选需要访问该…

np.averag的运算规则

今天写代码的时候,计算加权平均,一直没有搞懂np.average是怎么运算的,做个笔记记录一下: 创建一个(3,4,5)维度的np数组,然后在创建一个[1,0.5,1]的权重数组,计算他们的加权平均&…

6月人工智能论文推荐

Prompt Space Optimizing Few-shot Reasoning Success with Large Language Models https://arxiv.org/abs/2306.03799 Prompt engineering 是通过提供明确和具体的指令来增强大型语言模型(llm)能力的基本技术。它使LLM能够在各种任务中脱颖而出,例如算术推理、问…

RTMPose

RTMPose 1. 人体姿态估计简介2. RTMPose2.1 网络结构2.2 基于SimCC的优化路线2.2.1 SimCC:2.2.2 RTMPose 1. 人体姿态估计简介 多人姿态估计框架包括5个方面: paradigm:范式 top-down: 用于人数不多于6人的场景使用现成的检测器提…

Android Studio 配置 DCL 单例脚本

DCL(Double-Checked Locking)单例是一种用于创建单例对象的设计模式。单例模式是一种创建型模式,用于确保一个类只有一个实例,并提供全局访问点。 DCL单例的核心思想是使用双重检查来保证只有在需要时才对实例进行实例化。它结合…

Nginx服务器的六个修改小实验

一、Nginx虚拟主机配置 1.基于域名 (1)为虚拟主机提供域名解析 配置DNS 修改/etc/hosts文件 (2)为虚拟主机准备网页文档 #创建网页目录 mkdir -p /var/www/html/abc mkdir -p /var/www/html/def ​ #编写简易首页html文件 ec…