《机器学习》 学习记录 - 第四章

news/2024/12/24 11:44:37/文章来源:https://www.cnblogs.com/xsRecord/p/18524269

第4章 决策树

4.1 基本流程

决策树(decision tree)是一类常见的机器学习方法,也叫“判定树”。顾名思义,决策树是基于树的结构进行决策的。

一般的,一棵决策树包含一个根结点、若干个内部结点和若干个叶结点:

  • 叶结点对应于决策结果,其他每个结点则对应于一个属性测试;
  • 每个结点包含的样本集合根据属性测试的结果被划分到子结点中;
  • 根结点包含样本全集;
  • 从根结点到每个叶结点的路径对应了一个判定测试序列。

决策树学习的目的是为了产生一棵泛化能力强,即处理未见示例能力强的决策树,其基本流程遵循简单且直观的“分而治之”(divide-and-conquer)策略。如下图所示:

pArdlDK.png

可以看出,决策树的生成是一个递归过程。

在决策树基本算法中,有以下三种情形会导致递归返回

  • (1)当前结点包含的样本全属于同一类别,无需划分;
  • (2)当前属性集为空,或是所有样本在所有属性上取值相同,无法划分;
    在该情形下,我们把当前结点标记为叶结点,并将其类别设定为该结点所含样本最多的类别(利用当前节点的后验分布);
  • (3)当前结点包含的样本集合为空,不能划分。
    在该情形下,我们把当前结点标记为叶结点,并将其类别设定为其父结点所含样本最多的类别(把父结点的样本分布作为当前结点的先验分布)。

4.2 划分选择

随着划分过程不断进行,我们希望决策树的分支结点所包含的样本尽可能属于同一类别,即结点的“纯度”越来越高。

4.2.1 信息增益

信息熵”(information entropy)是度量样本集合纯度最常用的一种指标。

假定当前样本集合\(D\)中第\(k\)类样本所占比例为\(p_{k}(k=1,2,...,|γ|)\),则\(D\)的信息熵定义为

\(Ent(D)=-\sum^{|γ|}_{k=1}p_{k}log_{2}p_{k}\). (式4.1)

\(Ent(D)\)的值越小,则\(D\)的纯度越高。

假定离散属性\(a\)\(V\)个可能得取值\(\{a^{1},a^{2},...,a^{V}\}\),若使用\(a\)来对样本集\(D\)进行划分,则会产生\(V\)个分支结点,其中第\(v\)个分支结点包含了\(D\)中所有在属性\(a\)上取值为\(a^{v}\)的样本,记为\(D^{v}\)

我们可根据式(4.1)计算出\(D^{v}\)的信息熵,由于不同的分支结点所包含的样本数不同,给分支结点赋予权重\(\frac{|D^{v}|}{|D|}\),即样本数越多的分支结点的影响越大,于是可计算出用属性\(a\)对样本集\(D\)进行划分所获得的“信息增益”(information gain)

\(Gain(D,a)=Ent(D)-\sum^{V}_{v=1}\frac{|D^{v}|}{|D|}Ent(D^{v})\) (式4.2)

一般地,信息增益越大,意味着使用属性\(a\)来进行划分所获得的“纯度提升”越大。

我们可以用信息增益来进行决策树的划分属性选择。ID3决策树学习算法就是以信息增益为准则来选择划分属性。(其中ID是Iterative Dichotomiser,迭代二分器的简称)。

4.2.2 增益率

实际上,信息增益准则对可取值数目较多的属性有所偏好,为减少这种偏好可能带来的不利影响,C4.5决策树算法不直接使用信息增益,而是使用“增益率”(gain ratio)来选择最优划分属性。

增益率定义为

\(Gain.ratio(D,a)=\frac{Gain(D,a)}{IV(a)}\) (式4.3)

其中

\(IV(a)=-\sum^{V}_{v=1}\frac{|D^{v}|}{|D|}log_{2}\frac{|D^{v}|}{|D|}\) (式4.4)

称为属性\(a\)的“固有值”(intrinsic value)。属性\(a\)的可能取值数目越多(即\(V\)越大),则\(IV(a)\)的值通常会越大。

需要注意,增益率准则对可取值数目较少的属性有所偏好。故C4.5算法不是直接算则增益率最大的候选划分属性,而是使用了一个启发式:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。

