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

发布于:2025-08-04 ⋅ 阅读:(12) ⋅ 点赞:(0)


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


一、何为决策树

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(DA) 用于衡量 “已知特征 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(Doutlook)=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(DA),用于衡量 “用特征 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.9400.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=1VDDvlog2DDv 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)=1k=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=1VDDvGini(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 结果” 等规则,直观呈现天气特征与 “是否打球” 决策的关联。