【一起啃书】《机器学习》第四章决策树

news/2024/11/23 3:40:25/

第四章 决策树

在这里插入图片描述

4.1 基本流程

  决策树是一类常见的机器学习方法,是基于树结构来进行决策的,通过对训练样本的分析来确定划分属性,来模拟人类决策过程。

  一般的,一棵决策树包含一个根结点、若干个内部结点和若干个叶结点,叶结点对应于决策结果,其他每个结点则对应于一个属性测试,每个结点包含的样本集合根据属性测试的结果被划分到子结点中,根结点包含样本全集,从根结点到每个叶结点的路径对应了一个判定测试序列。决策树学习的目的是为了产生一棵泛化能力强的决策树,其基本流程遵循简单且直观的“分而治之”策略,如下所示:

4.2 划分选择

  决策树学习的关键在于如何选择最优化分属性,随着划分过程不断进行,我们希望决策树的分支结点所包含的样本尽可能属于同一类别,也就是结点的“纯度”越来越高,下面介绍几种在选择最优划分属性时常用的指标。

(1)信息增益

  在介绍信息增益之前,先来介绍一下信息熵。信息熵是度量样本集合纯度最常用的一种指标,假定当前样本集合 D D D中第 k k k类样本所占比例为 p k ( k = 1 , 2 , 3 , . . . , n ) p_k(k=1,2,3,...,n) pk(k=1,2,3,...,n),则 D D D的信息熵定义如下, E n t ( D ) Ent(D) Ent(D)的值越小,说明 D D D的纯度越高。
E n t ( D ) = − ∑ k = 1 n p k log ⁡ 2 p k Ent(D) = - \sum\limits_{k = 1}^n {{p_k}{{\log }_2}{p_k}} Ent(D)=k=1npklog2pk
  下面介绍信息增益。假定离散属性 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,这样可以计算出 D v D^v Dv的信息熵。之后考虑到不同的分支结点所包含的样本数不同,为每一个结点赋予权重,即样本数越多的分支结点的影响越大,于是得到如下的信息增益。一般而言,信息增益越大,意味着使用属性 a a a来进行划分所获得的“纯度”提升越大,比如著名的 I D 3 ID3 ID3决策树学习算法。
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\limits_{v = 1}^V {\frac{{\left| {{D^v}} \right|}}{{\left| D \right|}}Ent({D^v})} Gain(D,a)=Ent(D)v=1VDDvEnt(Dv)
(2)增益率

  实际上,信息增益准则对可取值数目较多的属性有所偏好,为减少这种偏好可能带来的不利影响,下面我们介绍增益率,定义如下:
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 ∣ log ⁡ 2 ∣ D v ∣ ∣ D ∣ Gain\_ratio(D,a) = \frac{{Gain(D,a)}}{{IV(a)}},IV(a) = - \sum\limits_{v = 1}^V {\frac{{\left| {{D^v}} \right|}}{{\left| D \right|}}} {\log _2}\frac{{\left| {{D^v}} \right|}}{{\left| D \right|}} Gain_ratio(D,a)=IV(a)Gain(D,a),IV(a)=v=1VDDvlog2DDv
  其中 I V ( a ) IV(a) IV(a)称为属性 a a a的固有值,属性 a a a的可能取值数目越多, I V ( a ) IV(a) IV(a)的值通常会越大。需要注意的是,增益率准则对可取值数目较少的属性有所偏好,比如著名的 C 4.5 C4.5 C4.5决策树算法,是使用了一个启发式方法来选择最优划分属性——先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。

(3)基尼指数

  首先介绍基尼值,数据集 D D D的纯度可以用基尼值 G i n i ( D ) Gini(D) Gini(D)来度量, G i n i ( D ) Gini(D) Gini(D)反映了从数据集 D D D中随机抽取两个样本,其类别标记不一致的概率,因此 G i n i ( D ) Gini(D) Gini(D)越小,数据集 D D D的纯度越高。属性 a a a的基尼指数定义如下,最后也是选择使得划分后基尼指数最小的属性作为最优划分属性,比如著名的 C A R T CART CART决策树。
G i n i ( D ) = ∑ k = 1 n ∑ k ′ ≠ k p k p k ′ = 1 − ∑ k = 1 n p k 2 , G i n i _ i n d e x ( D , a ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ G i n i ( D v ) Gini(D) = \sum\limits_{k = 1}^n {\sum\limits_{k' \ne k} {{p_k}{p_{k'}}} } = 1 - \sum\limits_{k = 1}^n {p_k^2} ,Gini\_index(D,a) = \sum\limits_{v = 1}^V {\frac{{\left| {{D^v}} \right|}}{{\left| D \right|}}} Gini({D^v}) Gini(D)=k=1nk=kpkpk=1k=1npk2,Gini_index(D,a)=v=1VDDvGini(Dv)

4.3 剪枝处理

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

