实验 06 / 约 55 分钟
发现过拟合,而不是庆祝高分
为什么练习做得好,换个问题就不行?
未开始这和大模型有什么关系?
模型在训练数据上表现好,不自动保证它在新问题上也好。本节让复杂曲线贴近训练点,再用另一批点检查,这能帮助理解泛化。
这个实验能解释到哪里:过拟合不等于幻觉的全部原因。大模型生成不实内容还与知识缺口、上下文、训练目标和生成方式等有关;这条曲线不能诊断一个聊天模型为何答错。
动手时带着这个问题:把阶数从 2 改成 8,对照训练和验证误差。不要只看“做过的题”得分。
还没建立全貌?先看一次回答的完整过程 ↗LAB / GENERALIZE寻找刚刚好的复杂度
试一试依次比较 1、2、8 阶:8 阶几乎穿过训练点,但验证误差会上升。
同一个原理 · 两种讲法
先理解,再往深处走。
过于简单会漏掉规律
这批数据整体呈弯曲形状。用一条直线去拟合,会错过弯曲趋势,这叫欠拟合。
过于复杂会记住噪声
不断提高曲线阶数,它能越来越贴近训练点。但这些点带有扰动,精确穿过它们不一定代表学到了真正规律。
用另一批点检查
白点用于拟合,橙色点用于验证。拖动阶数,对比训练和验证误差。这里是真正解方程拟合曲线;这组固定数据只是一个演示,不保证所有数据都在同一个阶数最好。
在线实验的数学设定
在线以 9 个固定带扰动的训练点拟合 d 阶多项式 ŷ=Σⱼ₌₀ᵈaⱼxʲ,参数量为 d+1。实现用范德蒙德矩阵的正规方程及主元消元解最小二乘,仅适用于此小规模演示;病态系统在工程中宜使用更稳定的分解。8 个验证点取 y=x²,没有参与拟合。纵轴随曲线范围自动缩放;请按 MSE 数值比较表现。验证集被反复观察后可用于选择阶数,不能再充当最终测试集。
前置知识
- 给模型留一场真正的考试
本节目标
- 从训练与验证误差识别问题
- 用基线与对照实验决定复杂度
记住样本与学到规律
模型可以把每个训练点记下来,在训练集上误差为零,但对新点毫无帮助。高容量模型提供更大的表达空间,同时也可能把噪声拟合进去。容量增加不是准确性的保证。
做一个故意失败的模型
实验生成 y≈2x+1 的数据。第一个模型只记忆训练样本,遇到新 x 就返回 0;第二个模型拟合直线。记忆模型训练误差为零,但在新点上明显更差。这是一个教学反例,不是对所有复杂模型的结论。
同时看两条曲线
训练误差和验证误差都高,可能是模型太简单、特征不够或优化失败;训练误差低而验证误差高,则应检查过拟合、泄漏和分布差异。曲线提供线索,具体原因还要做实验验证。
一次只改变一个重要因素
先保留简单基线,再比较特征、正则化或数据处理的变化。记录同一划分与同一指标,避免把切分变化误认为模型进步。最终测试集不参与选型。
先比较基线,再解释训练误差与验证误差之间的差距。Python / 只用标准库 / 无需 GPU
在自己的电脑上复现
运行 generalize 实验。解释为什么应选验证误差更低的模型;再指出“在训练集上 100% 正确”这个说法缺少哪些信息。
下载实验代码 ↓保存为 ai_lab.py,在 Python 3.10 或以上运行。本单元使用人造数据,不调用外部服务。Python 练习与在线实验采用各自的小数据例子,练习相同原理,不要求数值逐项相同。
python ai_lab.py --lesson generalize程序包含结果断言;如果不满足预期会报错。第 7 节会在运行目录生成 report.json。运行后,回到笔记写下你的观察与改动。
继续读原始资料
本站提供原创导读;以下链接前往资料原站。仅本成人学习栏目提供这些精选来源。
scikit-learn · 欠拟合与过拟合 ↗英文 · 观察多项式次数与测试误差核对日期 2026-09-21scikit-learn · 常见陷阱与数据泄漏 ↗英文 · 阅读数据泄漏与一致预处理核对日期 2026-09-21只对你可见
我的学习记录
登录后可保存笔记、打卡和学习进度。
删除本节的私密记录
删除本节进度、笔记、关联与打卡;其他课程和原作品保留。
验证方式 / 本节三题知识检验 v1
合上导读,检验一下
全部答对后记录“通过验证”。这表示通过本节知识小测,不等同于独立完成代码、人工评阅或能力认证。