当前位置: 首页 > news >正文

决策树学习全解析:从理论到实战

文章目录

  • 一、何为决策树
    • 1. 决策树的组成
    • 2. 决策树的构建
  • 二、熵:衡量数据混乱度
    • 1. 熵的作用
    • 2. 熵的定义
    • 3. 熵的计算(以天气数据为例)
    • 4. 条件熵的引入
    • 5. 条件熵的计算(以特征“outlook”为例)
  • 三、划分选择:选最优特征的“标尺”
    • 1. 信息增益(ID3算法标准)
    • 2. 信息增益率(C4.5算法标准)
    • 3. 基尼系数(CART算法标准)
    • 4. 基尼增益
    • 5. 基尼增益率
  • 四、决策树中的连续值处理
  • 五、决策树中的预剪枝处理(正则化)
  • 六、决策树中的后剪枝处理
  • 七、实战:用天气数据构建决策树

决策树作为机器学习中经典的分类与回归工具,凭借直观易懂、可解释性强等优势,在众多场景广泛应用。本文结合理论架构与实际天气数据集,深入拆解其核心知识,助力你从零到一掌握原理与应用。


一、何为决策树

1. 决策树的组成

决策树由根节点(整份数据集的起始分析点 )、内部节点(用于特征判断的条件,比如判断天气是否为 “sunny” )、叶子节点(最终输出的决策结果,像是否 “play” )和分支(依据特征取值延伸的判断路径 )构成。以下天气数据集将作为分析基础(涵盖 outlooktemperaturehumiditywindy 四个特征,以及 play 分类结果 ):

outlooktemperaturehumiditywindyplay
sunnyhothighFALSEno
sunnyhothighTRUEno
overcasthothighFALSEyes
rainymildhighFALSEyes
rainycoolnormalFALSEyes
rainycoolnormalTRUEno
overcastcoolnormalTRUEyes
sunnymildhighFALSEno
sunnycoolnormalFALSEyes
rainymildnormalFALSEyes
sunnymildnormalTRUEyes
overcastmildhighTRUEyes
overcasthotnormalFALSEyes
rainymildhighTRUEno

以该数据为例,根节点是全部 14 条天气记录;构建内部节点时,可设为 “outlook 是否为 sunny” ,基于此延伸 “是” 或 “否” 的分支路径,叶子节点则输出 “play=yes/no” 的结论 。

2. 决策树的构建

核心逻辑是递归选择最优特征划分数据集。从根节点启动,计算每个特征(如 outlooktemperature 等 )对结果的区分能力,挑选最能让数据 “纯净” 划分的特征(使同一分支样本尽可能属于同一类别 ),生成子节点;对子节点重复该过程,直至满足停止条件(比如样本类别已一致,或无新特征可用于划分 )。


二、熵:衡量数据混乱度

1. 熵的作用

熵用于量化样本集合的不确定性程度。熵值越高,数据越混乱(若 play 结果全为 “yes”,熵为 0 ;“yes”“no” 各占一半时,熵达到最大 )。构建决策树时,借熵判断特征划分效果 —— 划分后熵下降越多,该特征对分类的助力越显著。

2. 熵的定义

对于样本集合 DDD,若包含 kkk 类样本,第 kkk 类样本占比为 pkp_kpk,则熵的计算公式为 H(D)=−∑k=1npklog⁡2pkH(D) = -\sum_{k=1}^{n} p_k \log_2 p_kH(D)=k=1npklog2pk (选用 log2log_2log2 是为适配二进制编码的信息度量场景,也可用自然对数 )。

3. 熵的计算(以天气数据为例)

天气数据共 14 条,“play=yes” 有 9 条(占比 9/149/149/14 ),“play=no” 有 5 条(占比 5/145/145/14 )。
整体熵 H(D)=−(914log⁡2914+514log⁡2514)≈0.940H(D) = -(\frac{9}{14}\log_2\frac{9}{14} + \frac{5}{14}\log_2\frac{5}{14}) \approx 0.940H(D)=(149log2149+145log2145)0.940 ,此值反映初始数据的混乱程度。

4. 条件熵的引入

条件熵 H(D∣A)H(D|A)H(DA) 用于衡量 “已知特征 AAA 取值情况下,样本集合 DDD 的不确定性” 。比如已知 “outlook=sunny”,再分析这些样本的 “play” 结果,条件熵就能体现出特征 AAA 对分类结果的约束作用。

