文章目录
决策树作为机器学习中经典的分类与回归工具,凭借直观易懂、可解释性强等优势,在众多场景广泛应用。本文结合理论架构与实际天气数据集,深入拆解其核心知识,助力你从零到一掌握原理与应用。
一、何为决策树
1. 决策树的组成
决策树由根节点(整份数据集的起始分析点 )、内部节点(用于特征判断的条件,比如判断天气是否为 “sunny” )、叶子节点(最终输出的决策结果,像是否 “play” )和分支(依据特征取值延伸的判断路径 )构成。以下天气数据集将作为分析基础(涵盖 outlook
、temperature
、humidity
、windy
四个特征,以及 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. 决策树的构建
核心逻辑是递归选择最优特征划分数据集。从根节点启动,计算每个特征(如 outlook
、temperature
等 )对结果的区分能力,挑选最能让数据 “纯净” 划分的特征(使同一分支样本尽可能属于同一类别 ),生成子节点;对子节点重复该过程,直至满足停止条件(比如样本类别已一致,或无新特征可用于划分 )。
二、熵:衡量数据混乱度
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.971overcast
类样本 “play” 结果全为 “yes” → 熵 H ( D o v e r c a s t ) = 0 H(D_{overcast}) = 0 H(Dovercast)=0rainy
类中,“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 。实际应用中,需计算其他特征(如 temperature
、humidity
等 )的信息增益,选取增益最大的特征作为根节点的划分依据。
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 ),不再生成子节点,避免模型学习 “无关细节”。
六、决策树中的后剪枝处理
后剪枝是在构建完完整决策树后,反向进行剪枝操作:从叶子节点往根节点遍历,判断 “剪掉子树,用子树多数样本的类别作为叶子结点结果” 是否能提升模型泛化能力(可通过验证集测试,若剪枝后误差降低则保留剪枝 ),最终保留简洁且泛化效果好的树结构。
七、实战:用天气数据构建决策树
- 计算熵与信息增益:按前述方法,计算
outlook
、temperature
等各特征的信息增益,会发现 “outlook” 特征的信息增益相对较高,可将其选为根节点的划分特征。 - 递归划分:对根节点划分后的子数据集(如 “outlook=sunny” 对应的 5 条数据 ),重复计算子特征的信息增益,持续选择最优特征划分(比如进一步用 “humidity” 划分 ),直至满足停止条件。
- 剪枝优化:可采用预剪枝(如限制决策树深度为 3 )或后剪枝(对比验证集误差 )调整树结构,最终得到可解释性强、泛化效果好的决策树。比如根节点为 “outlook” ,延伸出 “sunny→humidity 判断→play 结果” 等规则,直观呈现天气特征与 “是否打球” 决策的关联。
最终得到可解释性强、泛化效果好的决策树。比如根节点为 “outlook” ,延伸出 “sunny→humidity 判断→play 结果” 等规则,直观呈现天气特征与 “是否打球” 决策的关联。