决策树 (Decision Tree)
核心思想
决策树通过递归地选择最优特征并按其取值将数据集分割为子集,构建一棵树状判别结构。每个内部节点是一个特征判断,每个叶节点是一个类别标签(分类)或回归值。
信息论基础
信息熵 (Shannon Entropy)
对于随机变量
- 当所有类别等概率时,
取最大值 - 当所有样本属于同一类别时,
条件熵
给定特征
ID3 算法:信息增益
信息增益 = 划分前后熵的减少量:
ID3 算法选择信息增益最大的特征进行分割。
缺陷
信息增益偏向取值数目较多的特征。例如"身份证号"的信息增益极高(每个值对应唯一样本),但毫无泛化能力。
C4.5 算法:信息增益率
为修正 ID3 的偏好,C4.5 引入特征固有值(Intrinsic Value):
信息增益率:
CART 算法:基尼系数
基尼不纯度 (Gini Impurity):
对于特征
CART 选择划分后基尼不纯度最小的特征。
基尼系数 vs 信息熵
二分类时,令
- 熵:
- 基尼:
两者趋势一致,但基尼系数计算更快(无需对数运算)。
剪枝策略
预剪枝
在构建树的过程中,提前终止分裂。常用条件:
- 节点样本数低于阈值
- 树深度达到上限
- 信息增益低于阈值
后剪枝(代价复杂度剪枝)
CART 使用代价复杂度参数
其中
回归树
回归树的分割准则为平方误差最小化:
其中
代码对应
bash
python -m pipelines.classification.decision_tree # 分类
python -m pipelines.regression.decision_tree # 回归