5. 条件熵的计算(以特征“outlook”为例)

“outlook” 有 3 类取值:sunny(5 条 )、overcast(4 条 )、rainy(5 条 )。

  • sunny 类中,“play=no” 有 3 条,“play=yes” 有 2 条 → 熵 H(Dsunny)=−(35log⁡235+25log⁡225)≈0.971H(D_{sunny}) = -(\frac{3}{5}\log_2\frac{3}{5} + \frac{2}{5}\log_2\frac{2}{5}) \approx 0.971H(Dsunny)=(53log253+52log252)0.971
  • overcast 类样本 “play” 结果全为 “yes” → 熵 H(Dovercast)=0H(D_{overcast}) = 0H(Dovercast)=0
  • rainy 类中,“play=yes” 有 3 条,“play=no” 有 2 条 → 熵 H(Drainy)=−(35log⁡235+25log⁡225)≈0.971H(D_{rainy}) = -(\frac{3}{5}\log_2\frac{3}{5} + \frac{2}{5}\log_2\frac{2}{5}) \approx 0.971H(Drainy)=(53log253+52log252)0.971

条件熵 H(D∣outlook)=514H(Dsunny)+414H(Dovercast)+514H(Drainy)≈0.693H(D|outlook) = \frac{5}{14}H(D_{sunny}) + \frac{4}{14}H(D_{overcast}) + \frac{5}{14}H(D_{rainy}) \approx 0.693H(Doutlook)=145H(Dsunny)+144H(Dovercast)+145H(Drainy)0.693


三、划分选择:选最优特征的“标尺”

1. 信息增益(ID3算法标准)

信息增益 Gain(D,A)=H(D)−H(D∣A)Gain(D,A) = H(D) - H(D|A)Gain(D,A)=H(D)H(DA),用于衡量 “用特征 AAA 划分数据集后,熵的下降幅度” 。下降幅度越大,说明该特征对分类结果的区分能力越强。
以 “outlook” 特征为例,Gain(D,outlook)=0.940−0.693=0.247Gain(D,outlook) = 0.940 - 0.693 = 0.247Gain(D,outlook)=0.9400.693=0.247 。实际应用中,需计算其他特征(如 temperaturehumidity 等 )的信息增益,选取增益最大的特征作为根节点的划分依据。

2. 信息增益率(C4.5算法标准)

信息增益存在偏好取值多特征的问题(比如 “日期” 这类特征,取值多易使划分后熵快速下降,但模型泛化能力差 )。信息增益率 Gain_ratio(D,A)=Gain(D,A)IV(A)Gain\_ratio(D,A) = \frac{Gain(D,A)}{IV(A)}Gain_ratio(D,A)=IV(A)Gain(D,A) ,其中 IV(A)=−∑v=1V∣Dv∣∣D∣log⁡2∣Dv∣∣D∣IV(A) = -\sum_{v=1}^{V} \frac{|D^v|}{|D|}\log_2\frac{|D^v|}{|D|}IV(A)=v=1VDDvlog2DDvVVV 是特征 AAA 的取值类别数,DvD^vDv 是特征取第 vvv 类的样本子集 ),通过 IV(A)IV(A)IV(A) 惩罚取值过多的特征,平衡划分效果。

3. 基尼系数(CART算法标准)

基尼系数 Gini(D)=1−∑k=1npk2Gini(D) = 1 - \sum_{k=1}^{n} p_k^2Gini(D)=1k=1npk2,用于衡量 “从集合中随机选两个样本,类别不同的概率” 。值越小,数据越 “纯净”。针对特征 AAA,划分后的基尼系数 Gini(D,A)=∑v=1V∣Dv∣∣D∣Gini(Dv)Gini(D,A) = \sum_{v=1}^{V} \frac{|D^v|}{|D|}Gini(D^v)Gini(D,A)=v=1VDDvGini(Dv) ,构建决策树时,选择使 Gini(D,A)Gini(D,A)Gini(D,A) 最小的特征进行划分。

4. 基尼增益

与信息增益思路类似,基尼增益 = 划分前基尼系数 - 划分后基尼系数,用于反映特征划分对数据 “纯净度” 的提升效果。

5. 基尼增益率

和信息增益率逻辑一致,引入类似 IV(A)IV(A)IV(A) 的惩罚项(基于基尼系数计算 ),惩罚取值过多的特征,优化特征选择过程。


