训练集,验证集,测试集(以及为什么要使用验证集?)(Training Set, Validation Set, Test Set)www.cnblogs.com
验证和交叉验证(Validation & Cross Validation)www.cnblogs.com
![07ec651e3d20e89eb658532662dbeec3.png](https://i-blog.csdnimg.cn/blog_migrate/f8e2abf8513e5c9ff8c66ec1bd1ff6ac.png)
![2da95c5496e10fdc420dbce06d4bdbd3.png](https://i-blog.csdnimg.cn/blog_migrate/2146179f0caf835887ed2be2c2c862a5.jpeg)
在机器学习中,当我们把模型训练出来以后,该怎么对模型进行验证呢?(也就是说怎样知道训练出来的模型好不好?)有以下几种验证方式:
第一种方式:把数据集全部作为训练集,然后用训练集训练模型,用训练集验证模型(如果有多个模型需要进行选择,那么最后选出训练误差最小的那个模型作为最好的模型)
这种方式显然不可行,因此训练集数据已经在模型拟合时使用过了,再使用相同的数据对模型进行验证,其结果必然是过于乐观的。如果我们对多个模型进行评估和选择,那么我们可以发现,模型越复杂,其训练误差也就越小,当某个模型的训练误差看似很完美时,其实这个模型可能已经严重地过拟合了。(我们把这种由训练误差选出来模型称为gm-hat)
第二种方式:把数据集随机分为训练集和测试集,然后用训练集训练模型,用测试集验证模型(如果有多个模型需要进行选择,那么最后选出测试误差最小的那个模型作为最好的模型)
什么样的模型是好的?显然泛化误差最小的模型最好,但是我们没有这样的测试集能够测出模型的泛化误差。因此,我们把一部分数据作为测试集,用它的误差来模拟泛化误差。
把数据分出一部分作为测试集意味着训练集比原来小了。由学习曲线可知,使用较少的数据训练出来的模型,其测试误差会比较大。因此,对于多个模型的评估和选择,合理的做法是:用训练集训练出各个模型后,用测试集选出其中最好的模型(我们把此模型称为gm*-),记录最好模型的各项设置(比如说使用哪个算法,迭代次数是几