4.2.3 基尼指数

CART决策树(Classification and Regression Tree)使用“基尼指数”(Gini index)来选择划分属性。数据集\(D\)的纯度可以用基尼值来度量:

\(Gini(D)=\sum^{|γ|}_{k=1}\sum_{k^{'} \neq k}p_{k}p_{k^{'}}\\=1-\sum^{|γ|}_{k=1}p_{k}^{2}\) (式4.5)

\(Gini(D)\)反映了从数据集\(D\)中随机抽取两个样本,其类别标记不一致的概率。\(Gini(D)\)越小,则数据集\(D\)的纯度越高。

属性\(a\)的基尼指数定义为

\(Gini.index(D,a)=\sum^{V}_{v=1}\frac{|D^{v}|}{|D|}Gini(D^{v})\) (式4.6)

我们在候选属性集合\(A\)中,选择那个使得划分后基尼指数最小的属性作为最优划分属性,即\(a_{*}=argmin_{a \in A} Gini.index(D,a)\)

4.3 剪枝处理

剪枝(pruning)是决策树学习算法对付“过拟合”的主要手段。

决策树剪枝的基本策略有“预剪枝”(prepruning)和“后剪枝”(post-pruning)。

  • 预剪枝:在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点。
  • 后剪枝:先从训练集生成一棵完整的决策树,随后自底向上地对非叶结点进行考察。若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点。

而判断决策树泛化性能是否提升,则可以使用2.2节所介绍的性能评估方法。

4.3.1 预剪枝

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

4.3.2 后剪枝

  • 后剪枝决策树通常比预剪枝决策树保留了更多的分支。
  • 一般后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树。
  • 但后剪枝过程实在生成完全决策树之后进行的,并且要自底向上地对树中的所有非叶结点进行逐一考察,因此其训练时间开销比未剪枝决策树和预剪枝决策树都要大得多

4.4 连续与缺失值

4.4.1 连续值处理

由于连续属性的可取值数目不再有限,因此不能直接根据连续属性的可取值来对结点进行划分。我们可以采用连续属性离散化技术。最简单的策略是采用二分法(bi-partition)对连续属性进行处理。(C4.5决策树算法采用了此机制)

给定样本集\(D\)和连续属性\(a\),假定\(a\)\(D\)上出现了\(n\)个不同的取值,将这些值从小到大进行排序,记为\(\{a^{1},a^{2},...,a^{n}\}\).基于划分点\(t\)可将\(D\)分为子集\(D_{t}^{-}\)\(D_{t}^{+}\),其中\(D_{t}^{-}\)包含那些在属性\(a\)上取值不大于\(t\)的样本,而\(D_{t}^{+}\)则包含那些在属性\(a\)上取值大于\(t\)的样本.

对相邻的属性取值\(a^{i}\)\(a^{i+1}\)来说,\(t\)在区间\([a^{i},a^{i+1})\)中取任意值所产生的划分结果相同。因此,对连续属性\(a\),可考察包含\(n-1\)个元素的候选划分点集合,即把区间\([a^{i},a^{i+1})\)的中位点\(\frac{a^{i}+a^{i+1}}{2}\)作为候选划分点,随后我们即可像离散属性值一样来考察这些划分点,选取最优的划分点进行样本集合的划分。

若当前结点划分属性为连续属性,该属性还可作为其后代结点的划分属性。如在父结点上使用了“密度\(\leq 0.381\)”,不会禁止在子结点上使用“密度\(\leq 0.294\)”。

4.4.2 缺失值处理

现实任务重常会遇到不完整样本,即样本的某些属性值缺失。如果简单地放弃不完整样本,仅使用无缺失值的样本来进行学习,是对数据信息极大的浪费。

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

给定训练集\(D\)和属性\(a\),令\(\tilde{D}\)表示\(D\)中在属性\(a\)上没有缺失值的样本子集。

对问题(1):

此时我们仅可根据\(\tilde{D}\)来判断属性\(a\)的优劣。

