
🎯 博主简介
CSDN 「新星创作者」 ,人工智能技术领域博主,码龄 5 年 ,累计发布
190+ 篇原创文章,博客总访问量30万+浏览。
🚀 持续更新 AI 前沿实战知识,专注于 AI 技术实战、RAG 系统、Agent 应用开发与大模型工程化落地。目前主要更新方向包括:
- 🦞 最新 OpenClaw 教程 ---从入门到精通|AI 智能助手/自动化/Skills 实战(原 Clawdbot/Moltbot)
- ✨ Agent 记忆系统 --- 长期记忆、上下文管理与个性化智能体设计
🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥以下系列正在火热更新中🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥- 📘 图解机器学习合集 --- 用图解方式系统梳理机器学习核心概念,持续更新中
同时也会持续分享 AI 编程、Java 后端、Spring 生态、Transformer、大模型基础、计算机视觉 等方向内容,内容会尽量结合自己的学习记录、项目实践和踩坑经验来整理。
📱GZH:安逸Ai(科技前沿新闻,Github热门项目,最新免费资料...)- 网页观看完整系列合集:🌐 Anyi AI 学习资源站

训练、验证、测试:三分数据,缺一不可
上篇我们讲了数据和特征的关系,知道机器学习是从数据中提取规律的过程。但问题来了------拿到一堆数据之后,直接全部扔给模型训练,行不行?
不行。
很多人第一次训练模型时会遇到这个困惑:明明在训练数据上效果很好,测试时却一塌糊涂。准确率90%,一上线用户不买账。
问题很可能出在------根本没有正确划分数据。
为什么不能把所有数据都用来训练?
先问一个问题:机器学习到底在学什么?
不是为了考试。是为了在实际中也能用。
模型需要在没见过的数据上也能表现好。这种能力叫泛化能力。
如果把全部数据都拿去训练,会发生什么?
模型会"死记硬背"。
它不是在理解规律,是在背答案。
这像什么?像考试前把习题集答案全背下来。遇到新题就傻眼。
真正的学习不是这样的。真正的学习是理解解题思路,遇到没见过的题也能做对。
机器学习也一样。训练数据只是"教材",模型要从中提取规律,而不是记住每一个样本。
所以,必须留出"没见过的数据",用来检验模型到底是真的懂了,还是在背题。
三分天下:训练集、验证集、测试集
那么,数据到底怎么划分?
答案是:三分天下。
训练集:模型的"教材"。模型从中学习规律,反复调整参数。
验证集:训练过程中的"模拟题"。用来调整超参数,比如学习率、网络层数。
测试集:最终的"正式考试"。从未见过,用来评估模型的真实水平。
三者缺一不可。

打个比方更清楚。
想象一个学生的学习过程:
看教材学习 → 做模拟题找薄弱点、调整复习策略 → 参加正式考试
对应到机器学习:
训练集训练模型 → 验证集调整超参数 → 测试集最终评估
三个环节,缺一不可。
| 训练集 | 验证集 | 测试集 | |
|---|---|---|---|
| 作用 | 学习规律 | 调整超参数 | 评估真实水平 |
| 使用时机 | 训练过程中反复用 | 训练过程中用 | 训练完成后用一次 |
| 模型是否"见过" | 反复学习 | 见过(用于调参) | 从未见过 |
模型对训练集最熟悉,对验证集有一定了解,对测试集完全陌生。
最终在测试集上的表现,才是模型真正的"实力"。
为什么不能只用训练集和测试集?
有人会问:既然测试集是"最终考试",那我用训练集训练,训练完直接用测试集评估,不行吗?
不行。
因为训练过程中需要"模拟题"来调整。
什么是调整?比如学习率设多少合适?网络层数多少最好?
这些叫超参数。超参数不是模型自己学出来的,是人设定的。
需要不断尝试,找到最好的组合。
那用什么来试?
验证集。
但如果不用验证集,直接用测试集来调参呢?
这就是"数据泄露"。

问题在哪里?
你用正式考试的题目来练手。这不是"作弊"是什么?
结果是:测试集上的成绩被高估了。实际部署后效果会很差。
就像高考前老师把真题直接发给你做练习,你考得当然好。但换了新题就不行了。
验证集的职责是调参,测试集的职责是最终评估。两者必须分开。
各司其职,才能保证公平。
数据量不够怎么办?
理想情况下,数据越多越好。数据多了,随便划分都能hold住。
但现实中,数据往往不够。
最常见的划分比例是6:2:2------60%训练,20%验证,20%测试。
但如果总共只有1000条数据呢?
按6:2:2分,训练集600条,验证集200条,测试集200条。
200条能可靠评估吗?未必。
数据太少怎么办?
交叉验证。
具体怎么做?
把数据分成k份。比如k=5,就是把数据分成5份。
然后进行5轮训练:
第1轮:用第1份当验证集,其余4份训练
第2轮:用第2份当验证集,其余4份训练
第3轮:用第3份当验证集,其余4份训练
第4轮:用第4份当验证集,其余4份训练
第5轮:用第5份当验证集,其余4份训练
最后,把5轮的结果取平均。

这样相当于把每条数据都当过验证数据。结果更可靠。
类比一下:只有20道题怎么练?
把所有题做5遍。每次用不同的4道当模拟题,剩下1道检验。
这样虽然题少,但覆盖充分。
交叉验证特别适合小数据集。
k一般取5或10。k太大计算成本高,k太小结果不稳定。
实操中的注意事项
说了这么多理论,实际操作时还有几个坑要注意。
第一:三个数据集必须独立同分布。
不能有交集。训练集里有的数据,验证集、测试集里不能有。
不能有数据泄露,就是训练时不小心看到了验证集或测试集的内容。
第二:比例不是绝对的。
数据量越大,需要的验证和测试比例越小。
为什么?
因为大数据集已经足够有代表性,少量数据就能可靠评估。
小数据集就不行,需要更多比例来保证评估的统计显著性。
第三:测试集要"冷存放"。
测试集只到最后才用。用一次,记录结果,然后"忘掉"它。
如果反复看测试集,会不自觉地针对它调优。这是人性,难以避免。
所以很多团队的做法是:测试集由专人保管,不对开发者开放。
只有到了最终评测节点,才"开封"。
第四:时间序列数据要特殊处理。
如果数据有时间顺序,比如预测下个月销量,不能随机划分。
要按时间切:用过去的数据训练,预测未来的。
如果随机划分,会用"未来数据"训练去预测"过去数据",那是作弊。

数据划分的一点心得
说到底,数据划分是为了解决一个问题:
模型到底是真的学到了规律,还是只是记住了训练数据?
验证集和测试集,就是用来回答这个问题的"探路石"。
最后说几个我踩过的坑吧,也许对你有帮助:
刚学机器学习那会儿,我犯过一个低级错误------用测试集调参。就是训练完模型,看看测试集得分不满意,回头改改超参数再跑一遍,循环往复。结果呢?模型在测试集上表现很好,一部署到真实环境就拉胯。后来才明白,这就是"数据泄露",测试集已经被"污染"了。
还有一次,做时间序列预测,随机划分了训练集和测试集。结果训练时模型看到了"未来"的数据,预测"过去"的销量,准确率虚高得离谱。当时还沾沾自喜觉得模型效果不错,直到产品经理拿着报表来找我......
所以,数据划分这事儿看着简单,实际上坑不少。搞对了,后面的训练和评估才有意义。
调参这件事本身也是个技术活------怎么找到最好的超参数组合?下一讲我们聊聊损失函数和梯度下降,看看模型到底是怎么被"训练"出来的。