【小白学PyTorch】2 浅谈训练集和测试集
文章目录:
经验误差与过拟合
关键词:错误率(error rate),精度(accuracy)。
- 错误率好理解,就是m个样本中,a个样本分类错误,则错误率E = a/m 。
- 精度 就是 1-E。 其实很简单,但是为什么我还要提一提呢,因为机器学习里还有很多相关名词,例如:准确率,召回率,精确度等等,所以希望大家能清楚认识。
关键词:经验误差(empirical error)。
- 在训练集上,预测输出与样本的真实输出之间的差异(差异!)称为经验误差或训练误差。
关键词:泛化误差(generalization)。
- 在新样本上的误差称为泛化误差。
关键词:过拟合(overfitting)。
- 刚接触机器学习时候,就碰到过拟合这个很抽象的词, 当时是说的曲线拟合 。曲线拟合其实就是一个过程。该过程是通过实际曲线上的一些样本点(成为训练样本),经过一个模型训练,得到一条预测曲线。(敲黑板:拟合就是一个过程)。那么过拟合就是,拟合过头了,预测曲线非常好的适合训练样本,然而对实际曲线的其他样本不太适合。 推广一下到分类器(模型)上就是,训练好的分类器对训练样本很好的分类,但是对测试样本的分类结果很糟糕。
有过拟合当然有欠拟合啦,欠拟合可以认为是该分类器学习能力太差,连在训练样本上都没有很好的分类,更不要说在测试样本上了。
评估方法
关键词:留出法(hold-out)。
- 怎么将给定的数据集划分为训练集和测试集呢?常用的方法在这里有介绍。首先介绍的是留出法,其实这种方法在国内教材和论文中最常见,就是把数据集D划分为两个互斥的集合,其中一个是训练集,一个是测试集。书中给出的参考划分比例是,训练集66.6%~80%。
关键词:交叉验证法(cross validation)。
- 交叉验证法是竞赛中或者比较正式的实验中用得比较多。什么是交叉验证呢? 其实就是将数据集D划分为k个大小相同的互斥的子集,然后用k-1个子集作为训练,剩下那一个子集作为测试。这样就需要训练k个模型,得到k个结果,再取平均即可。这样的方法通常成为“k折交叉验证”。书中还给出了k的参考值,:5,10,20。
关键词:自助法(bootstrapping) 。
- 第一次听说自助法,也从没在文献中看到过,自助法主要是用于小样本!缺点是容易引入估计偏差。具体操作是这样的,对于m个样本的数据集D,每次随机挑选D中的一个样本放到D’中,挑m次,经过计算D中有大约36.8%(≈1/e)的样本未出现在D’中,这样用D’作为训练集,D\D’(“\”表示集合减法)作为测试集。自助法又称为可重复采样,有放回采样。(第二次看到这个方法的时候,发现,这不就是bagging抽样数据集的方法嘛,只是这里作为划分训练集和测试机的方法。)
关键词:训练集(train set)、验证集(valid set)、测试集(test set) 。
- 一开始接触机器学习只知道训练集和测试集,后来听到了验证集这个词,发现验证集和之前所认识的测试集的用法是一样的,一直就把验证集和测试集给混淆了。
首先需要知道的是,在工程应用中,最终提交给客户的模型是用尽数据集D中的m个样本训练的模型。也就是说,我们的测试集最终还是要用来训练模型的。之前有说到数据集D划分为训练集和测试集,训练集就是用来训练模型,测试集是用来估计模型在实际应用中的泛化能力,而验证集是用于模型选择和调参的。
因此,我个人的理解是在研究过程中,验证集和测试集作用都是一样的,只是对模型进行一个观测,观测训练好的模型的泛化能力。而当在工程应用中,验证集应该是从训练集里再划分出来的一部分作为验证集,用来选择模型和调参的。当调好之后,再用测试集对该模型进行泛化性能的评估,如果性能OK,再把测试集输入到模型中训练,最终得到的模型就是提交给用户的模型。
举例
举个高三学生高考的例子吧,
- 训练集 就是 平时的作业,习题册等
- 验证集 就是 一模、二模、三模的试题
- 测试集 就是 高考试题
训练集是给学生进行学习的,提高学生的能力;验证集是用来检验学生的学习方法,学习方向,学习方式,是否正确;测试集是最终考察学生的成绩如何。
不过幸运的是,我们有多次“高考”的机会,只不过,我们不能去分析高考的试题,因为测试集仅仅作为一个验证。
一般来说,当验证集和测试集具有同分布的时候(即模拟题和高考题几乎一样的时候),在模拟考能拿650分,那么在真实考高中也会在650分左右。
人不可傲慢。