基尼不纯度与划分增益
基尼不纯度衡量节点类别混杂,决策树选择降低加权不纯度最多的划分。
学习前需要掌握
背景与问题
分类树需要判断把一个节点拆成两个子节点是否让标签更集中。只看拆分后一个子节点很纯是不够的,还必须考虑其他子节点与各自样本数量。
基尼不纯度是一种衡量节点标签混杂程度的标准,划分增益则比较拆分前后加权不纯度的下降。
概念定义
节点的基尼不纯度为 1 减各类别比例平方之和。只有一个类别时为 0;同一类别集合下,分布越均匀通常越不纯。
一个候选划分的增益,是父节点不纯度减去子节点按样本比例加权的不纯度。它衡量该次局部划分,不等同于整棵树的最终泛化能力。
直观理解
把节点想成混合了不同颜色的球。把球分成两个袋子后,要同时看两个袋子的颜色组成,还要看每个袋子里有多少球,不能让一个很小的纯袋子掩盖大袋子的混乱。
同样四条标签,两个阈值的增益不同
令有序特征为 [1,2,3,4],标签为 [0,0,1,1],父节点 Gini=0.5。阈值 2.5 把两类完全分开,两个子节点 Gini 都是 0,增益为 0.5。
阈值 1.5 则得到左侧 [0] 和右侧 [0,1,1]。右侧 Gini=4/9,子节点加权不纯度为 1/4×0+3/4×4/9=1/3,因此增益约为 0.1667;不能把两个子节点简单平均。
核心原理
分类树会枚举特征和候选阈值,计算局部增益,再贪心选择当前最有利的划分。贪心过程并不保证得到所有可能树中的全局最佳结构。
子节点必须按其样本数量加权。若左右分别有 1 条和 99 条记录,直接平均两个不纯度,就把它们错误当成同样大的人群。
最大化训练增益可能追随噪声。最大深度、最小叶样本数和剪枝等限制,需要按独立验证选择;纯叶子多不等于对新数据可靠。
基尼增益还影响常见树重要性,但频繁获得切分机会的特征可能被偏爱。由不纯度下降得到的重要性,不应直接解释成因果作用。
数学表达
核心表达
枚举特征和候选阈值,计算 Gain=父 Gini-子节点加权 Gini,贪心选择最大增益。
变量含义
变量定义与本页概念定义一致,代码中的同名变量保持相同语义。
计算步骤
- 1统计父类别比例
- 2生成候选阈值
- 3分左右
- 4计算加权 Gini
代码对应位置
示例 1基尼不纯度与划分增益:最小可验证示例:把正文原理映射为可检查的代码行为。
计算与实现步骤
- 统计父类别比例
- 生成候选阈值
- 分左右
- 计算加权 Gini
- 选择最大 Gain
- 递归
代码实现
示例 1
基尼不纯度与划分增益:最小可验证示例
example_01.py用途:把正文原理映射为可检查的代码行为。
import numpy as np
def gini(y):
_, counts = np.unique(y, return_counts=True)
p = counts / len(y)
return 1 - np.sum(p**2)
print(gini(np.array([0,0,1,1])))代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
把正文原理映射为可检查的代码行为。
y- 目标标签或连续目标值。
Step 1 · 1–6 行
导入当前步骤需要的数值计算、预处理、模型或评价工具。依赖集中写在代码开头,便于复现。
import numpy as np
def gini(y):
_, counts = np.unique(y, return_counts=True)
p = counts / len(y)
return 1 - np.sum(p**2)
print(gini(np.array([0,0,1,1])))预期输出或运行结果
0.5。 0.5
常见错误 · 2 条
- 把 Gini 当最终测试指标
- 忽略子节点样本权重
实际应用
- 分类树分裂
- 树结构解释
常见错误
- 把 Gini 当最终测试指标
- 忽略子节点样本权重
推荐学习资料
参考库不会生成虚假资源或无效外部链接。