机器学习的目标就是得到一个泛化能力好的模型,即模型不但在已给定的数据(训练数据)上性能表现良好,而且在没有见过的数据(测试数据)上也能达到同样的效果。通常在评估模型的时候,我们看到的只有训练集和测试集,但实际上,我们应将数据集划分为三个集合:训练集、验证集、测试集。
训练集自然是用来训练模型的,当一个模型训练好后,我们可以知道该模型在训练集上的表现,但是不知道在其他数据(全新数据)上是什么样的,于是就可以通过验证集来评估模型性能,然后再对模型做进一步的调节(调节本身就是学习的过程),也就是所谓的调参(超参数),寻找出最合适的模型配置。所以,验证集实际上就起到了一个反馈的作用,来告知我们这个模型调到什么样的程度其性能最优,但是,这里有个问题,如果,单纯的靠验证集的性能来调节模型配置,那么模型同样会在验证集上产生过拟合现象,所以,通常模型参数只调节一次,验证集仍然可以可靠的评估模型,但如果,反复的根据验证集的性能去修改模型,模型在验证集上的性能就会非常好,这并不是我们想要的,因为我们关心的是全新的数据在模型上的表现,于是就有了测试集。测试集不再像验证集那样把自己的数据透露给模型,验证集是为了调参才把自己的信息给模型达到一个反馈的效果,而测试集完全不用,它就是全新的数据,所以,测试集是对模型最终的评估。
通常情况下,我们见到的只有训练集和验证集,常常把验证集称为测试集。