一、训练及验证模型的方法
- 最佳模型:在测试数据集(或者相对于模型来说是全新的数据集)上表现的比较好的模型,因为这种模型的泛化能力强,放在生成环境中面对未知的环境时有更好的表现。
- 调整的参数通常就是超参数:kNN 中的 k 和 P 、多项式回归中的 degree 等;
- 通常调参时使用交叉验证的方法。
1)方案(一):将所有数据集都作为训练数据集
- 问题:如果将所有的数据集都作为训练数据集,则对于训练出的模型是否发生了过拟合会不自知,因为过拟合情况下,模型在训练数据集上的误差非常的小,使人觉得模型效果很好,但实际上可能泛化能力不足;
2)方案(二):将数据集分割为训练数据集和测试数据集
- 通过测试数据集判断模型的好坏——如果通过学习曲线发现,模型在训练数据集上效果较好,在测试数据集上效果不好,模型出现过拟合,需要调整参数来重新得到模型,然后再次进行测试;以此类推循环此过程,最终得到最佳模型。
- 方案缺陷:
- 此方案得到的最佳模型,有可能会过拟合了测试数据集(模型过拟合测试数据集后,在测试数据集上表现的准确率会升高),得到的模型的准确率不能反应模型真正的性能;
- 如果最佳模型过拟合了测试数据集,并且测试数据集上存在极端数据,该模型可能会因为拟合了某些极端数据而不准确。
- 原因:虽然使用训练数据获得模型,但每次通过测试数据集验证模型的好坏,一旦发现模型不好就重新调整参数再次训练新的模型,这个过程一定程度上是模型在围绕着测试数据集进行刷选,也就是说,我们在想办法找到一组参数,这组参数使得我们在训练数据集上获得的模型在测试数据集上效果最好,但是由于测试数据集是已知的,我们相当于在针对这组测试数据集进行调参,那么也有可能出现过拟合的现象,也就是说我们得到的模型针对这组测试数据集过拟合了,使得模型在测试数据集上的表现的准确率比其真正的准确率偏高。并且,如果测试数据集上有极端的数据,过拟合测试数据的模型会不准确。
- 方案优点:解决了 方案(一) 的问题;
3)方案(三):将数据集分割为 3 部分——训练数据集、验证数据集、测试数据集
- 最终目的:查看该算法是否适合解决此类问题;
- 判断标准:由训练数据集和验证数据集得到的最佳模型,在测试数据集上体现的泛化能力满足实际的要求。(如果泛化能力不能满足实际的要求,则认为该算法不适合解决此类问题)
- 训练数据集:训练模型;
- 验证数据集:验证模型的效果;如果模型的效果不好,则重新调整参数再次训练新的模型,直到找到了一组参数,使得模型针对验证数据集来说已经达到最优了;(调整超参数使用的数据集)
- 测试数据集:将此数据集传入由验证数据集得到的最佳模型,得到模型最终的性能;(作为衡量最终模型性能的数据集)
- 训练数据集和验证数据集参与了模型的创建:训练数据集用来训练,验证数据集用来评判,一旦评判不好则重新训练,这两种形式都叫参与了模型的创建;
- 测试数据集不参与模型的创建,其相对模型是完全不可知的,相当于是我们在模拟真正的真实环境中我们的模型完全不知道的数据;
- 方案缺点
- :分割方式是随机的,模型有可能过拟合验证数据集,导致所得的模型的性能指标不能反应模型真正的泛化能力;
- 随机分割数据集带来的问题:只有一份验证数据集,一旦验证数据集中有极端的数据就可能导致模型相应的不准确,则该模型在测试数据集上体现的泛化能力不能满足实际要求,因此该算法会被认为不适合解决此问题。
- 如果验证数据集中含有极端的数据?——在含有极端数据的数据集