2018年11月23日星期五

ML_003:Google Machine Learning 在线速成课程学习笔记之三

在线课程地址:https://developers.google.com/machine-learning

4. 泛化
泛化是指模型很好地拟合以前未见过的新数据(从用于创建该模型的同一分布中抽取)的能力。

过拟合模型在训练过程中产生的损失很低,但在预测新数据方面的表现却非常糟糕。过拟合是由于模型的复杂程度超出所需程度而造成的。

机器学习的目标是对从真实概率分布(已隐藏)中抽取的新数据做出良好预测。遗憾的是,模型无法查看整体情况;模型只能从训练数据集中取样。如果某个模型在拟合当前样本方面表现良好,那么我们如何相信该模型会对新数据做出良好的预测呢?

奥卡姆剃刀定律:机器学习模型越简单,实证结果就越有可能不仅仅基于样本的特性。

根据以下因素描述模型泛化到新数据的能力:
  • 模型的复杂程度
  • 模型在处理训练数据方面的表现
如何获得以前未见过的数据呢?一种方法是将您的数据集分成两个子集:
  • 训练集 - 用于训练模型的子集。
  • 测试集 - 用于测试模型的子集。
机器学习细则
以下三项基本假设阐明了泛化:
  • 我们从分布中随机抽取独立同分布的样本。
  • 分布是平稳的;即分布在数据集内不会发生变化。
  • 我们从同一分布的数据划分中抽取样本。
在实践中,我们有时会违背这些假设。例如:
想象有一个选择要展示的广告的模型。如果该模型在某种程度上根据用户以前看过的广告选择广告,则会违背假设。
想象有一个包含一年零售信息的数据集。用户的购买行为会出现季节性变化,这会违反平稳性。

如果违背了上述三项基本假设中的任何一项,那么我们就必须密切注意指标。

总结
如果某个模型尝试紧密拟合训练数据,但却不能很好地泛化到新数据,就会发生过拟合。
如果不符合监督式机器学习的关键假设,那么我们将失去对新数据进行预测这项能力的重要理论保证。

5. 训练集和测试集
将数据集分为两个子集的概念:

  • 训练集 - 用于训练模型的子集。
  • 测试集 - 用于测试训练后模型的子集。

确保您的测试集满足以下两个条件:

  • 规模足够大,可产生具有统计意义的结果。
  • 能代表整个数据集。换言之,挑选的测试集的特征应该与训练集的特征相同。

请勿对测试数据进行训练。如果您的评估指标取得了意外的好结果,则可能表明您不小心对测试集进行了训练。

例如,假设一个模型要预测某封电子邮件是否是垃圾邮件,它使用主题行、邮件正文和发件人的电子邮件地址作为特征。我们按照 80-20 的拆分比例将数据拆分为训练集和测试集。在训练之后,该模型在训练集和测试集上均达到了 99% 的精确率。我们原本预计测试集上的精确率会低于此结果,因此再次查看数据后发现,测试集中的很多样本与训练集中的样本是重复的(由于疏忽,我们在拆分数据之前,没有将输入数据库中的相同垃圾邮件重复条目清理掉)。我们无意中对一些测试数据进行了训练,因此无法再准确衡量该模型泛化到新数据的效果。

6. 验证集
为了防止过拟合,增加了验证集。
水平条分为三段:70% 属于训练集,15% 属于验证集,15% 属于测试集
该工作流程之所以更好,原因在于它暴露给测试集的信息更少。
与图 2 类似的工作流程,不同之处在于该工作流程使用验证集而不是测试集来评估模型。然后,在训练集和验证集大致达成一致后,使用测试集确认模型效果。

没有评论: