测试集和验证集都是用来评估模型准确度的,那么有什么区别呢?
4个回答
在建模过程中通常会定义三个数据集:
- 训练集(train set) —— 用来训练模型
- 验证集(development set)—— 用来调参、选择特征以及调整其他和学习算法相关的选项,也称之为保留的验证集(Hold-out cross validation set)
- 测试集 —— 用来评估算法的性能,但不能作为调参、选择特征等算法相关的选择的依据
个人理解,测试集是必须的,因为需要它来评估模型的泛化性能。而验证集不是必须的,可以用交叉验证来代替,并且交叉验证可以提高训练数据的使用率,但交叉验证不是任何时候都可行,例如当训练时间很长的时候,一般就用验证集来做模型选择。
参考:
Machine Learning Yearning: 5. Your development and test sets
SofaSofa数据科学社区DS面试题库 DS面经训练数据集(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