共计 1352 个字符,预计需要花费 4 分钟才能阅读完成。
基础概念对比
决策树家族中,ID3/C4.5 和 CART 是两大主流算法,其核心差异体现在分裂准则上:

- ID3/C4.5 的信息增益准则
- 信息熵计算:$H(D) = -\sum_{k=1}^K p_k\log_2 p_k$
- 信息增益:$Gain(D,a) = H(D) – \sum_{v=1}^V \frac{|D^v|}{|D|}H(D^v)$
-
存在偏向选择取值多的特征的问题,C4.5 通过增益率改进
-
CART 的基尼系数准则
- 基尼指数:$Gini(D) = 1-\sum_{k=1}^K p_k^2$
- 基尼增益:$\Delta Gini = Gini(D) – \sum_{v=1}^V \frac{|D^v|}{|D|}Gini(D^v)$
- 计算量更小且对异常值不敏感
代码实战对比
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
# 数据准备
iris = load_iris()
X, y = iris.data, iris.target
# 模型定义
dtc_entropy = DecisionTreeClassifier(criterion='entropy') # ID3/C4.5 风格
dtc_gini = DecisionTreeClassifier(criterion='gini') # CART 风格
# 深度影响测试
max_depths = range(1, 6)
entropy_scores, gini_scores = [], []
for depth in max_depths:
dtc_entropy.set_params(max_depth=depth)
dtc_gini.set_params(max_depth=depth)
dtc_entropy.fit(X, y)
dtc_gini.fit(X, y)
entropy_scores.append(dtc_entropy.score(X, y))
gini_scores.append(dtc_gini.score(X, y))
# 可视化对比
plt.plot(max_depths, entropy_scores, 'bo-', label='Entropy')
plt.plot(max_depths, gini_scores, 'r^-', label='Gini')
plt.xlabel('Max Depth')
plt.ylabel('Training Accuracy')
plt.legend()
plt.show()
生产环境关键考量
- 连续特征处理优势
- CART 通过二分法处理连续特征,只需考察 $n-1$ 个分割点
-
ID3/C4.5 需要排序后计算所有可能分割点的信息增益
-
过拟合解决方案
- 预剪枝:限制 max_depth/min_samples_split 等参数
- 后剪枝:CCP 代价复杂度剪枝(仅 CART 支持)
- 交叉验证选择最优剪枝参数
三大常见陷阱
- 类别不平衡时,基尼系数会偏向多数类
- 忽略特征缩放会影响连续特征的最优分割点选择
- 未设置 min_samples_leaf 导致过拟合
开放性问题
- 为什么实际工程中更多使用 CART 而非 ID3/C4.5?
- 在集成学习中,CART 作为基学习器有哪些独特优势?
- 如何处理高基数类别特征对树模型的影响?
正文完
