决策树全管道实战:深度扫描、代价剪枝与诚实的实验结论(scikit-learn 1.8 实测)
决策树教程常见的失真是「调参必提剪枝」——好像不剪枝就不专业。这个实战套件跑完整管道后给了一个诚实的结论:在 Wine 数据集上,深度限制已经足够,ccp 剪枝最优 alpha 就是 0(无增益),并且如实写进结果。机器生成 metrics.json、全程 random_state=42,每个数字都能复现。
一、数据与管道
数据用 scikit-learn 内置 Wine 数据集(178 样本、13 维、3 类,7:3 分层划分)。管道六阶段:基线模型 → 深度曲线扫描 → 代价复杂度剪枝 → 评估可视化 → 模型落盘 → 批量预测示例,由 main.py 一键跑完。
二、三步跑通
pipinstall-rrequirements.txt# scikit-learn / matplotlib / joblibpython main.py# 指标+图表+模型一次产出python predict_demo.py# 加载模型批量预测 5 个新样本二点五、三步复现之外的产出物
main.py 跑完 outputs/ 下五类产物一次齐:metrics.json(机器生成指标)、tree_rules.txt(可读 if-else 规则)、深度曲线/混淆矩阵/特征重要性三张 150dpi 图、joblib 模型文件、预测示例脚本——报告、答辩、复现实验三头都要用的东西一次备齐。
三、实测结果与两个「诚实时刻」
基线(不限深度)训练集 100%、测试 96.30%、深度 4/8 叶片——教科书级过拟合实证。深度扫描 1~15(5 折分层 CV)给出深度 3 最优、CV 均值 89.50%,深度 ≥4 后不再提升。最终模型 max_depth=3:测试准确率 96.30%、macro F1 0.9638、仅 7 个叶片。
| 阶段 | 关键配置 | 结果 |
|---|---|---|
| 基线 | 默认基尼不限深 | 训练 100% / 测试 96.30% |
| 深度扫描 | 5 折分层 CV | depth=3 最优 89.50% |
| 最终模型 | max_depth=3 | F1 0.9638 仅 7 叶片 |
两个诚实时刻值得单独说:其一,ccp_alpha 路径扫描的最优值就是 0——深度限制已足够,剪枝在本数据集无增益,套件没有为了「显得专业」硬凑剪枝收益;其二,批量预测 5 个样本全部命中且置信度 100%,套件如实标注了原因(这 5 行来自数据集前 5 行、同类聚集),而不是吹成「模型很强」。outputs/tree_rules.txt 还输出了可读版 if-else 规则树——答辩被问「模型内部是什么」时直接念规则即可。混淆矩阵、特征重要性、深度曲线三张 150dpi 图随包内置,报告配图齐了。
📦 本文对应的完整管道源码与实测产物已整理上传:点击查看资源包