机器学习:数据集的划分

本文首发于 AI柠檬博客,原文链接:机器学习:数据集的划分

如果你想学习更多机器学习AI大模型的内容,欢迎访问 AI柠檬博客


我们都知道,机器学习需要大量的数据来训练模型,尤其是训练神经网络。在进行机器学习时,数据集一般会被划分为训练集和测试集,很多时候还会划分出验证集(个别人称之为开发集)。但是很多新手,尤其是刚刚接触到机器学习的人,往往对数据集的划分没有概念,甚至有的人把训练后得到的模型在训练数据上取得的正确率当做是实际正确率来说了,然后各种被怼。有人在答辩时说自己训练的模型正确率100%,在座的老师面面相觑,最后结果可想而知。所以我们需要搞清楚数据集的划分,以及训练集、验证集和测试集的区别和作用。

数据集的划分一般有三种方法:

按一定比例划分为训练集和测试集

这种方法也称为保留法。我们通常取8-2、7-3、6-4、5-5比例切分,直接将数据随机划分为训练集和测试集,然后使用训练集来生成模型,再用测试集来测试模型的正确率和误差,以验证模型的有效性。

这种方法常见于决策树、朴素贝叶斯分类器、线性回归和逻辑回归等任务中。

交叉验证法

交叉验证一般采用k折交叉验证,即k-fold cross validation,往往k取为10。在这种数据集划分法中,我们将数据集划分为k个子集,每个子集均做一次测试集,每次将其余的作为训练集。在交叉验证时,我们重复训练k次,每次选择一个子集作为测试集,并将k次的平均交叉验证的正确率作为最终的结果。

训练集、验证集、测试集法

我们首先将数据集划分为训练集和测试集,由于模型的构建过程中也需要检验模型,检验模型的配置,以及训练程度,过拟合还是欠拟合,所以会将训练数据再划分为两个部分,一部分是用于训练的训练集,另一部分是进行检验的验证集。验证集可以重复使用,主要是用来辅助我们构建模型的。

训练集用于训练得到神经网络模型,然后用验证集验证模型的有效性,挑选获得最佳效果的模型,直到我们得到一个满意的模型为止。最后,当模型"通过"验证集之后,我们再使用测试集测试模型的最终效果,评估模型的准确率,以及误差等。测试集只在模型检验时使用,绝对不能根据测试集上的结果来调整网络参数配置,以及选择训练好的模型,否则会导致模型在测试集上过拟合。

一般来说,最终的正确率,训练集大于验证集,验证集大于测试集。

对于部分机器学习任务,我们划分的测试集必须是模型从未见过的数据,比如语音识别中一个完全不同的人的说话声,图像识别中一个完全不同的识别个体。这时,一般来说,训练集和验证集的数据分布是同分布的,而测试集的数据分布与前两者会略有不同。在这种情况下,通常,测试集的正确率会比验证集的正确率低得多,这样就可以看出模型的泛化能力,可以预测出实际应用中的真实效果。

这种方法是深度学习中经常使用的方法,因为效果相比前面的更好。该方法之所以会更好,原因是它暴露给测试集的信息更少。

只是,我们有时候会控制不住自己,不断地对着测试集调参,会使其逐渐失去效果,导致模型在测试集上出现过拟合。不过测试集上正确率越高,往往实际中应用效果也越好,即使此时测试集也参与了调参。

最后,我们再说一下关于模型的拟合问题。

如果训练集和测试集(验证集)上,正确率都很低,那么,说明模型处于欠拟合状态,需要调整超参数。如果训练集上正确率很低,测试集(或验证集)上正确率较高,说明数据集有问题。如果训练集上正确率很高,测试集(以及验证集)上正确率较低,说明模型过拟合,需要进行正则化或者Dropout来抑制过拟合。如果训练集和验证集上正确率都很高,但是在测试集上正确率较低,那么说明模型的泛化能力不足,调整方法可参考之前的过拟合情况。如果训练集和测试集(包括验证集)上模型的正确率都很高,那么,恭喜你!

关键词英文对照:

训练集 training set

验证集 validation set

测试集 test set

交叉验证 cross validation

保留法 hold-out

参考资料:

https://developers.google.com/machine-learning/crash-course/validation/another-partition?hl=zh-cn


本文首发于 AI柠檬博客,原文链接:机器学习:数据集的划分

如果你想学习更多机器学习AI大模型的内容,欢迎访问 AI柠檬博客

相关推荐
لا معنى له3 小时前
目标检测的内涵、发展和经典模型--学习笔记
人工智能·笔记·深度学习·学习·目标检测·机器学习
AKAMAI4 小时前
Akamai Cloud客户案例 | CloudMinister借助Akamai实现多云转型
人工智能·云计算
hh随便起个名6 小时前
力扣二叉树的三种遍历
javascript·数据结构·算法·leetcode
小a杰.6 小时前
Flutter 与 AI 深度集成指南:从基础实现到高级应用
人工智能·flutter
colorknight6 小时前
数据编织-异构数据存储的自动化治理
数据仓库·人工智能·数据治理·数据湖·数据科学·数据编织·自动化治理
Lun3866buzha7 小时前
篮球场景目标检测与定位_YOLO11-RFPN实现详解
人工智能·目标检测·计算机视觉
janefir7 小时前
LangChain框架下DirectoryLoader使用报错zipfile.BadZipFile
人工智能·langchain
齐齐大魔王7 小时前
COCO 数据集
人工智能·机器学习
Dingdangcat867 小时前
城市交通多目标检测系统:YOLO11-MAN-FasterCGLU算法优化与实战应用_3
算法·目标检测·目标跟踪
tang&8 小时前
滑动窗口:双指针的优雅舞步,征服连续区间问题的利器
数据结构·算法·哈希算法·滑动窗口