《机器学习》 学习记录 - 第四章
第4章 决策树
4.1 基本流程
决策树(decision tree)是一类常见的机器学习方法,也叫“判定树”。顾名思义,决策树是基于树的结构进行决策的。
一般的,一棵决策树包含一个根结点、若干个内部结点和若干个叶结点:
- 叶结点对应于决策结果,其他每个结点则对应于一个属性测试;
- 每个结点包含的样本集合根据属性测试的结果被划分到子结点中;
- 根结点包含样本全集;
- 从根结点到每个叶结点的路径对应了一个判定测试序列。
决策树学习的目的是为了产生一棵泛化能力强,即处理未见示例能力强的决策树,其基本流程遵循简单且直观的“分而治之”(divide-and-conquer)策略。如下图所示:
可以看出,决策树的生成是一个递归过程。
在决策树基本算法中,有以下三种情形会导致递归返回:
- (1)当前结点包含的样本全属于同一类别,无需划分;
- (2)当前属性集为空,或是所有样本在所有属性上取值相同,无法划分;
在该情形下,我们把当前结点标记为叶结点,并将其类别设定为该结点所含样本最多的类别(利用当前节点的后验分布); - (3)当前结点包含的样本集合为空,不能划分。
在该情形下,我们把当前结点标记为叶结点,并将其类别设定为其父结点所含样本最多的类别(把父结点的样本分布作为当前结点的先验分布)。
4.2 划分选择
随着划分过程不断进行,我们希望决策树的分支结点所包含的样本尽可能属于同一类别,即结点的“纯度”越来越高。
4.2.1 信息增益
“信息熵”(information entropy)是度量样本集合纯度最常用的一种指标。
假定当前样本集合
假定离散属性
我们可根据式(4.1)计算出
一般地,信息增益越大,意味着使用属性
我们可以用信息增益来进行决策树的划分属性选择。ID3决策树学习算法就是以信息增益为准则来选择划分属性。(其中ID是Iterative Dichotomiser,迭代二分器的简称)。
4.2.2 增益率
实际上,信息增益准则对可取值数目较多的属性有所偏好,为减少这种偏好可能带来的不利影响,C4.5决策树算法不直接使用信息增益,而是使用“增益率”(gain ratio)来选择最优划分属性。
增益率定义为
其中
称为属性
需要注意,增益率准则对可取值数目较少的属性有所偏好。故C4.5算法不是直接算则增益率最大的候选划分属性,而是使用了一个启发式:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。
4.2.3 基尼指数
CART决策树(Classification and Regression Tree)使用“基尼指数”(Gini index)来选择划分属性。数据集
属性
我们在候选属性集合
4.3 剪枝处理
剪枝(pruning)是决策树学习算法对付“过拟合”的主要手段。
决策树剪枝的基本策略有“预剪枝”(prepruning)和“后剪枝”(post-pruning)。
- 预剪枝:在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点。
- 后剪枝:先从训练集生成一棵完整的决策树,随后自底向上地对非叶结点进行考察。若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点。
而判断决策树泛化性能是否提升,则可以使用2.2节所介绍的性能评估方法。
4.3.1 预剪枝
- 预剪枝使得决策树的很多分支都没有“展开”,这不仅降低了过拟合的风险,还显著减少了决策树的训练时间开销和测试时间开销。
- 但是,有些分支的当前划分虽不能提升泛化性能、甚至可能导致泛化性能暂时下降,但在其基础上进行的后续划分却有可能导致性能显著提高。
- 预剪枝基于“贪心”本质禁止这些分支展开,给预剪枝决策树带来了欠拟合的风险。
4.3.2 后剪枝
- 后剪枝决策树通常比预剪枝决策树保留了更多的分支。
- 一般后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树。
- 但后剪枝过程实在生成完全决策树之后进行的,并且要自底向上地对树中的所有非叶结点进行逐一考察,因此其训练时间开销比未剪枝决策树和预剪枝决策树都要大得多。
4.4 连续与缺失值
4.4.1 连续值处理
由于连续属性的可取值数目不再有限,因此不能直接根据连续属性的可取值来对结点进行划分。我们可以采用连续属性离散化技术。最简单的策略是采用二分法(bi-partition)对连续属性进行处理。(C4.5决策树算法采用了此机制)
给定样本集
对相邻的属性取值
若当前结点划分属性为连续属性,该属性还可作为其后代结点的划分属性。如在父结点上使用了“密度
4.4.2 缺失值处理
现实任务重常会遇到不完整样本,即样本的某些属性值缺失。如果简单地放弃不完整样本,仅使用无缺失值的样本来进行学习,是对数据信息极大的浪费。
我们需要解决的问题有两个:
(1)如何在属性值缺失的情况下进行划分属性选择?
(2)给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分?
给定训练集
对问题(1):
此时我们仅可根据
假定属性
假定我们为每个样本
对属性
基于上述定义,可将信息增益的计算式(4.2)推广为:
其中由式(4.1),有
对问题(2):
- 若样本
在划分属性 上的取值已知,则将 划入与其取值对应的子结点,且样本权值在子结点中保持为 . - 若样本
在划分属性 上的取值未知,则将 同时划入所有子结点,且样本权值在与属性值 对应的子结点中调整为 。直观来看这就是让同一个样本以不同的概率划入到不同的子结点中去。
4.5 多变量决策树
若我们把每个属性视为坐标空间中的一个坐标轴,则
决策树所形成的分类边界有一个明显的特点:轴平行(axis-parallel),即它的分类边界由若干个与坐标轴平行的分段组成。这样的分类边界使得学习结果有较好的可解释性。
但在学习任务的真实分类边界比较复杂时,必须使用很多段划分才能获得较好的近似。此时决策树会相当复杂,由于要进行大量的属性测试,预测时间开销会很大。
如果能使用斜的划分边界,则决策树模型将大为简化。“多变量决策树”(multivariate decision tree)即为能实现这样的“斜划分”甚至更复杂划分的决策树。
- 在此类决策树中,非叶结点不再是仅对某个属性,而是对属性的线性组合进行测试。换言之,每个非叶结点时一个形如
的线性分类器,其中 是属性 的权重, 和 可在该结点所含的样本集和属性集上习得。 - 在多变量决策树的学习过程中,不是为每个非叶结点寻找一个最优划分属性,而是试图建立一个合适的线性分类器。
本文作者:xsxs_xs
本文链接:https://www.cnblogs.com/xsRecord/p/18524269
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!