训练集、验证集、测试集与交叉验证

蓝亚之舟
蓝亚之舟
蓝亚之舟
57
文章
17
评论
2021年4月20日16:29:44
评论
6,2461 1149字阅读3分49秒

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

如果给定的样本数据充足,我们通常使用均匀随机抽样的方式将数据集划分成 3 个部分——训练集、验证集和测试集,这三个集合不能有交集,常见的比例是 8:1:1。需要注意的是,通常都会给定训练集和测试集,而不会给验证集。这时候验证集该从哪里得到呢?一般的做法是,从训练集中均匀随机抽样一部分样本作为验证集。

(1)训练集

训练集用来训练模型,即确定模型的权重和偏置这些参数,通常我们称这些参数为学习参数。

(2)验证集

而验证集用于模型的选择,更具体地来说,验证集并不参与学习参数的确定,也就是验证集并没有参与梯度下降的过程。验证集只是为了选择超参数,比如网络层数、网络节点数、迭代次数、学习率这些都叫超参数。比如在 k-NN 算法中,k 值就是一个超参数。所以可以使用验证集来求出误差率最小的 k。

(3)测试集

测试集只使用一次,即在训练完成后评价最终的模型时使用。它既不参与学习参数过程,也不参数超参数选择过程,而仅仅使用于模型的评价。
值得注意的是,千万不能在训练过程中使用测试集,而后再用相同的测试集去测试模型。这样做其实是一个 cheat,使得模型测试时准确率很高。

2、交叉验证

之所以出现交叉验证,主要是因为训练集较小。无法直接像前面那样只分出训练集,验证集,测试就可以了(简单交叉验证)。
需要说明的是,在实际情况下,人们不是很喜欢用交叉验证,主要是因为它会耗费较多的计算资源。一般直接把训练集按照 50%-90%的比例分成训练集和验证集。但这也是根据具体情况来定的:如果超参数数量多,你可能就想用更大的验证集,而验证集的数量不够,那么最好还是用交叉验证吧。至于分成几份比较好,一般都是分成 3、5 和 10 份。

(1)交叉验证的实现

首先我们给出下面的图

训练集、验证集、测试集与交叉验证

图上面的部分表示我们拥有的数据,而后我们对数据进行了再次分割,主要是对训练集,假设将训练集分成 5 份(该数目被称为折数,5-fold 交叉验证),每次都用其中 4 份来训练模型,淡黄色的那份用来验证 4 份训练出来的模型的准确率,记下准确率。然后在这 5 份中取另外 4 份做训练集,1 份做验证集,再次得到一个模型的准确率。直到所有 5 份都做过 1 次验证集,也即验证集名额循环了一圈,交叉验证的过程就结束。算得这 5 次准确率的均值。留下准确率最高的模型,即该模型的超参数是什么样的最终模型的超参数就是这个样的。

(2)网格搜索交叉验证

理解了上面的概念,对于网格搜索交叉验证也就明白了,网格搜索交叉验证本质就是多次交叉验证,将众多超参数组合,每一组进行一次交叉验证(这个期间内部参数会不断变化,但是不会影响超参数),最后选择交叉验证平均值最高的超参数组合作为最优。

转载自:https://blog.csdn.net/Chaolei3/article/details/79270939

继续阅读
蓝亚之舟
机器学习

java调用python

前言 这一章来学习如何使用 java 调用 python 机器学习模块,毕竟 python 在算法方法好用,但是做 web 项目还是 java 更优,最近有个项目想要集成机器学习算法,这里简单记录一下...

发表评论