Day 109 — 练习清单:决策树与随机森林
✅ 今日完成清单
- [ ] 理解决策树的分裂原理(信息增益/基尼系数)
- [ ] 掌握 sklearn 决策树分类器的使用
- [ ] 理解随机森林的 Bagging 集成原理
- [ ] 学会分析特征重要性
- [ ] 完成信用风险评估实战
- [ ] 能解释为什么随机森林比单棵决策树更稳定
📝 基础练习题
练习1:手动计算基尼系数
假设一个节点有 10 个样本:6个属于A类,4个属于B类。
- 计算该节点的基尼系数
- 如果按特征 X 分裂后,左子节点 5个样本(4A, 1B),右子节点 5个样本(2A, 3B),计算分裂后的加权基尼系数
- 这次分裂的基尼增益是多少?
💡 提示
基尼系数公式: 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):
- 训练一个不加限制的决策树,观察训练/测试准确率差距
- 分别设置
max_depth=3、max_depth=5、max_depth=10,记录结果 - 用
min_samples_leaf参数从 1 调到 20,观察模型变化 - 画出 max_depth 与测试准确率的关系图
练习3:随机森林 vs 决策树
在同一数据集上:
- 分别用决策树和随机森林训练模型
- 运行 5 次交叉验证,记录每次的 F1 分数
- 对比两个模型的平均 F1 和标准差
- 思考:为什么随机森林的标准差更小?
🚀 进阶挑战题
挑战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:模型可解释性报告
为信用风险模型编写一份"模型可解释性报告",包含:
- 全局解释:哪些特征最重要?为什么?
- 局部解释:给定一个客户,模型为什么做出这个预测?
- 业务建议:基于特征重要性,银行应该关注哪些指标?
- 公平性检查:模型是否对不同年龄/教育程度的群体有偏见?
💡 提示:使用 SHAP 库可以得到更好的局部解释 (
pip install shap)
📚 拓展阅读
💡 完成所有基础练习 = ✅ 通过 🌟 完成任意挑战题 = 获得额外经验