《图解机器学习-第三章》:训练、验证、测试:三分数据,缺一不可!

在这里插入图片描述

🎯 博主简介

CSDN 「新星创作者」,人工智能技术领域博主,码龄 5 年,累计发布 190+ 篇原创 文章,博客总访问量 30万+ 浏览。

🚀 持续更新 AI 前沿实战知识,专注于 AI 技术实战、RAG 系统、Agent 应用开发与大模型工程化落地

目前主要更新方向包括:

在这里插入图片描述

训练、验证、测试:三分数据,缺一不可

上篇我们讲了数据和特征的关系,知道机器学习是从数据中提取规律的过程。但问题来了——拿到一堆数据之后,直接全部扔给模型训练,行不行?

不行。

很多人第一次训练模型时会遇到这个困惑:明明在训练数据上效果很好,测试时却一塌糊涂。准确率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太小结果不稳定。

实操中的注意事项

说了这么多理论,实际操作时还有几个坑要注意。

第一:三个数据集必须独立同分布。

不能有交集。训练集里有的数据,验证集、测试集里不能有。

不能有数据泄露,就是训练时不小心看到了验证集或测试集的内容。

第二:比例不是绝对的。

数据量越大,需要的验证和测试比例越小。

为什么?

因为大数据集已经足够有代表性,少量数据就能可靠评估。

小数据集就不行,需要更多比例来保证评估的统计显著性。

第三:测试集要"冷存放"。

测试集只到最后才用。用一次,记录结果,然后"忘掉"它。

如果反复看测试集,会不自觉地针对它调优。这是人性,难以避免。

所以很多团队的做法是:测试集由专人保管,不对开发者开放。

只有到了最终评测节点,才"开封"。

第四:时间序列数据要特殊处理。

如果数据有时间顺序,比如预测下个月销量,不能随机划分。

要按时间切:用过去的数据训练,预测未来的。

如果随机划分,会用"未来数据"训练去预测"过去数据",那是作弊。
在这里插入图片描述

数据划分的一点心得

说到底,数据划分是为了解决一个问题:

模型到底是真的学到了规律,还是只是记住了训练数据?

验证集和测试集,就是用来回答这个问题的"探路石"。

最后说几个我踩过的坑吧,也许对你有帮助:

刚学机器学习那会儿,我犯过一个低级错误——用测试集调参。就是训练完模型,看看测试集得分不满意,回头改改超参数再跑一遍,循环往复。结果呢?模型在测试集上表现很好,一部署到真实环境就拉胯。后来才明白,这就是"数据泄露",测试集已经被"污染"了。

还有一次,做时间序列预测,随机划分了训练集和测试集。结果训练时模型看到了"未来"的数据,预测"过去"的销量,准确率虚高得离谱。当时还沾沾自喜觉得模型效果不错,直到产品经理拿着报表来找我……

所以,数据划分这事儿看着简单,实际上坑不少。搞对了,后面的训练和评估才有意义。

调参这件事本身也是个技术活——怎么找到最好的超参数组合?下一讲我们聊聊损失函数和梯度下降,看看模型到底是怎么被"训练"出来的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安逸 i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值