决策树学习全解析:从理论到实战
文章目录
- 一、何为决策树
- 1. 决策树的组成
- 2. 决策树的构建
- 二、熵:衡量数据混乱度
- 1. 熵的作用
- 2. 熵的定义
- 3. 熵的计算(以天气数据为例)
- 4. 条件熵的引入
- 5. 条件熵的计算(以特征“outlook”为例)
- 三、划分选择:选最优特征的“标尺”
- 1. 信息增益(ID3算法标准)
- 2. 信息增益率(C4.5算法标准)
- 3. 基尼系数(CART算法标准)
- 4. 基尼增益
- 5. 基尼增益率
- 四、决策树中的连续值处理
- 五、决策树中的预剪枝处理(正则化)
- 六、决策树中的后剪枝处理
- 七、实战:用天气数据构建决策树
决策树作为机器学习中经典的分类与回归工具,凭借直观易懂、可解释性强等优势,在众多场景广泛应用。本文结合理论架构与实际天气数据集,深入拆解其核心知识,助力你从零到一掌握原理与应用。
一、何为决策树
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. 熵的定义
对于样本集合 DDD,若包含 kkk 类样本,第 kkk 类样本占比为 pkp_kpk,则熵的计算公式为 H(D)=−∑k=1npklog2pkH(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)=−(914log2914+514log2514)≈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(D∣A) 用于衡量 “已知特征 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)=−(35log235+25log225)≈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.971overcast
类样本 “play” 结果全为 “yes” → 熵 H(Dovercast)=0H(D_{overcast}) = 0H(Dovercast)=0rainy
类中,“play=yes” 有 3 条,“play=no” 有 2 条 → 熵 H(Drainy)=−(35log235+25log225)≈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(D∣outlook)=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(D∣A),用于衡量 “用特征 AAA 划分数据集后,熵的下降幅度” 。下降幅度越大,说明该特征对分类结果的区分能力越强。
以 “outlook” 特征为例,Gain(D,outlook)=0.940−0.693=0.247Gain(D,outlook) = 0.940 - 0.693 = 0.247Gain(D,outlook)=0.940−0.693=0.247 。实际应用中,需计算其他特征(如 temperature
、humidity
等 )的信息增益,选取增益最大的特征作为根节点的划分依据。
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∣log2∣Dv∣∣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∣ (VVV 是特征 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)=1−∑k=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=1V∣D∣∣Dv∣Gini(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 ),不再生成子节点,避免模型学习 “无关细节”。
六、决策树中的后剪枝处理
后剪枝是在构建完完整决策树后,反向进行剪枝操作:从叶子节点往根节点遍历,判断 “剪掉子树,用子树多数样本的类别作为叶子结点结果” 是否能提升模型泛化能力(可通过验证集测试,若剪枝后误差降低则保留剪枝 ),最终保留简洁且泛化效果好的树结构。
七、实战:用天气数据构建决策树
- 计算熵与信息增益:按前述方法,计算
outlook
、temperature
等各特征的信息增益,会发现 “outlook” 特征的信息增益相对较高,可将其选为根节点的划分特征。 - 递归划分:对根节点划分后的子数据集(如 “outlook=sunny” 对应的 5 条数据 ),重复计算子特征的信息增益,持续选择最优特征划分(比如进一步用 “humidity” 划分 ),直至满足停止条件。
- 剪枝优化:可采用预剪枝(如限制决策树深度为 3 )或后剪枝(对比验证集误差 )调整树结构,最终得到可解释性强、泛化效果好的决策树。比如根节点为 “outlook” ,延伸出 “sunny→humidity 判断→play 结果” 等规则,直观呈现天气特征与 “是否打球” 决策的关联。
最终得到可解释性强、泛化效果好的决策树。比如根节点为 “outlook” ,延伸出 “sunny→humidity 判断→play 结果” 等规则,直观呈现天气特征与 “是否打球” 决策的关联。