(1)预剪枝

  预剪枝是指在决策树生成过程中,对每个结点在划分前进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点,也就是提前终止某些分支的生长。下面举一个西瓜数据集的例子,以下是数据集详情。

  以下是构造的原始决策树。

  下面我们根据属性“脐部”来进行划分,发现划分前的验证集精度为42.9%,划分后为71.4%,于是用“脐部”进行划分得以确定,同样的方式应用于下面的“色泽”和“根蒂”,如下所示:

(2)后剪枝

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

  如上面那棵原始决策树所示,首先考察结点6,如果把该结点替换为叶结点,则验证集精度将从42.9%提升到57.1%,所以进行剪枝,其他结点亦如此,如下所示:

(3)预剪枝与后剪枝的优缺点

  预剪枝是在构建决策树的过程中提前停止生长,即在某个结点上不再继续划分子结点,而是直接将该结点作为叶结点。预剪枝的优点是可以减少决策树的规模,节省计算资源和时间,避免过拟合问题。预剪枝的缺点是可能会过于简化决策树,导致欠拟合问题,即对训练集和测试集都不能很好地拟合,损失了一些有用的信息。预剪枝需要设定一些停止生长的条件,例如结点上的样本数、信息增益、基尼指数等。

  后剪枝是在构建完整的决策树之后,从下往上对决策树进行简化,即将某些子树替换为叶结点或者直接删除。后剪枝的优点是可以保留决策树的完整性,避免欠拟合问题,同时也可以通过简化决策树来减少过拟合问题。后剪枝的缺点是需要额外的计算资源和时间来构建完整的决策树和进行剪枝操作,可能会影响效率。后剪枝需要设定一些评估标准来判断是否进行剪枝,例如验证集上的准确率、误差率等。

4.4 连续与缺失值

(1)连续值处理

  由于连续属性的可取值数目不再有限,因此不能直接根据连续属性的可取值来对结点进行划分,这里可以使用连续属性离散化,最简单的是采用二分法,如下所示:
T a = { a i + a i + 1 2 , 1 ⩽ i ⩽ n − 1 } {T_a} = \{ \frac{{{a^i} + {a^{i + 1}}}}{2},1 \leqslant i \leqslant n - 1\} Ta={2ai+ai+1,1in1}
  把这些中位点作为候选划分点,选取最优的划分点进行样本集合的划分,如果采用信息增益,则如下所示:
G a i n ( D , a ) = max ⁡ t ∈ T a G a i n ( D , a , t ) = max ⁡ t ∈ T a E n t ( D ) − ∑ λ ∈ { − , + } ∣ D t λ ∣ ∣ D ∣ E n t ( D t λ ) Gain(D,a) = \mathop {\max }\limits_{t \in {T_a}} Gain(D,a,t) = \mathop {\max }\limits_{t \in {T_a}} Ent(D) - \sum\limits_{\lambda \in \{ - , + \} } {\frac{{\left| {D_t^\lambda } \right|}}{{\left| D \right|}}Ent(D_t^\lambda )} Gain(D,a)=tTamaxGain(D,a,t)=tTamaxEnt(D)λ{,+}D Dtλ Ent(Dtλ)
  其他常用的连续属性离散化方法还有如下所示:

  • 等宽法:将连续属性的取值范围平均分成n个等宽的区间,每个区间代表一个离散值。这种方法简单易行,但是可能会忽略数据的分布特征,导致区间内的数据差异较大,区间间的数据差异较小。
  • 等频法:将连续属性的取值范围分成n个区间,使得每个区间内包含的数据记录数目相等或接近相等,每个区间代表一个离散值。这种方法可以保证数据的均匀性,但是可能会造成区间的划分不合理,导致一些异常值或边界值被分到同一个区间内。
  • 基于聚类分析的方法:将连续属性按照聚类算法进行聚类,然后根据聚类的结果,将同一聚类的记录合并到同一区间内,每个区间代表一个离散值。这种方法可以根据数据的内在特征进行划分,但是需要事先确定聚类的个数,而且聚类算法本身也有一定的复杂度和不确定性。

(2)缺失值处理

  现实任务中常会遇到不完整样本,即样本的某些属性值缺失,尤其是在属性数目较多的情况下,往往会有大量样本出现缺失值,所以对于这样情况下的决策树,有以下两个问题有待解决:

  • 如何在属性值缺失的情况下进行划分属性选择
  • 给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分

  下面介绍几种常见的解决方法:

  • 忽略缺失值:这种方法是直接删除或忽略含有缺失值的样本,只使用完整的样本来构建和预测决策树。这种方法简单易行,但是可能会造成数据的丢失和偏差,降低决策树的性能和泛化能力。
  • 利用缺失值:这种方法是直接计算不缺失的数据,在选择最优划分属性时,直接采用没有缺失属性样本进行选择,在后续进行子结点划分时,如果遇到某个样本在属性上的取值缺失,则同时将这个样本划入当前所有子结点,也就是让同一个样本以不同的概率划入到不同的子结点中去。
  • 填补缺失值:这种方法是利用已知的数据来估计或推断缺失值,然后用估计或推断出来的值来替代原来的缺失值,使得样本变得完整。这种方法可以保留数据的完整性,但是需要选择合适的填补方法,否则可能会引入误差和噪声,影响决策树的准确性。常用的填补方法有均值、中位数、众数、最近邻、回归、插值等。

