机器学习(西瓜书)第 4 章 决策树

news2024/11/24 19:29:00

4.1 决策树基本流程

决策树模型

在这里插入图片描述

基本流程

在这里插入图片描述
在第⑵种情形下,我们把当前结点标记为叶结点,并将其类别设定为该结点所含样本最多的类别;在第⑶种情形下,同样把当前结点标记为叶结点,但将其类别设定为其父结点所含样本最多的类别.注意这两种情形的处理实质不同:情形⑵是在利用当前结点的后验分布,而情形⑶则是把父结点的样本分布作为当前结点的先验分布.

基本算法

在这里插入图片描述
由算法4 .2可看出,决策树学习的关键是第8 行,即如何选择最优划分属性.一般而言,随着划分过程不断进行,我们希望决策树的分支结点所包含的样本尽可能属于同一类别,即结点的“纯度”(purity)越来越高.

4.2 信息增益划分

信息增益

信息论中最重要的理论——熵

信息熵度量一个集合的纯度

自信息:对于随机变量大X,它每个取值x都有它的概率p(x)
信息熵是自信息的期望
在这里插入图片描述

从公式可以看出,信息熵最小,纯度最高的情况:有一个所占比例是1,其他所占比例都是0,此时信息熵为0

当X的各个取值的概率均等时(样本中每一个的概率均等时),信息熵最大(也就是最不确定),纯度最低

为什么要使用信息熵来算?
——
在这里插入图片描述

信息增益:在已知属性(特征)a的取值后y的不确定性减少的量,也即纯度的提升

计算出D^v的信息熵,再考虑到不同的分支结点所包含的样本数不同,给分支结点赋予权重|D ^v|/|D|,即样本数越多的分支结点的影响越大,于是可计算出用属性a对样本集D 进行划分所获得的“信息增益”

ID3决策树:以信息增益为准则来选择划分属性的决策树
在这里插入图片描述

可以用信息增益的方式来度量用这种方式划分的价值

信息增益 的定义:划分前的信息熵 - 划分后的信息熵

最优化的属性:要让信息增益最大,即每一步划分后的结果只要最少的信息。尽可能的干净

一个例子

在这里插入图片描述
首先求出未划分前,当前样本集合(根节点)的信息熵

在这里插入图片描述

如果以属性“色泽”划分,对于D1(色泽=青绿),3条正类,3条负类,因此信息熵公式如上
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.3 其他属性划分准则

信息增益准则对可取值数目较多的属性有所偏好,即偏好了分枝多的属性(分到每个分枝上的数目就会越少)

例如若把“编号””也作为一个候选划分属性,则根据式(4.2)可计算出它的信息增益为0.998,远大于其他候选划分属性.这很容易理解:“编号”将产生17个分支,每个分支结点仅包含一个样本,这些分支结点的纯度已达最大.然而,这样的决策树显然不具有泛化能力,无法对新样本进行有效预测.

基于ID3,C4.5现在的改进:不再以 信息增益 作为划分的准则,而是使用 增益率

增益率

在这里插入图片描述

分母IV是分支越少越好,而分子是信息增益越大越好

那么两者折中的点在哪里呢?没有一个绝对正确的权衡,无法找到一个完美的决策树

增益率准则对可取值数目较少的属性有所偏好,因此,通常在C4.5中的做法——启发式:先把信息增益做一个标准,把高于平均水平的找出来,再其中挑增益率最大的;而不是直接由增益率排序而来,因为增益率对可能取值数目较少的属性有所偏好

规范化:把原先不可比较的东西,变得可以比较了
归一化:是规范化的特殊形式,是针对数值属性的。规范化至0与1之间

基尼指数

基尼值 和 基尼指数
在这里插入图片描述
在这里插入图片描述

基尼值越小,碰到异类的概率就越小,纯度自然就越高

按属性划分后的基尼值,我们称为 基尼指数

