训练集、验证集、测试集的区别和联系以及对统计学习和深度学习的意义

在我们一开始学机器学习的时候,可能大部分人和我状态一样,只知道搭建一个模型,然后读入数据去训练就完事了,后来才知道需要细分训练集、验证集和测试集。

一、什么是训练集、验证集和测试集

训练集:从原始数据集中分离出来的大量数据,喂给模型用来训练模型。
验证集:从原始数据集中分离出来的少量数据,用来给训练集训练结束后的模型进行模型的精度评估。
测试集:从原始数据集中分离出来的少量数据,用来给训练集训练结束后的模型进行模型的精度评估。其作用和验证集一致,一般是在深度学习的模型中和验证集区别对待,在统计学习模型中一般不单独分离出测试集。

建议划分比例:
按训练集:验证集:测试集=7:2:1
按训练集:验证集=8:2(此时不划分测试集)

当然当数据量很大的时候(上百万数据量级别)也有按训练集:验证集=98:2的比例划分。

二、统计学习和深度学习的区别联系

统计学习模型如朴素贝叶斯、决策树(ID3,C4.5,CART,GBDT,XGB,LGB)、支持向量机等是一种可解释性模型,我们的数据读入到最终的表现输出是可以通过公式推导得到的,与深度学习(神经网络之类)的不可解释性区别很大,统计学习模型读入数据开始训练构建模型结构到最后的预测输出,不存在随机性,深度学习模型,因为一般情况模型的初始化参数都是随机产生,这就导致了当你构建好某个深度学习模型,保证所有的参数没有改动,每次训练都会得到不同的预测结果,当深度学习模型理论上没有问题时,每次训练的模型精度往往会有0.0几的误差,在极端情况下也会出现0.几的误差,这种情况在我参与的很多算法比赛中经常遇到,所以用深度学习算法去训练一个高精度的模型很多时候成了一个运气问题,相反统计学习模型就不会出现这样的问题,保证统计学习模型的所有参数没有被改动,每次训练得到的模型都是一样的,所以当我们希望通过调整统计学习模型去提高精度,通过分析模型的算法理论做一定修改往往是可以实现的。

统计学习模型有着比较好的可解释性,如果模型出现问题也很容易进行排查,那么工业中为什么不选择统计学习模型,主要还是性能问题,近几年算法领域的发展主要是在深度学习领域,虽然深度学习的不可解释性经常带来一些问题,但必须得承认在大部分复杂信息的数据中,深度学习模型能够很好的找出数据之间非常微妙的联系,并给我们提供很好的实验结果,所以目前的工业生产中,深度学习模型用的相对较多,当然在某些领域统计学习模型也得到了很好的应用。

三、验证集和测试集

很多人一直分不清验证集和测试集的区别和联系,好的,实际上我一开始也分不清,因为两个数据集都是用来验证模型效果的,干嘛还要分成两个部分,当你接触到深度学习模型后,你就发现了测试集的意义。

我们上面提到,统计学习模型是可解释的,是一种相对比较稳定的模型,所以如果一开始我们简单用验证集去验证训练集训练后的统计学习模型,确保精度效果没啥问题后,在数据量比较少的情况下,我们甚至是可以不用再单独划分验证集,直接把整个数据集喂入模型训练,直接给待预测的数据进行预测,这样一般没啥问题。但是深度学习模型因为存在随机性不可解释性,随着模型的不断训练,模型肯定会不断拟合训练集,在训练集上的loss不断下降,acc不断上升,然后到达某个峰值趋于稳定,所以我们选择到达峰值后的模型对待测试数据集进行测试可以吗?答案是不行。因为深度学习模型容易存在过拟合问题,模型不断训练拟合训练集,训练集上肯定表现很好,但是对验证集上的表现不一定很好,甚至说,随着不断训练训练集loss不断降低,但验证集的loss不断降低到某个峰值后开始不断上升,这就是我们常说的过拟合问题。

所以为了得到一个客观表现比较好的深度学习模型,我们往往会随着模型不断训练,在每次训练结束后对验证集进行一次预测,得到每次的预测结果,并且保留在验证集上预测结果最好的那次训练得到的模型参数,作为我们最终的模型。

也是因为在这个时候,我们把验证集用来去动态筛选最好的那次深度学习模型,所以这个时候再用验证集去评估这个模型的效果就不太合适了,所以我们要再单独拿出一个数据集,这个数据没有参与模型训练过程的评估,只能是用来等我们最终的模型确定后,只做一次评估,于是测试集便诞生。

希望我这样说方便你对验证集和测试集的理解~

希望我的分享对你的学习有所帮助,如果有问题请及时指出,谢谢~

你可能感兴趣的:(深度学习,统计学习,算法,python,机器学习,人工智能,深度学习)