← 返回 Day 109 正文

Day 109 · 练习与清单

Day 109 — 练习清单:决策树与随机森林

✅ 今日完成清单


📝 基础练习题

练习1:手动计算基尼系数

假设一个节点有 10 个样本:6个属于A类,4个属于B类。

  1. 计算该节点的基尼系数
  2. 如果按特征 X 分裂后,左子节点 5个样本(4A, 1B),右子节点 5个样本(2A, 3B),计算分裂后的加权基尼系数
  3. 这次分裂的基尼增益是多少?
💡 提示 基尼系数公式: Gini(D) = 1 - Σ(p_k²) 加权基尼 = (|D_left|/|D|) × Gini(D_left) + (|D_right|/|D|) × Gini(D_right) 基尼增益 = Gini(父) - 加权基尼(子)

练习2:决策树参数调优

使用 sklearn 的乳腺癌数据集 (sklearn.datasets.load_breast_cancer):

  1. 训练一个不加限制的决策树,观察训练/测试准确率差距
  2. 分别设置 max_depth=3、max_depth=5、max_depth=10,记录结果
  3. 用 min_samples_leaf 参数从 1 调到 20,观察模型变化
  4. 画出 max_depth 与测试准确率的关系图

练习3:随机森林 vs 决策树

在同一数据集上:

  1. 分别用决策树和随机森林训练模型
  2. 运行 5 次交叉验证,记录每次的 F1 分数
  3. 对比两个模型的平均 F1 和标准差
  4. 思考:为什么随机森林的标准差更小?

🚀 进阶挑战题

挑战1:OOB 评估验证

python
# 创建一个实验,验证 OOB 评分与交叉验证评分的一致性
# 1. 用不同随机种子训练 10 个随机森林模型
# 2. 记录每个模型的 OOB 评分和 5-fold CV 评分
# 3. 计算两者之间的相关系数
# 4. 绘制散点图

挑战2:不平衡数据处理

python
# 信用风险场景中,违约样本通常远少于正常样本
# 1. 生成一个不平衡数据集(违约率 5%)
# 2. 分别使用以下策略:
#    a) 不做处理
#    b) class_weight='balanced'
#    c) SMOTE 过采样
# 3. 对比三种策略在 Recall(违约类)上的表现

挑战3:模型可解释性报告

为信用风险模型编写一份"模型可解释性报告",包含:

  1. 全局解释:哪些特征最重要?为什么?
  2. 局部解释:给定一个客户,模型为什么做出这个预测?
  3. 业务建议:基于特征重要性,银行应该关注哪些指标?
  4. 公平性检查:模型是否对不同年龄/教育程度的群体有偏见?

💡 提示:使用 SHAP 库可以得到更好的局部解释 (pip install shap)


📚 拓展阅读


💡 完成所有基础练习 = ✅ 通过 🌟 完成任意挑战题 = 获得额外经验