CART决策树:选择基尼指数最小的属性作为最优划分属性在这里插入图片描述
实际操作时,CART决策树(二叉树)和前面按信息增益的决策树(不一定是二叉树)在具体选划分点时有所区别,和前面的基尼公式也有所不同:

在这里插入图片描述

划分选择 vs 剪枝

在这里插入图片描述

4.4 决策树的剪枝

为何剪枝对决策树泛化性能影响更显著?
——剪枝决策树对付“过拟合”的主要手段

在这里插入图片描述

4.5 预剪枝与后剪枝

现在我们假定使用“留出法”来在剪枝过程中评估剪枝前后决策树的优劣,即预留一部分数据用作“验证集”以进行性能评估

数据集

在这里插入图片描述

预剪枝

预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这就是预剪枝最终得到的决策树

在这里插入图片描述
在用属性“脐部”划分之后,图4.6中的结点2、3、4分别包含编号为{1,2,3,14}、{6,7,15,17}、{10,16}的训练样例,因此这3 个结点分别被标记为叶结点“好瓜”、 “好瓜”、 “坏瓜”.此时,验证集中编号为(4,5,8,11,12)的样例被分类正确,验证集精度为5/7 x 100% = 71.4% > 42.9%.于是,用 “脐部”进行划分得以确定.

对比图4.6和图4.5可看出,预剪枝使得决策树的很多分支都没有“展开”,这不仅降低了过拟合的风险,还显著减少了决策树的训练时间开销和测试时间开销.但另一方面,有些分支的当前划分虽不能提升泛化性能、甚至可
能导致泛化性能暂时下降,但在其基础上进行的后续划分却有可能导致性能显
著提高
;预剪枝基于“贪心”本质禁止这些分支展开,给预剪枝决策树带来了
欠拟合的风险
.

后剪枝

后剪枝则是先从训练集生成一棵完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点.

后剪枝:先生成一颗完整的决策树,然后看中间做属性决策的结点能否用叶节点来替换它
注意是从最深的开始考虑,因为越深的越可能是受到overfitting的影响的结果
在这里插入图片描述

在这里插入图片描述
——如果剪枝了:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
对比图4.7和图4.6可看出,后剪枝决策树通常比预剪枝决策树保留了更多的分支.一般情形下,后剪枝决策树的欠拟合风险很小,泛化性能往往优于预
剪枝决策树
.但后剪枝过程是在生成完全决策树之后进行的,并且要自底向上
地对树中的所有非叶结点进行逐一考察,因此其训练时间开销比未剪枝决策树
和预剪枝决策树都要大得多
.

预剪枝 vs 后剪枝

在这里插入图片描述

4.6 连续值的处理

到目前为止我们仅讨论了基于离散属性来生成决策树.现实学习任务中常会遇到连续属性,有必要讨论如何在决策树学习中使用连续属性.由于连续属性的可取值数目不再有限,因此,不能直接根据连续属性的可取值来对结点进行划分.此时,连续属性离散化技术可派上用场.最简单的策略是采用二分法(bi-partition)对连续属性进行处理,这正是C4.5决策树算法中采用的机制[Quinlan, 1993].

给定样本集D 和连续属性a.假定a在D上出现了 n个不同的取值,将这些值从小到大进行排序
显然,对相邻的属性取值a_i与a_i+1 来说,t在区间[a^i,a ^i+1)中取任意值所产生的划分结果相同.因此,对连续属性a,我们可考察包含n- 1个元素的候选划分点集合

即把区间[a^i,a ^i+1)的中位点(a ^i,a ^i+1)/2作为候选划分点.然后,我们就可像离散属性值一样来考察这些划分点,选取最优的划分点进行样本集合的划分.例如,
可对式(4.2)(信息增益)稍加改造:
在这里插入图片描述

4.7 缺失值的处理

缺失值

在这里插入图片描述
其中“权重划分”指的是:给定划分属性,若样本在该属性上的值缺失,会按权重同时进入所有分支

