机器学习之决策树【西瓜书】

news2025/1/16 19:51:36

当一个有经验的老农看一个瓜是不是好瓜时,他可能会先看下瓜的颜色,一看是青绿的,心想有可能是好瓜;接着他又看了下根蒂,发现是蜷缩着的,老农微微点头,寻思着五成以上是好瓜;最后他又敲了下瓜,一听发出浑浊的响声,基本确定这个瓜是个好瓜!

决策树便是模拟“老农判瓜”的过程,通过对属性的层层筛选从而得到当前样本的分类。

可是,问题在于,老农判瓜依据的是其多年判瓜经验,计算机如何获得这些“识瓜经验”呢?又如何知道哪些属性是更为重要的属性呢?这便是实现决策树需要解决的重要问题。

信息熵

信息熵是度量样本集合纯度最常用的一种指标,信息熵 E n t ( D ) Ent(D) Ent(D) 的值越小,则样本 D D D 的纯度越高【即越有序,比如 D D D 中全是好瓜,则其信息熵就会很小】

image-20221119214440163

信息增益

假定离散属性 a a a V V V个可能的取值 { a 1 , a 2 , . . , a V } \{a^1,a^2,..,a^V\} {a1,a2,..,aV} 【如色泽可以为青绿,乌黑,浅白】,若使用 a a a 来对样本集合 D D D 进行划分,则会产生 V V V 个分支结点【如色泽会分为三部分】,其中第 v v v 个分支节点包含了 D D D 中所有在属性 a a a 上取值为 a v a^v av 的样本,记为 D v D^v Dv 【如色泽乌黑的样本】。

我们可以根接新的样本集计算出新的信息熵【注意:信息熵的 k k k 对应的是分类,即好瓜与坏瓜】,再考虑到不同的分支结点所包含样本数不同,给分支结点赋予权重 ∣ D v ∣ ∣ D ∣ \dfrac{\vert D^v\vert}{\vert D\vert} DDv 【如色泽乌黑的瓜在所有瓜中的比重】,即样本数越多的分支节点造成的影响越大。

由此可以计算出用属性 a a a 对样本集 D D D 进行划分所获得的信息增益

G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) Gain(D,a)=Ent(D)-\sum_{v=1}^{V}\dfrac{\vert D^v \vert}{\vert D \vert}Ent(D^v)\\ Gain(D,a)=Ent(D)v=1VDDvEnt(Dv)

一般而言,信息增益越大,则意味着使用属性 a a a 来进行划分所获得的纯度提升越大,因此我们可以使用信息增益来进行决策树的划分属性选择,著名的 I D 3 ID3 ID3 算法就是以信息增益为准则来选择划分属性

image-20221118170405477

西瓜书 P 75 P75 P75 页中通过信息增益选择了纹理作为第一个节点【西瓜书电子版百度云如下👇】

链接:https://pan.baidu.com/s/106WHjk_E5WhmCxTqPj67ng 提取码:zhia

image-20221118193331044

在选择了纹理属性后,接下来在纹理清晰这一分支中应该选择哪一属性继续划分,即计算各个属性在此分支的信息增益,此处以色泽属性为例,演示如何得到西瓜书 P 77 P77 P77 G a i n ( D 1 , 色 泽 ) = 0.043 Gain(D^1,色泽)=0.043 Gain(D1,)=0.043,为避免上标下标混淆,下边 D 1 D_1 D1 代表纹理为清晰的样本集, D v D^{v} Dv 代表在纹理清晰的情况下,色泽属性为 v v v 的样本集
image-20221119214528170

增益率

实际上,信息增益准则对可取值数目较多的属性有所偏好,为减少这种偏好可能带来的不利影响,,著名的 C 4.5 C4.5 C4.5 决策树算法不直接使用信息增益,而是使用信息增益率