四、决策树中的连续值处理

若特征为连续值(如细化后的 temperature 数值 ),需进行离散化处理:先对连续值排序,选取相邻值的中点作为候选划分点(如温度值排序后,取 “hot” 与 “mild” 的中间值作为划分阈值 );接着计算每个候选点的信息增益或基尼系数,挑选最优划分点用于数据集划分。


五、决策树中的预剪枝处理(正则化)

预剪枝是在决策树构建过程中,提前限制树的生长,避免模型过拟合:

  • 限制深度:设定决策树最大深度(如根节点为深度 1,限制深度为 3 则树最多生长 3 层 ),防止分支过度细化。
  • 限制叶子结点个数/样本数:当叶子结点数量或单个叶子结点包含的样本数低于设定阈值时,停止划分,简化树结构。
  • 限制最低信息增益:若特征划分后的信息增益低于设定值(如 0.1 ),不再生成子节点,避免模型学习 “无关细节”。

六、决策树中的后剪枝处理

后剪枝是在构建完完整决策树后,反向进行剪枝操作:从叶子节点往根节点遍历,判断 “剪掉子树,用子树多数样本的类别作为叶子结点结果” 是否能提升模型泛化能力(可通过验证集测试,若剪枝后误差降低则保留剪枝 ),最终保留简洁且泛化效果好的树结构。


七、实战:用天气数据构建决策树

  1. 计算熵与信息增益:按前述方法,计算 outlooktemperature 等各特征的信息增益,会发现 “outlook” 特征的信息增益相对较高,可将其选为根节点的划分特征。
  2. 递归划分:对根节点划分后的子数据集(如 “outlook=sunny” 对应的 5 条数据 ),重复计算子特征的信息增益,持续选择最优特征划分(比如进一步用 “humidity” 划分 ),直至满足停止条件。
  3. 剪枝优化:可采用预剪枝(如限制决策树深度为 3 )或后剪枝(对比验证集误差 )调整树结构,最终得到可解释性强、泛化效果好的决策树。比如根节点为 “outlook” ,延伸出 “sunny→humidity 判断→play 结果” 等规则,直观呈现天气特征与 “是否打球” 决策的关联。
    最终得到可解释性强、泛化效果好的决策树。比如根节点为 “outlook” ,延伸出 “sunny→humidity 判断→play 结果” 等规则,直观呈现天气特征与 “是否打球” 决策的关联。
http://www.dtcms.com/a/312695.html

相关文章:

  • 数据结构:在链表中插入节点(Inserting in a Linked List)
  • 回归的wry
  • 浅谈Python中的os.environ:环境变量交互机制
  • Uniapp一根数据线实现真机调试运行【uniapp如何把项目运行在手机上】
  • io_submit系统调用及示例
  • 基于springboot的在线考试系统/考试信息管理平台
  • Suno的100个高质量歌词元标签(MetaTags)详解与使用指南
  • SpringBoot3.x入门到精通系列:2.4 RESTful API设计
  • 电脑声音标志显示红叉的原因
  • Spring Batch的2种STEP定义方式
  • spring-ai-alibaba 学习(二十)——graph之检查点
  • VUE2 学习笔记16 插槽、Vuex
  • 大屏项目展示
  • python学智能算法(三十一)|SVM-Slater条件理解
  • 【MySQL进阶】------MySQL程序
  • 全排列二(回溯算法)
  • 位图:用bit改变存储格局
  • Linux 文件与目录操作命令宝典
  • Apache Shenyu 本地启动及快速入门
  • 【Bluetooth】【基础篇】第二章 关于蓝牙协议栈架构与其硬件方案架构大致概述
  • 【JS】JavaScript中的this详解
  • Android 优化 - 日志 Log
  • LeetCode513:找树最左下角的值(bfs+dfs)
  • 【鸿蒙高级】
  • [硬件电路-148]:数字电路 - 什么是CMOS电平、TTL电平?还有哪些其他电平标准?发展历史?
  • 动感按钮:如何打造交互感十足的点击动画效果
  • 【1】WPF界面开发入门—— 图书馆程序:登录界面设计
  • 基于图像识别与分类的中国蛇类识别系统
  • [硬件电路-151]:数字电路 - 模拟电路与数字电路的本质
  • 【数据结构】二叉树的顺序结构实现