为什么需要将数据集划分成训练集、验证集和测试集三部分?

评估模型的重点是将数据划分为三个集合:训练集、验证集和测试集。

训练集、验证集和测试集的使用方式。在训练数据上训练模型,在验证数据上评估模型。一旦找到了最佳参数,就在测试数据上最后测试一次。

你可能会问,为什么不是两个集合: 一个训练集和一个测试集?在训练集上训练模型,然后在测试集上评估模型。这样岂不是简单得多!

原因在于开发模型时总是需要调节模型超参数(hyperparameter),让模型性能达到最佳,这个调节过程需要使用模型在验证集上的性能作为反馈信号。

调节超参数的过程本质上就是一种学习:在某个参数空间中寻找良好的模型配置。因此,如果基于模型在验证集上的性能来调节模型配置,会很快导致模型在验证集上过拟合,即使你并没有在验证集上直接训练模型也会如此。

造成模型在验证集过拟合的关键在于信息泄露(information leak)。每次基于模型在验证集上的性能来调节模型超参数,都会有一些关于验证数据的信息泄露到模型中。如果对每个参数只调节一次, 那么泄露的信息很少,验证集仍然可以可靠地评估模型。但如果你多次重复这一过程(运行一 次实验,在验证集上评估,然后据此修改模型),那么将会有越来越多的关于验证集的信息泄露 到模型中。

最后,你得到的模型在验证集上的性能非常好(人为造成的),因为这正是你优化的目的。 你关心的是模型在全新数据上的性能,而不是在验证数据上的性能,因此你需要使用一个完全不同的、前所未见的数据集来评估模型,它就是测试集。你的模型一定不能读取与测试集有关 的任何信息,既使间接读取也不行。如果基于测试集性能来调节模型,那么对泛化能力的衡量是不准确的。

你可能感兴趣的:(机器学习理论,人工智能,深度学习)