TL;DR
- 场景:需要构建可解释的分类模型,或进行特征分箱与规则提取
- 结论:决策树通过信息增益、基尼系数等指标选择最优分裂属性,ID3/C4.5/CART 分别采用不同分裂准则,集成方法(随机森林、GBDT)可显著提升泛化能力
- 产出:掌握决策树核心原理,理解熵、条件熵、信息增益率计算方法,能根据业务场景选择合适的决策树算法

版本矩阵
| 功能 | 状态 | 说明 |
|---|---|---|
| ID3 算法(信息增益) | ✅ 已验证 | 使用信息熵增益选择分裂属性,倾向于选择值较多的特征 |
| C4.5 算法(信息增益率) | ✅ 已验证 | 用信息增益除以特征熵,克服信息增益的偏向问题 |
| CART 算法(基尼系数) | ✅ 已验证 | 既可用于分类也可用于回归,二叉树结构 |
| 决策树剪枝 | ✅ 已验证 | 预剪枝(提前停止)、后剪枝(先生成后修剪) |
| 随机森林集成 | ✅ 已验证 | Bagging + 决策树,多棵树投票/平均提升泛化能力 |
| GBDT 系列(XGBoost/LightGBM/CatBoost) | ✅ 已验证 | 梯度提升框架,序列化构建提升模型性能 |
决策树简介
基本介绍
决策树是一种非线性有监督分类模型,程序设计中的条件分支结构就是 if-else 结构
决策树的特点: ● 是一种树形结构,本质上一颗由多个判断节点组成的树 ● 其中每个内部节点表示一个属性上的判断 ● 每个分支代表一个判断结果的输出 ● 最后每个叶节点比代表一种分类结果
下面是一个简单的例子: 
核心思想
通过一系列"如果 ... 那么 ..."的分裂规则,把复杂的决策过程拆解成若干简单判断,最终落到叶节点给出预测或决策。
适用任务
分类(Classification)与 回归(Regression)皆可;也常用于特征工程(如自动分箱)与可解释性分析。
代表算法
ID3、C4.5、CART(最常用),以及衍生的集成方法:随机森林(Random Forest)、梯度提升树(GBDT / XGBoost / LightGBM / CatBoost)。
结构与术语
shell
root
┌─┴───────┐
internal internal
node1 node2
┌──┴──┐ │
leaf leaf leaf
- 根节点 (root):包含完整样本集
- 内部节点 (internal/decision node):依据某特征和阈值把样本划分成更"纯净"的子集
- 叶节点 (leaf / terminal node):输出类别标签或数值预测结果
- 路径 (path):从根到叶的一条决策链,相当于一个规则组合
分类原则
要按照前四列的信息,使用决策树预测车祸的发生,如何选择根节点呢?
按照天气
按照"天气"列作为根节点,使用决策树预测,如图: 
按照温度
按照"温度"列作为根节点,使用决策树预测,如图: 

按照湿度

按照风

简单总结
只有使用天气作为根节点时,决策树的高度相对低而且树的两边能将数据分类的更彻底(其他列作为根节点时,树两边分类不纯粹,都有天气)
分类原则总结: 决策树构建过程就是数据不断分裂的递归过程,每一次分裂,尽可能让类别一样的数据在树的一边,当树的叶子节点的数据都是一类的时候,则停止分类。这样分类的数据,每个节点两边的数据不同,将相同的数据分类到树的一侧,能将数据分类的更加纯粹,减少树的高度和训练决策树的迭代次数。
分类原理
熵的介绍
物理学上,熵 Entropy 是 "混乱"程度的量度,系统越有序,熵值越低,系统越混乱或者分散,熵值越高。1948年香农提出了信息熵的概念。
如何衡量纯粹和混乱(信息量的大小)指标,可以使用信息熵或者基尼系数。
熵的定义如下:
● 某个类别下信息量越多,熵越大 ● 信息量越少,熵越小 ● 假设"有工作"这列下只有"否"这个信息类别,那么"有工作"这列的信息熵为:H=-(1xlog1)=0
上图中,如果按照"有工作"、"年龄"、"信贷情况"、"有房子"列使用决策树来预测"类别"。如何选择决策树的根节点分类条件,就是找到某列作为分类条件时,使"类别"这列分类更彻底,也就是找到在某个列作为分类条件下时,"类别"信息熵相对于没有这个分类条件时信息熵降低最大(降低最大,就是熵越低,分类越彻底),这个条件就是分类节点的分类条件,这里要使用条件熵和信息增益。
条件熵
定义:在某个分类条件下某个类别的信息熵叫做条件熵,在知道Y的情况下,X的不确定性。

信息增益
定义:代表熵的变化程度,分类前的信息熵减去分类后的信息熵
在构建决策树时,选择信息增益大的属性作为分类节点的方法也叫ID3分类算法。
基尼系数
基尼系数也可以表示样本的混乱程度,公式如下:
其中,K代表当前列表有K个类别。 基尼系数越小代表信息越纯,类别越少,基尼系数越大,代表信息越混乱,类别越多。基尼增益的计算和信息增益相同,假设某列只有一类值,这列基尼系数为0。
信息增益率
在上图中,如果将"记录ID"也作为分类条件的话,由于"记录ID"对于"是否贷款"列的条件熵为0,可以得到"是否贷款"在"记录ID"这个分类条件下信息增益最大。如果选择"记录ID"作为分类条件,可以将样本完全分开,分类后的信息熵为0,分类结果完全正确,信息增益最大,这种方式我们得到了一颗庞大的树,这种分类方式是不合理的。 使用信息增益来筛选分类条件,更倾向于更混杂的属性,容易出现你过拟合的问题,可以使用信息增益率来解决这个问题。
例如在"记录ID"条件下,"是否贷款"的信息增益最大,信息熵H(记录ID)也比较大,两者相除就是在"记录ID"条件下的增益率,结果比较小,笑出了当某些属性比较混杂时,使用信息增益来选择分类条件的弊端。 使用信息增益率来构建决策树的算法也叫C4.5算法,一般对于信息增益来说,选择信息增益率选择分类条件比较合适。
错误速查卡
| 症状 | 根因 | 定位 | 修复 |
|---|---|---|---|
| 决策树过拟合,训练集准确率高但测试集低 | 树深度过大,节点过多,对训练数据过度拟合 | 观察验证集曲线,检查树的深度和叶节点数量 | 采用预剪枝(max_depth、min_samples_split)或后剪枝,降低模型复杂度 |
| 信息增益偏向选择取值多的特征 | 信息增益计算公式倾向于选择分支多的属性 | 分析特征取值数量与信息增益的关系 | 使用 C4.5 算法,采用信息增益率替代信息增益 |
| CART 树二叉树结构导致树过深 | 二叉分裂每次只能将数据分成两部分,可能需要更多层才能达到同等纯度 | 检查树的深度和每个叶节点的样本量 | 结合随机森林或梯度提升方法提升效果 |
| 连续值特征处理困难 | 连续变量取值无限,无法直接用于分裂 | 检查连续特征的分裂点计算 | 对连续特征进行离散化(分箱),或使用 C4.5/CART 的连续值处理机制 |
| 决策树对数据噪声敏感 | 单个样本的异常值可能影响分裂点的选择 | 检查数据质量,观察异常样本的影响 | 在集成学习方法中使用多棵树降低噪声影响(随机森林) |