测试集和验证集的区别?

  统计/机器学习 模型验证    浏览次数:9113        分享
1

测试集和验证集都是用来评估模型准确度的,那么有什么区别呢?

 

ccc225   2018-05-22 23:14



   4个回答 
7

在建模过程中通常会定义三个数据集:

  • 训练集(train set) —— 用来训练模型
  • 验证集(development set)—— 用来调参、选择特征以及调整其他和学习算法相关的选项,也称之为保留的验证集(Hold-out cross validation set
  • 测试集 —— 用来评估算法的性能,但不能作为调参、选择特征等算法相关的选择的依据

个人理解,测试集是必须的,因为需要它来评估模型的泛化性能。而验证集不是必须的,可以用交叉验证来代替,并且交叉验证可以提高训练数据的使用率,但交叉验证不是任何时候都可行,例如当训练时间很长的时候,一般就用验证集来做模型选择。

参考:

Machine Learning Yearning: 5. Your development and test sets

SofaSofa数据科学社区DS面试题库 DS面经

一角鲸   2018-05-23 23:17

5

训练数据集(Training Set): 是一些我们已经知道输入和输出的数据集训练机器去学习,通过拟合去寻找模型的初始参数。例如在神经网络(Neural Networks)中, 我们用训练数据集和反向传播算法(Backpropagation)去每个神经元找到最优的比重(Weights)。


验证数据集(Validation Set):也是一些我们已经知道输入和输出的数据集,通过让机器学习去优化调整模型的参数,在神经网络中, 我们用验证数据集去寻找最优的网络深度(number of hidden layers),或者决定反向传播算法的停止点;在普通的机器学习中常用的交叉验证(Cross Validation) 就是把训练数据集本身再细分成不同的验证数据集去训练模型。


测试数据集(Test Set):用户测试模型表现的数据集,根据误差(一般为预测输出与实际输出的不同)来判断一个模型的好坏。


为什么验证数据集和测试数据集两者都需要?


因为验证数据集(Validation Set)用来调整模型参数从而选择最优模型,模型本身已经同时知道了输入和输出,所以从验证数据集上得出的误差(Error)会有偏差(Bias)。

但是我们只用测试数据集(Test Set) 去评估模型的表现,并不会去调整优化模型。


在传统的机器学习中,这三者一般的比例为training/validation/test = 50/25/25, 但是有些时候如果模型不需要很多调整只要拟合就可时,或者training本身就是training+validation (比如cross validation)时,也可以training/test =7/3.


但是在深度学习中,由于数据量本身很大,而且训练神经网络需要的数据很多,可以把更多的数据分给training,而相应减少validation和test


SofaSofa数据科学社区DS面试题库 DS面经

kykix   2018-05-29 10:56

3

可以看看这个,算是相关问题、答案也类似

如果我用交叉验证,还是否需要单独分出测试集?

SofaSofa数据科学社区DS面试题库 DS面经

岛歌   2018-05-23 10:31

1

我们说的测试集都是指代比赛数据,工业界是没有的,只有训练数据,然后切分验证和训练。

SofaSofa数据科学社区DS面试题库 DS面经

陈十一   2018-05-23 10:04



  相关讨论

精度-召回曲线的起点和终点是什么?

交叉验证是如何进行的?

Stratified k-fold cross validation(分层交叉验证)

k-fold cross validation的k怎么选

十折交叉验证

回归问题中的stratified cross validation?

micro和macro F1 score分别是什么意思?

K折交叉验证是否有意义?

如果我用交叉验证,还是否需要单独分出测试集?

如何在保持查全率不变的情况下提高查准率?

  随便看看

plt.show()之后matplotlib图像依然不展示

回归中自变量和因变量的相关系数和回归系数(斜率)有什么关系?

dataframe每行或者每列中缺失值(na, nan, null)的个数

回归问题中R方可以小于0吗?

如果样本不是正态分布,还能用t-test或者z-test吗?