测试集和验证集的区别?

  统计/机器学习 模型验证    浏览次数: 353
0

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

 

ccc225   2018-05-22 23:14



   4个回答 
4

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

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

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

参考:

Machine Learning Yearning: 5. Your development and test sets

一角鲸   2018-05-23 23:17

2

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

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

岛歌   2018-05-23 10:31

1

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

陈十一   2018-05-23 10:04

1

训练数据集(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


kykix   2018-05-29 10:56



  相关主题

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

交叉验证是如何进行的?   1回答

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

十折交叉验证   1回答

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

k-fold cross validation的k怎么选   2回答

回归问题中的stratified cross validation?   2回答

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

python里怎么求多元分类的F1 score?   1回答

二元分类问题中经常提到的TP,TN,FN,FP都是什么意思?   3回答

什么是混淆矩阵(confusion matrix)   2回答

多元分类的混淆矩阵   1回答



回答问题时需要注意什么?

我们谢绝在回答前讲“生动”的故事。

我们谢绝“这么简单,你自己想”、“书上有的,你认真看”这类的回答;如果你认为对方的提问方式或者内容不妥,你可以直接忽略该问题,不用进行任何作答,甚至可以对该问题投反对票。

我们谢绝答非所问。

我们谢绝自己不会、硬要回答。

我们感激每一个用户在编写答案时的努力与付出!