zl程序教程

您现在的位置是:首页 >  其他

当前栏目

算法工程师面试题八之交叉验证

面试题工程师算法 验证 交叉
2023-09-14 09:13:19 时间

1.train/dev/test data

我们将数据划分为训练集、验证集(也称开发集:development data)和测试集。

1.1 为什么要分成三类?

在训练集上训练模型,在验证集上评估模型,一旦找到的最佳的参数,就在测试集上最后测试输出(一般来说,论文中的模型效果都是使用这个测试集的结果),测试集上的误差作为泛化误差的近似。
关于验证集的划分可以参考测试集的划分,其实都是一样的,这里不再赘述。

可以简单地将上述三者对应学习过程:
训练集看成是家庭作业;
开发(验证)集看出是小测试;
测试集看成是期末考试。

2.交叉验证(cross-validation)

2.1 为什么要这么做?

在这里插入图片描述
上图说明的问题是:如果采用不同的 Training set,validation set ,当模型取最佳效果时,超参数c可能落在不同的取值处所以我们就需要轮流验证(也就是交叉验证)。这么看来,其实交叉验证的根本原因是: 为了避免数据集太小,而带来对参数估计出现的问题。

2.2 目的

验证集用来调节超参数, 可以得到效果更好的模型

2.3 做法

将原始的训练集分成训练集和验证集,然后轮流取出一部分作为验证集进行验证,这种思想就是交叉验证。
比如说,现在有五份数据集:A,B,C,D,E,F 然后我们将其中的每一份都轮流作为验证集,这样做的目的是为了剔除“验证集”的随机性,因为可能某份验证集就存在数据倾斜的情况,如果拿5份数据分别作为验证集那么就可以避免数据集不平整带来的调参失败问题。
在这里插入图片描述