第4章项目:跳远成绩预测器
核心问题:同一个模型、同一份干净测试集,只在训练数据中加入一条异常记录,结果会发生什么?
1. 项目简介
你将用一份虚拟体测表建立一个很小的线性回归基线,用身高、体重估计立定跳远距离。接着只向训练集加入一条 175 cm、60 kg、1800 cm 的错误记录,重新训练同一个模型,观察样例预测、测试集 MAE 和图形怎样变化。最后,你要设计数据校验,让错误尽量在进入模型前被发现。
这不是体育评价系统。数据是人工合成的,模型没有看见动作技术、训练经验和身体状态,输出只能帮助理解机器学习机制。
2. 完成后能看到什么
- 一张正常模型与污染模型的预测对照图;
- 两组样例预测和干净测试集 MAE;
- 被异常值明显拉动的模型参数;
- 一份数据校验报告;
- 你与大语言模型协同修改并人工复核的证据。
可先打开 index.html 查看无需安装的原理预览;真正的实验和修改都在 Notebook 中完成。
3. 任务合同
| 项目 | 约定 |
|---|---|
| 输入 | 课程提供的36条虚拟记录;一条人为注入的训练异常记录 |
| 模型 | 确定性的普通最小二乘线性回归;可选Keras Dense(1) 对照 |
| 输出 | 预测、MAE、模型参数、图、校验结果和个人结论 |
| 成功标准 | 固定划分、同一干净测试集、同一样例,只改变训练异常值;结果可复现 |
| 明确不做 | 不使用真实学生数据;不把预测当成绩;不自动删除所有异常值 |
系统链路:
合成CSV → 字段/范围检查 → 固定训练/测试划分 → 线性模型
→ 样例预测 + 干净测试集MAE → 异常训练对照 → 人工解释与复核
4. 软件与文件
- 软件:VS Code、Jupyter、Python 3.10~3.14。
- 必需库:NumPy、Matplotlib;Notebook自身不依赖网络。
- 可选库:TensorFlow/Keras。没有安装时,可选单元会说明跳过并显示离线参考,不影响基础任务。
- 学生入口:
../notebooks/ch04_student.ipynb。 - 印刷教材兼容入口:
../../../notebooks/ch04_data_model_prediction.ipynb。 - 数据:
../../../samples/ch04_fitness_data.csv;字段解释见../data/DATA_CARD.md。
建议在本章目录中运行:
python -m pip install -r requirements.txt
python -m jupyter lab
5. 90分钟课堂路线
| 时间 | 学生活动 | 可见里程碑 |
|---|---|---|
| 0~10分钟 | 阅读数据卡、确认特征和标签、写趋势预测 | 写下“数据→模型→预测” |
| 10~25分钟 | 运行干净基线 | 得到样例预测和MAE |
| 25~40分钟 | 注入1800 cm异常值并重新训练 | 得到污染结果和对照图 |
| 40~55分钟 | 运行数据校验 | 看见异常记录在训练前被标记 |
| 55~70分钟 | B档二选一修改 | 保存修改前预测与修改后数字 |
| 70~82分钟 | 与Qwen/DeepSeek或Qwen Code协同解释 | 完成五段留痕和人工纠错 |
| 82~90分钟 | 验收与提交 | 形成结论和证据包 |
6. 学生必须作出的修改
二选一,只改变一个主变量:
- 修改
OUTLIER_JUMP_CM。先判断异常程度减小后,污染模型的测试MAE和样例预测会更接近还是更远离干净基线,再运行验证。 - 修改
VALID_RANGES["jump_distance"]的上限。先说明新范围为何适合你假设的人群,再验证1800 cm是否被拦截。注意:范围过窄可能把真实但少见的数据也标成异常。
改颜色、标题、姓名或文件名不算本章有效修改。
7. 与大语言模型协同
可在Qwen Code、Qwen Web或DeepSeek Web中使用以下请求,但只粘贴合成结果:
我正在做线性回归控制变量实验。正常和污染实验使用同一模型、同一干净测试集和同一样例,
只在训练集中改变了一条jump_distance记录。请先检查这个对照是否公平,再用趋势被异常点拉动
的思路解释预测和MAE变化;最后提出3条进入模型前的数据检查规则。不要把预测当成正式成绩。
你必须在Notebook中留下:原始意图、模型建议摘要、人工选择、实际改动与运行证据、最终判断。不要要求或提交模型隐藏的内部思维过程。
8. 关键原理
- 特征
height、weight是模型看见的输入;标签jump_distance是要学习的目标。 - 线性模型写作
预测 = 截距 + 身高系数×身高 + 体重系数×体重。训练就是从样本中估计三个参数。 - MAE 是测试样本上绝对误差的平均值。它直观,但不能解释原因、公平性或适用范围。
- 本实验让异常记录只进入训练集,测试集保持干净,因此观察的是“污染训练数据怎样改变模型”,不是让异常标签直接把评价指标做大。
- 数据校验应在训练前发生;被标记的记录仍需核对来源,而不是一律删除。
9. 验收清单
- [ ] 能指出两个特征和一个标签。
- [ ] 正常与污染实验使用同一固定干净测试集。
- [ ] 记录两组样例预测、MAE和参数。
- [ ] 至少用一张图和两个数字说明变化。
- [ ] 完成B档二选一修改,且改前有预测。
- [ ] 对AI解释至少核查两项,必要时明确纠正。
- [ ] 说明预测不能用于正式成绩或个人标签。
- [ ] 从头运行Notebook无报错;TensorFlow缺失只跳过可选对照。
开发者或教师可运行:
python tools/verify_ch04.py
10. 深入思考
- 如果测试集也含同一条1800 cm记录,MAE变化还只代表模型被带偏吗?
- 跳远20 cm一定是录入错误吗?如何区分错误数据与真实少见情况?
- 加入“每周训练次数”可能改善模型,但需要补充哪些数据质量和隐私检查?
11. 权威延伸
- Google机器学习速成课程:线性回归:理解模型、损失和梯度下降的进阶入口。
- TensorFlow中文教程:查看Keras模型训练的官方示例。
- Python中文文档:需要查阅Python语法或标准库时使用。
若外部网站暂时无法访问,本教程和Notebook已包含完成本章所需的全部原理与代码。