假定属性\(a\)上有\(V\)个可取值\(\{a^{1},a^{2},...,a^{V}\}\),令\(\tilde{D}^{v}\)表示\(\tilde{D}\)中在属性\(a\)上取值为\(a^{v}\)的样本子集,\(\tilde{D}_{k}\)表示\(\tilde{D}\)中属于第\(k\)类(\(k=1,2,...,|γ|\))的样本子集,则显然有\(\tilde{D}=\cup_{k=1}^{|γ|}\tilde{D}_{k},\tilde{D}=\cup_{v=1}^{V}\tilde{D}^{v}\)

假定我们为每个样本\(x\)赋予一个权重\(w_{x}\),并定义

\(\rho = \frac{\sum_{x \in \tilde{D}}w_{x}}{\sum_{x \in {D}}w_{x}}\), (式4.9)
\(\tilde{p_{k}} = \frac{\sum_{x \in \tilde{D}_{k}}w_{x}}{\sum_{x \in \tilde{D}}w_{x}}(1 \leq k \leq |γ|)\), (式4.10)
\(\tilde{r_{v}} = \frac{\sum_{x \in \tilde{D}^{v}}w_{x}}{\sum_{x \in \tilde{D}}w_{x}}(1 \leq v \leq V)\), (式4.11)

对属性\(a\),\(\rho\)表示无缺失值样本所占的比例,\(\tilde{p_{k}}\)表示无缺失值样本中第\(k\)类所占的比例,\(\tilde{r_{v}}\)表示无缺失值样本中在属性\(a\)上取值\(a^{v}\)的样本所占的比例。显然可以看出,\(\sum^{|γ|}_{k=1}\tilde{p_{k}}=1,\sum^{V}_{v=1}\tilde{r_{v}}=1\).

基于上述定义,可将信息增益的计算式(4.2)推广为:

\(Gain(D,a)=\rho \times Gain(\tilde{D},a)\\=\rho \times (Ent(\tilde{D}-\sum^{V}_{v=1}\tilde{r_{v}}Ent(\tilde{D}^{v})))\), (式4.12)

其中由式(4.1),有

\(Ent(\tilde{D})=-\sum^{|γ|}_{k=1}\tilde{p_{k}}log_{2}\tilde{p_{k}}\)

对问题(2):

  • 若样本\(x\)在划分属性\(a\)上的取值已知,则将\(x\)划入与其取值对应的子结点,且样本权值在子结点中保持为\(w_{x}\).
  • 若样本\(x\)在划分属性\(a\)上的取值未知,则将\(x\)同时划入所有子结点,且样本权值在与属性值\(a^{v}\)对应的子结点中调整为\(\tilde{r_{v}}\cdot w_{x}\)。直观来看这就是让同一个样本以不同的概率划入到不同的子结点中去

4.5 多变量决策树

若我们把每个属性视为坐标空间中的一个坐标轴,则\(d\)个属性描述的样本就对应了\(d\)维空间中的一个数据点,对样本分类则意味着在这个坐标空间中寻找不同类样本之间的分类边界。

决策树所形成的分类边界有一个明显的特点:轴平行(axis-parallel),即它的分类边界由若干个与坐标轴平行的分段组成。这样的分类边界使得学习结果有较好的可解释性。

但在学习任务的真实分类边界比较复杂时,必须使用很多段划分才能获得较好的近似。此时决策树会相当复杂,由于要进行大量的属性测试,预测时间开销会很大。

如果能使用斜的划分边界,则决策树模型将大为简化。“多变量决策树”(multivariate decision tree)即为能实现这样的“斜划分”甚至更复杂划分的决策树。

  • 在此类决策树中,非叶结点不再是仅对某个属性,而是对属性的线性组合进行测试。换言之,每个非叶结点时一个形如\(\sum^{d}_{i=1}w_{i}a_{i}=t\)的线性分类器,其中\(w_{i}\)是属性\(a_{i}\)的权重,\(w_{i}\)\(t\)可在该结点所含的样本集和属性集上习得。
  • 在多变量决策树的学习过程中,不是为每个非叶结点寻找一个最优划分属性,而是试图建立一个合适的线性分类器。

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

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

相关文章

Fullcalendar

月光光关注作者注册登录 使用Fullcalendar管理时间计划调度安排月光光2020-01-05 阅读 4 分钟 Fullcalendar可以很好的管理日程安排事件,可以管理时间和任务调度,比如日常值班岗位安排、举办活动会议议程安排、项目行动安排、车间劳动岗位排班等等。今天我们来了解一下使用Fu…

