当前位置: 首页 > 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.lryc.cn/news/608655.html

相关文章:

  • C++手撕基于ID3算法的决策树
  • 著作权登记遇难题:创作者如何突破确权困境?
  • 自动驾驶中的传感器技术19——Camera(10)
  • ELECTRICAL靶场
  • ClickHouse Windows迁移方案与测试
  • 【动态规划算法】路径问题
  • WebRTC前处理模块技术详解:音频3A处理与视频优化实践
  • Node.js (Express) + MySQL + Redis构建项目流程
  • 决策树的实际案例
  • sqli-labs:Less-25关卡详细解析
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | TodoList(代办事项组件)
  • 子区间问题
  • 主机序列号的修改方法与原理
  • Azure DevOps 中的代理
  • 渗透作业4
  • LeetCode - 合并两个有序链表 / 删除链表的倒数第 N 个结点
  • webrtc弱网-QualityScaler 源码分析与算法原理
  • PLC传感器接线与输出信号接线
  • WSUS服务器数据库维护与性能优化技术白皮书
  • 力扣 hot100 Day64
  • 六、Linux核心服务与包管理
  • 若没有安全可靠性保障,对于工程应用而言,AI或许就是大玩具吗?
  • Python黑科技:用@property优雅管理你的属性访问
  • ThinkPHP5x,struts2等框架靶场复现
  • 控制建模matlab练习10:滞后补偿器
  • 吴恩达【prompt提示词工程】学习笔记
  • MCP革命:Anthropic如何重新定义AI与外部世界的连接标准
  • 2.4.1-2.4.3控制范围-控制进度-控制成本
  • STM32复位电路解析
  • Rustdesk中继服务器搭建(windows 服务器)