原文链接:https://blog.csdn.net/hohaizx/article/details/81013985
在机器学习过程中,为了找到泛化性能最好的那个函数,我们需要确定两方面的参数:1、假设函数参数,也就是我们通常所说的ww等,这些参数被称为超参数,一般在模型训练之前通过手工指定(当然也可以采用网格法等算法进行寻优)。确定模型超参数的过程称为模型选择。
模型选择
借用吴恩达机器学习课程中的一页PPT,如下图:
现在我们要确定多项式回归的次数dd因此很有可能是泛化误差的一个最优估计。问题就出在我们将测试数据多次使用,违背了测试数据仅仅只是用来评估最优函数的泛化性能的原则。
为了解决这个问题,我们在训练集中单独划分出一块,作为模型选择的依据,我们把这部分数据称为验证集,现在我们的数据集由之前的训练集和测试集两部分组成变成了训练集,验证集和测试集三部分组成。
- 训练集:用于训练模型,找出最佳的ww。
- 验证集:用以确定模型超参数,选出最优模型。
- 测试集:仅用于对训练好的最优函数进行性能评估。
训练集、验证集和测试集分工明确,各施其职,切不可互相取而代之。特别是不能混淆验证集和测试集,下面用一个表整理下两者的区别:
区别 | 验证集 | 测试集 |
---|---|---|
作用 | 确定模型超参数 | 仅用于对训练好的最优函数进行性能评估 |
是否用于训练 | 否(在选出最优模型后,需要将验证集也放入训练集一起训练最优函数) | 否 |
使用次数 | 多次使用,每次更新超参数后都要用验证集对模型性能进行验证 | 仅在最后使用一次 |
再强调一下:对最终学习得到的函数进行性能评估的数据叫作测试集,必须保证测试集完全独立,直到模型调整和参数训练全部完成前应该将测试集进行封存,以任何形式使用测试集中的信息都是一种窥探。
所以,此时机器学习的全过程如下:
- 确定模型的一组超参数
- 用训练集训练该模型,找到使损失函数最小的最优函数。
- 在验证集上对最优函数的性能进行度量。
- 重复1、2、3步,直到搜索完指定的超参数组合。
- 选择在验证集上误差最小的模型,并合并训练集和验证集作为整体训练模型,找到最优函数。
- 在测试集上对最优函数的泛化性能进行度量。
最后,我们都知道同一模型在不同训练集上学得的函数往往不同,那我们怎样保证选出的模型和函数就是最好的呢?而不是刚好符合当前数据划分的一个特例呢?可以采用交叉验证(Cross Validation)法,其基本思路如下:将训练集划分为K份,每次采用其中K-1份作为训练集,另外一份作为验证集,验证集上K次误差的平均作为该模型的误差。