哈希函数与数据完整性 (^=◕ᴥ◕=^)

哈希函数与数据完整性:保护猫咪世界的小鱼干 (^=◕ᴥ◕=^) 在数字世界中,我们总是希望确保传输和存储的数据没有被篡改,就像猫咪们想保护它们珍贵的小鱼干不被“偷吃”一样。为此,哈希函数(Hash Functions)成为了一个强大而可靠的工具。哈希函数能生成独特的数据“指纹”…

学期 2024-2025-1 学号 20241403 《计算机基础与程序设计》第六周学习总结

学期(如2024-2025-1) 学号(如:20241403) 《计算机基础与程序设计》第六周学习总结 作业信息这个作业属于哪个课程 <班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 <作业要求的链接>(如2024-2025-1计算机基础与程序设计第一周作业)这个…

2024 强网杯逆向 Writeups

最心有余而力不足的一集,做完 vm 颈椎病犯了,第二天根本打。最后,加上学弟学妹打的,最后剩一个 Android 逆向没 AK,要是没有颈椎病这一说肯定 AK 了。感觉快退役了... mips 编译一个 qemu-6.2.0 mips-linux-user bindiff 一下恢复符号,怀疑修改了 ELF loader 或者 syscal…

坐标系-投影

墨卡托投影墨卡托投影(Mercator Projection),是正轴等角圆柱投影。由荷兰地图学家墨卡托(G.Mercator)于1569年创立。假设地球被围在一中空的圆柱里,其基准纬线与圆柱相切(赤道)接触,然后再假想地球中心有一盏灯,把球面上的图形投影到圆柱体上,再把圆柱体展开,这就是一…

蚂蚁KAG框架核心功能研读

首篇KAG框架解读,看蚂蚁KAG框架如何通过知识图谱和向量检索结合,增强大模型在专业领域知识服务中的准确性和逻辑推理能力,解决现有RAG技术栈的挑战。作者介绍:薛明:拥有近10年在医疗和零售领域应用机器学习和人工智能的经验。曾就职于通用电气、复星医药等企业。长期专注于…

Burpsuite下载安装超详细教程,社区版永久有效,专业版汉化激活到2099年,不看会后悔系列,亲测好用!

声明:该公众号大部分文章来自作者日常学习笔记,也有部分文章是经过作者授权和其他公众号白名单转载. 未经授权,严禁转载,如需转,联系开白, 请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关.现在只对常读和星标的公众号才展示大图推送…

非对称加密:猫咪的双钥匙保护 (^• ω •^)

非对称加密:猫咪的双钥匙保护 (^• ω •^) 在之前的博客中,我们讨论了对称加密算法。这种算法使用单一密钥对数据进行加密和解密,但这也带来了一些问题,例如密钥分发和共享的安全风险。为了解决这些问题,非对称加密(Asymmetric Encryption)应运而生。 非对称加密采用…

2024.10.28(商品品牌的增删改查)

按着ALt按左键整体编辑查询功能

【shell脚本】将Shell脚本转换为Systemd服务:轻松实现自动化管理

原创 青菜浪人背景介绍 从 Ubuntu 17.10 开始,/etc/rc.local 文件不再默认存在于系统中,因为 systemd 已成为主要的初始化系统。如果需要在系统启动时自动执行某些命令,可以通过编写 Shell 脚本并将其封装为一个 systemd 服务来实现这一操作。 实现方法 这里以一个简单的脚本…

学期2024-2025-1 学号20241424 《计算机基础与程序设计》第7周学习总结

学期2024-2025-1 学号20241424 《计算机基础与程序设计》第7周学习总结 作业信息 |这个作业属于2024-2025-1-计算机基础与程序设计)| |-- |-- | |这个作业要求在哪里|https://www.cnblogs.com/rocedu/p/9577842.html#WEEK01| |这个作业的目标|参考上面的学习总结模板,把学习过…

鸿蒙开发案例:直尺

【1】引言(完整代码在最后面) 本文将通过一个具体的案例——创建一个横屏显示的直尺应用,来引导读者了解鸿蒙应用开发的基本流程和技术要点。 【2】环境准备 电脑系统:windows 10 开发工具:DevEco Studio NEXT Beta1 Build Version: 5.0.3.806 工程版本:API 12 真机:Mat…