4.5 多变量决策树

  若把每个属性视为坐标空间中的一个坐标轴,则 d d d个属性描述的样本就对应了 d d d维空间中的一个数据点,对样本分类则意味着在这个坐标空间中寻找不同类样本之间的分类边界,在这里的分类边界由若干个与坐标轴平行的分段组成,这样的决策树也称为“多变量决策树”,比如下面两个例子:

第一张图片显示不出时显示的文字
第二张图片显示不出时显示的文字

4.6 相关论文

  下面结合近几年的一些论文来具体介绍决策树的应用。

(1)NBDT: Neural-Backed Decision Trees
  神经网络是一种强大的机器学习方法,但它们通常缺乏可解释性,难以在需要准确和合理的预测的领域应用,如金融和医疗。为了解决这个问题,本文提出了一种将决策树嵌入神经网络的方法,称为NBDT,它可以在不改变原网络结构、不降低准确度的前提下增加网络的可解释性。NBDT方法保留原神经网络的特征提取部分结构,只在最后的全连接层上进行决策树嵌入,从而将神经网络的输出转化为一系列可理解的决策规则。NBDT方法可以应用于任何预训练的神经网络,无需重新训练或微调,只需使用一个简单的算法生成决策树结构和阈值。NBDT方法在多个图像分类数据集上进行了实验,证明了它可以保持原网络的准确性,同时提供可视化和可解释的决策过程。本文为提高神经网络的可解释性提供了一种有效和通用的方法。

(2)Decision tree based malware detection using static and dynamic analysis

  本篇论文提出了一种使用决策树对恶意软件进行检测的方法,结合静态和动态分析的特征,如APIs、Summary Information、DLLs和Registry Keys Changed,同时使用Cuckoo sandbox进行动态恶意软件分析,它是一种可定制的、提供高准确度的工具。在实验中使用了2300多个恶意软件样本和1500多个正常软件样本,并将决策树与其他机器学习方法进行比较,如支持向量机、朴素贝叶斯、随机森林等,发现决策树在准确度、召回率、精确度和F1分数等指标上都有优势。


http://www.ppmy.cn/news/45759.html

相关文章

MSVC Debug 与 Release 库

CMake Debug后缀 set_target_properties(liba PROPERTIES DEBUG_POSTFIX "d") 或者 set(CMAKE_DEBUG_POSTFIX "d") 这样生成的库或者exe程序名会多一个d字符。如下链接 vc 运行时库 通过/MD、/MT 可以改变MSVC运行库, /MD代表使用动态运行时…

低代码/无代码平台在软件开发中的应用

随着技术的不断发展,软件开发也在不断地进步。低代码/无代码平台已经成为软件开发的一个新的趋势。在这篇文章中,我们将深入探讨低代码/无代码平台在软件开发中的应用,包括它们的优势、如何选择合适的平台以及如何使用这些平台来开发高质量的…

ubuntu快速安装VMware Tools(全屏用的)

VMware Tools实现主机和虚拟机的文件共享。 第一步 打开VMware Workstation,启动ubuntu系统。 点击主界面的(虚拟机)——点击(安装VMware Tools)。 弹出提示框点击是——等待自动下载完成。 第二步 将安装包复制到桌面&#x…

临床决策曲线分析如何影响预测模型的使用和评价

目前,临床决策曲线分析(clinical decision curve analysis, DCA)在业界已经被超过1500文献使用,也被多个主流的临床杂志所推荐,更被写进了临床预测模型撰写标准(TRIPOD)中,但是许多预…

牛客刷题

目录 1、乒乓球框 Ⅰ、思路 Ⅱ、代码 2、查找兄弟单词 输入描述: Ⅰ、思路 Ⅱ、代码 1、乒乓球框 乒乓球筐__牛客网 (nowcoder.com) nowcoder有两盒(A、B)乒乓球,有红双喜的、有亚力亚的……现在他需要判别A盒是否包含了B盒中所…

Android组件化开发

Android组件开发 一、背景 一个app随着业务增加,代码放在同一个模块中会越来越臃肿,同时也导致多人开发的一个难度。组件化可以把业务单独分出来,形成一个单独模块,可单独运行、测试等,相互之间不会影响。另外一个优…

一文整理深度学习【医学图像处理领域期刊和会议】

参考地址:医学图像处理领域期刊和会议 参考地址:中国计算机学会推荐国际学术会议和期刊目录 医学图像处理领域要看的期刊和会议 期刊医学图像处理领域期刊人工智能领域期刊会议医学图像处理领域会议人工智能领域期刊会议期刊 医学图像处理领域期刊 期刊名链接TMIIEEE Transa…

【WAF】雷池安装及使用体验

文章目录 前言一、雷池介绍二、安装及使用1.下载链接2.下载3. 安装waf测试 前言 长亭一直是我比较喜欢的一家公司,像业界比较出名的扫描器xray还有rad等很多工具都是他们开发的,使用起来非常的nice,联动其他安全工具可以实现自动漏洞挖掘&am…