首页 > 编程知识 正文

训练集测试集验证集区别和联系,训练集和测试集的关系

时间:2023-05-04 04:00:50 阅读:11667 作者:4859

训练集:确定模型的参数

验证集:确定模型的超级参数; (如多项式的次数n )

测试集:评估模型泛化性能,选择最佳模型

例:用色调、根茎、敲击声确认是好甜瓜还是坏甜瓜。 将数据分为训练集、验证集和测试集

1、选择决策树模型、初始剪枝参数值,训练集训练生成模型; 修改几次预剪枝参数值,在训练集中训练,生成若干模型,在验证集中验证正确率,确定最佳预剪枝参数值;

2、选择多项式回归、多项式阶n,训练集训练生成模型; 多次改变多项式阶n,在训练集中训练,生成一些模型,在验证集中验证正确率,确定最优多项式阶n。

在测试集中分别测试决策时模型和多项式模型,确定两者的泛化性能,选择最佳模型。

下面的伪代码写得很清楚

# split datadata=.train,validation, test=split(data ) tunemodelhyperparametersparameters=. forparamsinparameters 3360 model=fit ) train ) skill=evalua merametramer evaluatefinalmodelforcomparisonwithothermodelsmodel=fit (train ) skill=evaluate ) model,test )摘录: http://

补充:验证集和测试集的组合,即只有训练集和测试集,才能对每个超参数使用训练集训练剩下的参数,并根据测试集确定最佳的超参数和模型,不是吗

就我个人而言,我认为这种方法的坏处是,超参的决定和最佳模型的决定在同一步进行是有风险的。 我认为超参的决定实际上也是优化拟合,但本质上是参数的决定。 参数确定与泛化性能检测相结合,仍然存在过拟合的风险。 分为三个集合,第一步确定参数,第二步确定超参,第三步确定最优模型。 这样可以大大降低过拟合的风险。 也就是说,测试集只能在确定所有参数(参数和超级参数)的条件下使用,并用于评估模型的泛化性能。 否则,借用测试集来确定超级参数,在评价时泛化性能一定很好。

因此,针对以前提出的问题,为什么k匝交叉验证可以没有验证集,可能是因为重新采样验证了泛化性能本身,所以验证集和测试集只需要一个。

————————————————————————————————————————————

最近读了《深度学习》这本书,看了这个问题的说明,还很清楚。

以最简单的广义线性回归为例,容量超参数有多项式阶这一超参数。 lasso等回归还有一个超参数,控制权衰减程度的是另一个超参数。 某些选择可能被设置为无需学习才能学习算法的超级参数,这是因为优化太难了。 此选项必须是超级参数,因为在许多情况下不适合在训练集中学习。 这适用于控制模型容量的所有超级参数。 在训练集中学习超级参数时,这些超级参数总是最大化可能的模型容量并引起拟合(参见图5.3 )。 例如,如果将高阶多项式和权重衰减参数设定为=0,则与低阶多项式和正权重衰减设定相比,始终更好地拟合训练集。 为了解决此问题,需要训练算法无法观测到的“验证集”(validation set )示例。

以前研究过由与训练数据相同分布的样本组成的测试集,这可以用于估计学习过程完成后的学习器泛化误差。 重要的是,测试样本不能以任何形式参与模型的选择,包括设置超级参数。 因此,测试集中的示例不能用于验证集。 因此,我们总是根据训练数据构建验证集。 特别是,我们将训练数据分为两个不相交的子集。 一个用于学习参数。 另一个作为验证集,用于估计训练中或训练后的泛化误差,更新超级参数。 用于学习参数的数据子集通常称为训练集,但与整个训练过程中使用的更大数据集混淆。 用于选择超级参数的数据子集称为验证集。 通常,80%的培训数据用于培训,20%用于验证。 由于验证集用于“训练”超参数,因此验证集的误差小于常规训练集的误差,但验证集低估了泛化误差。 所有超级参数优化完成后,泛化误差可能由测试集估计。

实际上,相同的测试集多年来一直在反复用于评估不同算法的性能,考虑到学术界在该测试集中的各种尝试,最终对测试集可能也会有乐观的估计。 基准将过时,不再反映系统的真正性能。 幸运的是,学术界往往会搬到更庞大、更具挑战性的新标杆。

——摘自《深度学习》

在上述说明中,您应该对培训集、验证集和测试集有很好的了解。

————————————————————————————————————————

参考文献:

强银耳汤,健康翅膀,快酒馆. 《深度学习》

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。