8.3.1训练集和测试集
如何才能确保在实践中模型不会过拟合呢?在理想情况下,我们希望能够对数据样本进行训练,然后知道这个模型会很好地预测新样本。简单来说,一个好的模型应尽可能简单。这个称为“泛化(generalization)理论”。过拟合往往是模型太复杂造成的。一个基本原则是拟合数据刚刚好,而且尽量简单。在机器学习中,我们利用的是经验。我们的策略是,使用测试集。我们从整个数据集中抽取一批数据,对这些数据进行训练,这就是训练集(trainingset)。我们再从同一个数据集中另外抽取一批数据,称为测试集(test set),如果测试集的预测效果好,即预测测试集和预测训练集的效果一样好,我们就可以满意地确定,模型可以很好地泛化到未来的新数据。在这里,要注意以下事项(这也是机器学习的一些细则):
我们要以独立且一致(independently and identically)的方式从整个数据集抽取样本,不以任何方式主动产生偏差。训练集和测试集应该是随机抽取的,而不是相同的数据子集。同时测试集要足够大。
●整个数据集是平稳的(stationary),不会随时间发生变化。
●训练集和测试集始终从同一个数据集中提取样本,在当中不会从其他数据集中提取样本。
以上是一些非常关键的假设,我们在监督式机器学习中,所做的许多工作都是以这些假设为基础的。但是在实践中,有时会违反这些假设。比如,我们有时可能会违反平稳性假设,例如用户的购物行为在节假日或夏季是不同的。如果我们只是用节假日数据建立了模型,那么该模型可能对夏季数据是不准的。因此,我们必须密切关注各项指标,在违反上述假设时,就能立即知晓。
如果只有一个数据集,该怎么办?我们可以将这个大型数据集分成两个小数据集:一个用于训练;另一个用于测试。测试集数据要能够代表整个数据集,训练集和测试集具有相同的特性,如图8-33所示。
这两个数据集需要相互独立。我们可能需要先进行随机化,再拆分数据。这样才能避免发生诸如意外将全部节假日数据归入训练数据集,而将全部夏季数据归入测试数据集之类的糟糕情况。那么我们该怎么拆分一个数据集呢?有两点需要注意:
●训练集规模越大,模型的学习效果就越好。
●测试集规模越大,我们对于评估指标的信心越充足,置信区间就越窄。
人工智能与大数据技术导论
238