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

文章目录

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


一、何为决策树

1. 决策树的组成

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

outlook temperature humidity windy play
sunny hot high FALSE no
sunny hot high TRUE no
overcast hot high FALSE yes
rainy mild high FALSE yes
rainy cool normal FALSE yes
rainy cool normal TRUE no
overcast cool normal TRUE yes
sunny mild high FALSE no
sunny cool normal FALSE yes
rainy mild normal FALSE yes
sunny mild normal TRUE yes
overcast mild high TRUE yes
overcast hot normal FALSE yes
rainy mild high TRUE no

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

2. 决策树的构建

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


二、熵:衡量数据混乱度

1. 熵的作用

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

2. 熵的定义

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

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

天气数据共 14 条,"play=yes" 有 9 条(占比 9 / 14 9/14 9/14 ),"play=no" 有 5 条(占比 5 / 14 5/14 5/14 )。

整体熵 H ( D ) = − ( 9 14 log ⁡ 2 9 14 + 5 14 log ⁡ 2 5 14 ) ≈ 0.940 H(D) = -(\frac{9}{14}\log_2\frac{9}{14} + \frac{5}{14}\log_2\frac{5}{14}) \approx 0.940 H(D)=−(149log2149+145log2145)≈0.940 ,此值反映初始数据的混乱程度。

4. 条件熵的引入

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

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

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

  • sunny 类中,"play=no" 有 3 条,"play=yes" 有 2 条 → 熵 H ( D s u n n y ) = − ( 3 5 log ⁡ 2 3 5 + 2 5 log ⁡ 2 2 5 ) ≈ 0.971 H(D_{sunny}) = -(\frac{3}{5}\log_2\frac{3}{5} + \frac{2}{5}\log_2\frac{2}{5}) \approx 0.971 H(Dsunny)=−(53log253+52log252)≈0.971
  • overcast 类样本 "play" 结果全为 "yes" → 熵 H ( D o v e r c a s t ) = 0 H(D_{overcast}) = 0 H(Dovercast)=0
  • rainy 类中,"play=yes" 有 3 条,"play=no" 有 2 条 → 熵 H ( D r a i n y ) = − ( 3 5 log ⁡ 2 3 5 + 2 5 log ⁡ 2 2 5 ) ≈ 0.971 H(D_{rainy}) = -(\frac{3}{5}\log_2\frac{3}{5} + \frac{2}{5}\log_2\frac{2}{5}) \approx 0.971 H(Drainy)=−(53log253+52log252)≈0.971

条件熵 H ( D ∣ o u t l o o k ) = 5 14 H ( D s u n n y ) + 4 14 H ( D o v e r c a s t ) + 5 14 H ( D r a i n y ) ≈ 0.693 H(D|outlook) = \frac{5}{14}H(D_{sunny}) + \frac{4}{14}H(D_{overcast}) + \frac{5}{14}H(D_{rainy}) \approx 0.693 H(D∣outlook)=145H(Dsunny)+144H(Dovercast)+145H(Drainy)≈0.693 。


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

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

信息增益 G a i n ( D , A ) = H ( D ) − H ( D ∣ A ) Gain(D,A) = H(D) - H(D|A) Gain(D,A)=H(D)−H(D∣A),用于衡量 "用特征 A A A 划分数据集后,熵的下降幅度" 。下降幅度越大,说明该特征对分类结果的区分能力越强。

以 "outlook" 特征为例, G a i n ( D , o u t l o o k ) = 0.940 − 0.693 = 0.247 Gain(D,outlook) = 0.940 - 0.693 = 0.247 Gain(D,outlook)=0.940−0.693=0.247 。实际应用中,需计算其他特征(如 temperaturehumidity 等 )的信息增益,选取增益最大的特征作为根节点的划分依据。

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

信息增益存在偏好取值多特征的问题(比如 "日期" 这类特征,取值多易使划分后熵快速下降,但模型泛化能力差 )。信息增益率 G a i n _ r a t i o ( D , A ) = G a i n ( D , A ) I V ( A ) Gain\ratio(D,A) = \frac{Gain(D,A)}{IV(A)} Gain_ratio(D,A)=IV(A)Gain(D,A) ,其中 I V ( A ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ log ⁡ 2 ∣ D v ∣ ∣ D ∣ IV(A) = -\sum{v=1}^{V} \frac{|D^v|}{|D|}\log_2\frac{|D^v|}{|D|} IV(A)=−∑v=1V∣D∣∣Dv∣log2∣D∣∣Dv∣ ( V V V 是特征 A A A 的取值类别数, D v D^v Dv 是特征取第 v v v 类的样本子集 ),通过 I V ( A ) IV(A) IV(A) 惩罚取值过多的特征,平衡划分效果。

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

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

4. 基尼增益

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

5. 基尼增益率

和信息增益率逻辑一致,引入类似 I V ( 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 结果" 等规则,直观呈现天气特征与 "是否打球" 决策的关联。
相关推荐
deephub几秒前
机器学习特征工程:分类变量的数值化处理方法
python·机器学习·特征工程·分类变量
水中加点糖1 分钟前
小白都能看懂的——车牌检测与识别(最新版YOLO26快速入门)
人工智能·yolo·目标检测·计算机视觉·ai·车牌识别·lprnet
乌萨奇也要立志学C++3 分钟前
【洛谷】BFS 求解最短路:从马的遍历到迷宫问题的实战解析
算法·宽度优先
Yaozh、5 分钟前
【神经网络中的Dropout随机失活问题】
人工智能·深度学习·神经网络
wdfk_prog5 分钟前
[Linux]学习笔记系列 -- [drivers][tty]sysrq
linux·笔记·学习
老鼠只爱大米12 分钟前
LeetCode经典算法面试题 #46:全排列(回溯、交换、剪枝等五种实现方案详细解析)
算法·leetcode·剪枝·回溯·全排列·stj算法
优橙教育12 分钟前
通信行业四大热门岗位解析:谁才是数字时代的黄金赛道?
网络·学习·5g
墩墩冰14 分钟前
计算机图形学 实现直线段的反走样
人工智能·机器学习
Pyeako19 分钟前
深度学习--卷积神经网络(下)
人工智能·python·深度学习·卷积神经网络·数据增强·保存最优模型·数据预处理dataset
OPEN-Source21 分钟前
大模型实战:搭建一张“看得懂”的大模型应用可观测看板
人工智能·python·langchain·rag·deepseek