一个例子

在这里插入图片描述
在这里插入图片描述

区别变化是在计算总的信息增益时前面乘上 无缺失值样例占比

在这里插入图片描述
选其中最大的信息增益:
在这里插入图片描述

把有值的样本进入各个属性的划分结果当作了没有值的样本进入的先验

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VMware时提示系统尚未修改安装失败

安装VMware安装失败,提示系统尚未修改 有以下解决方案: 1.操作系统不兼容 2.安装文件损坏 3.安装程序错误 4.硬件问题 解决:由于重装系统前,安装过VAware,所以应该操作系统,硬件没有问题。下载一个软件v…

多线程篇(阻塞队列- ArrayBlockingQueue)(持续更新迭代)

目录 一、源码分析 1. 先看个关系图 2. 构造方法 3. 核心属性 4. 核心功能 入队(放入数据) 出队(取出数据) 5. 总结 一、源码分析 1. 先看个关系图 PS:先看个关系图 ArrayBlockingQueue是最典型的有界阻塞队…

CSDN文章无水印转成PDF

文章目录 一、打开检查二、点击进入控制台三、在控制台中输入代码 一、打开检查 f11或者右键打开检查 二、点击进入控制台 三、在控制台中输入代码 (function(){ use strict;var articleBox $("div.article_content");articleBox.removeAttr("style&quo…

sping boot 基于 RESTful 风格,模拟增删改查操作

RESTful -> 增:post 删:delete 改: put 查: get RESTful 资源路径,一般以 s 复数结尾 以下是代码示例: package com.example.springboot.controller;import org.springframework.web.bind.annotation.*;RestControll…

EmguCV学习笔记 C# 9.3 移动检测类

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

汽车网络安全的未来:将车辆视为端点

汽车行业面临着许多与其他行业的成功企业相同的网络安全风险和威胁,但它也在应对一些独特的风险和威胁。 Nuspire 的首席威胁分析师 Josh Smith(一家在汽车领域有着深厚根基并保护通用汽车和斯巴鲁等客户的托管安全服务提供商)谈到了当前的风…

【AcWing】852. spfa判断负环

#include<iostream> #include<algorithm> #include<cstring> #include<queue> using namespace std;const int N 1e510;int n,m; int h[N],w[N],e[N],ne[N],idx; int dist[N],cnt[N];//cnt存最短路径的边数 bool st[N];void add(int a,int b,int c){e[…

一文讲懂扩散模型

一文讲懂扩散模型 扩散模型&#xff08;Diffusion Models, DM&#xff09;是近年来在计算机视觉、自然语言处理等领域取得显著进展的一种生成模型。其思想根源可以追溯到非平衡热力学&#xff0c;通过模拟数据的扩散和去噪过程来生成新的样本。以下将详细阐述扩散模型的基本原理…

发动机制造5G智能工厂工业物联数字孪生平台,推进制造业数字化转型

发动机制造作为高端制造业的核心领域之一&#xff0c;正积极探索并引领这一变革。其中&#xff0c;发动机制造5G智能工厂物联数字孪生平台的兴起&#xff0c;不仅为发动机制造业注入了新的活力&#xff0c;也为整个制造业的数字化转型树立了新的标杆。发动机制造5G智能工厂物联…

Linux Centos 7网络配置

本步骤基于Centos 7&#xff0c;使用的虚拟机是VMware Workstation Pro&#xff0c;最终可实现虚拟机与外网互通。如为其他发行版本的linux&#xff0c;可能会有差异。 1、检查外网访问状态 ping www.baidu.com 2、查看网卡配置信息 ip addr 3、配置网卡 cd /etc/sysconfig…

致远个性化之--发起流程页面,去掉【查看流程】按钮

需求 近期在做的项目中&#xff0c;遇到一个需求&#xff0c;想把发起流程页面中的【查看流程】按钮去掉&#xff0c;只让员工预测流程&#xff0c;知道自己的事项流程走向&#xff0c;不让看全局流程图。包含PC端和移动端&#xff0c;以及微协同端。 如下图效果示例&#xff1…

SVN下载安装使用方法

目录 &#x1f315;SVN是什么&#xff1f;&#x1f319;SVN跟Git比的优势&#x1f319;SVN的用处 &#x1f315;下载安装使用方法 &#x1f315;&#x1f319;⭐ &#x1f315;SVN是什么&#xff1f; 代码版本管理工具 它能记住你每次的修改 查看所有的修改记录 恢复到任何历…

如何读.Net Framework 的源码?

.Net Framework的源码可以从这里下载 Download 也可以在线直接浏览 https://referencesource.microsoft.com 这里我们以System.IO.Directory.CreateDirectory函数为例&#xff0c;来说明如何去读.Net Framework的源码。 在ReferenceSource在线界面的搜索框里输入Directory.Cr…

C语言深度剖析--不定期更新的第四弹

哈哈哈哈哈哈&#xff0c;今天一天两更&#xff01; void关键字 void关键字不能用来定义变量&#xff0c;原因是void本身就被编译器解释为空类型&#xff0c;编译器强制地不允许定义变量 定义变量的本质是&#xff1a;开辟空间 而void 作为空类型&#xff0c;理论上不应该开…

NLP自然语言处理学习过程中知识点总结

OOV是什么 OOV 是 “Out Of Vocabulary”的缩写&#xff0c;意思是 “超出词汇表” 或 “未登录词汇”。 在自然语言处理 (NLP) 中&#xff0c;OOV 指的是模型训练时没有见过的词语或词汇。通常&#xff0c;语言模型会为其训练数据中未出现的词汇分配一个特殊的标记。OOV 词汇…

【国赛急救包】数模国赛查重规则及降重技巧

国赛已经快接近尾声了&#xff0c;各位宝宝论文写得怎么样啦~ 今天为大家分享关于国赛查重的一些规则&#xff0c;以及降重技巧&#xff01;快收藏起来吧~ 1. 国赛查重要求及如何查重 • 数学建模国赛的查重除了知网数据库以外&#xff0c;更重要的是自建库的查重比对&#x…

14.1 为什么说k8s中监控更复杂了

本节重点介绍 : k8s中监控变得复杂了&#xff0c;挑战如下 挑战1: 监控的目标种类多挑战2: 监控的目标数量多挑战3: 对象的变更和扩缩特别频繁挑战4: 监控对象访问权限问题 k8s架构图 k8s中监控变得复杂了&#xff0c;挑战如下 挑战1: 监控的目标种类多 对象举例 podnodese…

【kubernetes】配置管理中心Configmap运用

一&#xff0c;介绍 Configmap&#xff08;简写 cm&#xff09;是k8s中的资源对象&#xff0c;用于保存非机密性的配置的&#xff0c;数据可以用key/value键值对的形式保存&#xff0c;也可通过文件的形式保存。 【局限性】&#xff1a;在ConfigMap不是用来保存大量数据的&am…

Windows下Python和PyCharm的应用(二)__快捷键方式的设定

前言 程序写久了&#xff0c;难免会形成自己的编程习惯。比如对某一套快捷键的使用&#xff0c;已经形成了肌肉记忆。 为了方便快捷键的使用&#xff0c;可以在PyCharm中设置自己喜欢的快捷键。 我比较习惯于微软Visual Studio的快捷键设置。&#xff08;因为早些年VC开发用的…

模具要不要建设3D打印中心

随着3D打印技术的日益成熟与广泛应用&#xff0c;模具企业迎来了自建3D打印中心的热潮。这一举措不仅为企业带来了前所未有的发展机遇&#xff0c;同时也伴随着一系列需要克服的挑战&#xff0c;如何看待企业引进增材制造&#xff0c;小编为您全面分析。 机遇篇&#xff1a; 加…