G a i n _ r a t i o ( D , a ) = G a i n ( D , a ) I V ( a ) I V ( a ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ l o g 2 ∣ D v ∣ ∣ D ∣ Gain\_ratio(D,a)=\dfrac{Gain(D,a)}{IV(a)}\\ IV(a)=-\sum_{v=1}^{V}\dfrac{\vert D^v \vert}{\vert D\vert}log_2\dfrac{\vert D^v\vert}{\vert D\vert}\\\\ Gain_ratio(D,a)=IV(a)Gain(D,a)IV(a)=v=1VDDvlog2DDv

以选择根节点为例,计算属性色泽的信息增益率
image-20221119214633944
需要注意的是,增益率准则对可取值数目较少的属性有所偏好,因此 C 4.5 C4.5 C4.5 算法并不是直接选择增益率最大的候选划分属性,而是使用了一个启发式:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择信息增益率最高的。

基尼指数

C A R T CART CART 决策树【二叉树形式,如对色泽只有两个属性,青绿,非青绿】使用基尼指数来选择划分属性,数据集 D D D 的纯度可用基尼值来度量

基尼值反映了从数据集中随机抽取两个样本,其类别标记不一致的概率【即预测错误的概率】,因此基尼值越小,数据集 D D D 的纯度越高

image-20221119214704290

由此我们可以得到基尼指数的定义
在这里插入图片描述

我们再次使用色泽属性进行举例,计算此时的基尼指数
在这里插入图片描述

剪枝

剪枝是决策树学习算法对付“过拟合”的主要手段。在决策树学习中,为了尽可能正确分类训练样本,结点划分过程将不断重复,有时会造成决策树分支过多,这时就可能因训练样本学得“太好”了,以致于把训练集自身得一些特点当成所有数据都具有得一般兴致而导致过拟合。因此,可通过主动去掉一些分支来降低过拟合得风险。

image-20221111114625844

根据信息增益准则生成的决策树

image-20221119193717170

预剪枝

预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点得划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点

西瓜书中对于脐部的计算已有详细步骤,因此不多赘述。此处对色泽属性是否需要划分进行计算,即计算划分前与划分后的验证集精度【测试集中预测正确的占比】

image-20221119193817688

在这里插入图片描述

后剪枝

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

计算方法与预剪枝类似,西瓜书上也有详细步骤,不做过多赘述

image-20221119195528337

剪枝总结

  • 预剪枝和后剪枝唯一的区别就是前者在决策树生成过程中决定是否剪枝,后者在决策树构造完成后再次遍历各属性结点决定是否剪枝
  • 一般情形下,后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树。但后剪枝过程是在生成完全决策树之后进行的,并且要自底向上地对树中的所有非叶结点进行逐一考察,因此其训练时间开销比未剪枝决策树和预剪枝决策树都要大得多
  • 预剪枝和后剪枝的算法有多种,这里只是展示了最简单的两种,不过基本思想都是一致的,即通过对比剪枝前后的某个指标来决定是否进行剪枝

连续值

由于连续属性的可取值数目不再有限,因此,不能直接根据连续属性的可取值来对结点进行划分。此时,连续属性离散化技术可派上用场。最简单的策略是采用二分法对连续属性进行处理,这正是 C 4.5 C4.5 C4.5 决策树算法中采用的机制

image-20221111114740296

比如我们现在相对密度属性进行划分,则操作如下
在这里插入图片描述

接着以密度划分点 0.381 0.381 0.381 为例计算其对应的信息增益
在这里插入图片描述

假设在密度所有划分点中, 0.381 0.381 0.381 对应的信息增益最大,则此信息增益就当作密度属性的信息增益,代表密度属性在决策树构建中参与竞选【 密 度 ≤ 0.381 密度\le0.381 0.381 为坏瓜是因为在训练集中坏瓜占比大 】

image-20221119205222872

缺失值

现实任务中常会遇到不完整样本,即样本的某些属性值缺失。若将有缺失值的样本全部丢弃,显然是对数据集的浪费,因此,使用有缺失值的训练样例来进行学习十分必要

image-20221119205959373

此时信息增益公式再次进行修改
在这里插入图片描述

由此可以计算出不同属性对应的信息增益,选择对应的属性结点构造决策树,西瓜书中有构造的详细步骤,此处不再赘述

多变量决策树

若我们把每个属性视为坐标空间中的一个坐标轴,则d个属性描述的样本就对应了 d d d 维空间中的一个数据点;对样本分类则意味着在这个坐标空间中寻找不同类样本之间的分类边界。决策树所形成的分类边界有一个明显的特点:轴平行,即它的分类边界由若干个与坐标轴平行的分段组成。

image-20221119213409151 image-20221119213425881 image-20221119213446181

若能使用斜的划分边界,则决策树模型将大为简化。多变量决策树就是能实现这样的“斜划分”甚至更复杂划分的决策树。

以实现斜划分的多变量决策树为例,在此类决策树中,非叶结点不再是仅对某个属性,而是对属性的线性组合进行测试;换言之,每个非叶结点是一个形如 ∑ i = 1 d w i a i = t \sum_{i=1}^{d}w_ia_i=t i=1dwiai=t 的线性分类器,其中 w i w_i wi 是属性 a i a_i ai 的权重, w i w_i wi t t t 可在该结点所含的样本集和属性集上学得。于是,与传统的单变量决策树不同,在多变量决策树的学习过程中,不是为每个非叶结点寻找一个最优划分属性,而是试图建立一个合适的线性分类器,如下👇

image-20221119214046790 image-20221119214059505

此处仅仅是使用简单例子让我们能够更好理解多变量决策树的意思,并不细究这两条边界是如何得到的。

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

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

相关文章

基于51单片机的客车辆超载报警Proteus仿真

资料编号:111 下面是相关功能视频演示: 111-基于51单片机的客车辆超载报警Proteus仿真(源码仿真原理图全套资料)功能如下: 利用单片机设计一个超载检测控制电路。 通过 2 组红外对管(类似电路模拟)检测上车人数和下车…

Flink-水位线的设置以及传递

6.2 水位线 6.2.1 概述 分类 有序流 无序流 判断的时间延迟 延迟时间判定 6.2.2 水位线的设置 分析 DataStream下的assignTimstampsAndWatermarks方法,返回SingleOutputStreamOperator本质还是个算子,传入的参数是WatermarkStrategy的生成策略 但…

C51 - 中断系统

Contents1> 定义2> 作用3> 组成3.1> 中断系统结构3.2> 8个中断源3.3> 中断向量3.4> 中断优先级4> 原理5> 应用1> 定义 中断(interrupt)是指: CPU执行某一程序过程中,由于系统内,或外部某…

【操作文件的系统调用】

目录文件操作系统调用的基本库函数打开文件读取文件写入文件关闭文件应用文件操作代码举例文件操作与进程复制的结合先打开文件再复制进程先进程复制,再进行打开文件缓冲区的知识回顾在上一篇讲述僵尸进程的文章中对文件的系统调用做了一点点的代码讲述,…

day08 微服务保护

1、JMeter压力测试 1.1、安装启动 JMeter 依赖于JDK,所以必须确保当前计算机上已经安装了 JDK,并且配置了环境变量。 Apache Jmeter官网下载,地址:http://jmeter.apache.org/download_jmeter.cgi 解压缩即可使用,目…

【Acwing—单源最短路:建图】

y总说,图论题的难点不在于打板子,而是建图的过程 个人觉得,建图的过程分成以下阶段: 1.确定结点的意义 2.确定边权的意义 结点一般都很显然,但是边权的意义我们一般把它设成对答案(或需要维护的东西&am…

C++入门知识(二)

最近太忙了,发论文写开题,有两周时间没有学习C了,因为都是抽时间来学习,所以本篇博客也是零零散散的,接下来尽量抽时间吧 目录 六、引用 6.1 引用概念 6.2 引用特性 6.3 常引用 6.4 使用场景 6.5 传值、传引用…

并发编程(一)可见性

【并发编程三大特性】: 可见性 有序性 原子性( 较复杂 ) 【线程的可见性】: 【一个例子认识线程的可见性】: import Utils.SleepHelper; import java.io.IOException;public class T01_HelloVolatile {private sta…

Go中的泛型和反射以及序列化

嗨喽,小伙伴们,好几没有更新了,最近在搞一些云原生的东西,docker , k8s 搞得我暂时迷失了方向,不过我举得搞IT吗,就是在不断尝试,搞一下当下最新的技术,不然 … GO中的泛型与继承 搞过java的都知道泛型与继承,在go中也开始搞泛型与继承了(在go1.8之后) 先看代码–>> p…

【记录】PyCharm 安装 preprocess 模块(库)|| 在 PyCharm 中安装 preprocess 失败,故而在 终端 安装

preprocess.py 针对的是处理许多 文件类型。它工作的语言包括:C、Python、 perl、tcl、xml、javascript、css、idl、tex、fortran、php、java、shell 脚本(bash、csh等)和c。预处理可以作为 命令行应用程序和作为python 模块。 目录一、在 Py…

矩阵论复习提纲

矩阵论复习提纲 第一章 矩阵相似变化 1、特征值与特征向量 A ∈ Cnxn 若存在 λ ∈ C 满足 Ax λx 则 λ 为 A 的特征值 可转换为 (λI - A)x 0 特征多项式 :det(λI - A) 特征矩阵: λI - A 2、相似对角化 1. 判断可对角化…

VMware Fusion 13 正式版终于来了

千呼万唤,经历两年之久,VMware终于在Fusion 13正式版中支持了Apple Silicon 版Mac,此次发布的Fusion是Universal版本,也就是一个安装包同时适配Intel Mac及Apple Silicon (M1,M2)Mac。想起我两年…

疑难杂症集合(备忘)

sshd:no hostkeys available 解决过程: #ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key #ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key #/usr/sbin/sshd 如果上述两个文件存在,仍然出现这个错误,那么试试 chmod 600 上述两个文件。之…

01-Python的基本概念

01-Python的基本概念 Python是一种直译式(Interpreted)、面向对象(Object Oriented)的程序语言’它拥有完整的函数库’可以协助轻松地完成许多常见的工作。 所谓的直译式语言是指’直译器(InteIpretor)会将…

诊断故障码(Diagnostic Trouble Code-DTC)

诊断协议那些事儿 诊断协议那些事儿专栏系列文章,本文将由浅入深的介绍DTC(Diagnostic Trouble Code)。 关联文章: $19服务:DTCStatusMask和statusofDTC bit 定义 19服务List 文章目录诊断协议那些事儿DTC(Diagnos…

Python pyenv install 下载安装慢(失败)完美解决

pyenv 下载原理就是将例如 Python-3.10.3.tar.xz 这样的压缩文件下载到本地缓存文件或临时文件,然后解压出来使用。 由于下载速度或者网不行,那么就跳过 pyenv 下载,自己下载,然后放到它的缓存文件,这样不就行了。 1…

3.np.random

1. np.random.seed np.random.seed()函数用于生成指定随机数。 seed()被设置了之后,np.random.random()可以按顺序产生一组固定的数组,如果使用相同的seed()值,则每次生成的随机数都相同。 如果不设置这个值,那么每次生成的随机数…

[附源码]计算机毕业设计JAVA基于Java的护肤品网站

[附源码]计算机毕业设计JAVA基于Java的护肤品网站 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM my…

【MySQL进阶】表的增删改查操作(CRUD)+(SQL执行顺序)

1. 新增(复制数据)2. 查询 - 进阶2.1 聚合查询2.2 group by2.3 having2.4 联合查询2.4.1 内连接2.4.2 外连接2.4.3 自连接2.4.4 子查询2.4.5 合并查询3 SQL的执行顺序(where...)1. 新增(复制数据) 语法 -- 字段名 列名 -- 将表2的数据复制到表1中 -- 两张表的结构要一样 i…

前端知识点

1.HTML 2.CSS 3.js 4.VUE 5.vUE的基本指令 6.VUE案例 7.ELEMENT HTML 设置图片 <img src"图片地址">让图片居中显示<center><img src"图片地址" width"270" height"900"></center>有序列表 <!--有序 ty…