模型评估

公共数据集

在前面的课程中,我们学习过一些常用的公共数据集,例如

  • 波士顿房价数据集
  • 鸢尾花数据集
  • 手写数字数据集

这些数据集都被划分成了训练集和测试集。训练集,就是用来训练模型的样本,那么测试集的作用是什么呢?

模型评估

当我们训练好了一个模型之后,需要去评价这个模型的好坏。最直接的办法就是拿着这个模型去做实际的判断,比如垃圾邮件过滤,就看看能否把垃圾邮件都筛选出来。如果没有识别出垃圾邮件,或者把正常的邮件错认成垃圾邮件过滤掉了,那么都是出现了误判或者说是错误。出现错误过多的模型,显然就不是好的模型。

  • 误差:学习期的预测输出,和样本的真实标记之间的差异称为误差
  • 训练误差:训练集上的误差称为训练误差
  • 泛化误差:在新样本上的误差称为泛化误差

在前面的线性回归的程序中,我们计算的损失都是在训练集上的损失,因此都是训练误差。

  • 过拟合:在训练模型时,如果一味的追求使训练误差尽量达到最小,就有可能会出现一种现象:在训练集上表现的很好的学习器,在实际应用中在新样本上的泛化误差却很大,这种现象就叫做过拟合。

机器学习,就是通过对样本数据的学习,希望尽可能学习到适用于所有潜在样本的本质特征和普遍规律,从而能够对未知的数据进行预测或者分类。但是由于训练样本的数量有限,如果学习器的学习能力过于强大,就会发生过度学习,把训练样本中特有的特性都当成是所有样本都必须具备的普遍特征,学习到了导致泛化能力降低。

例如我们设计了一个识别树叶的程序,希望他能够认识所有的树叶
模型评估
但是我们采集的用来训练模型的树叶的样本是有限的,假如在这些树叶上面恰好都有一些细微的划痕,或者斑点或者树叶的边缘,恰好都是锯齿形状的,如果学习过度学习器就会学习到所有这些细微的特征,认为必须具备这样的特征才是树叶。

如果给他看一片完美的,没有划痕和斑点的树叶,或者边缘没有锯齿的树叶,它就识别不出来,认为这不是树叶。
模型评估
在这种情况下,模型就好像一个记忆能力超群的高手,他记住了训练集上所有样本的属性和标签,因此在训练集上的正确率可以达到或者接近100%,但是当出现新的没有见过的样本时,却不具备举一反三的能力,出现很多错误。

和过拟合相对的是欠拟合。

  • 欠拟合:学习不足,没有学习到样本中的通用特征
    比如学习器无法学到所有树叶共同的特征,那么给他一片新的树叶,它也识别不出来,这就是欠拟合。

机器学习的目标:泛华误差小

可以看出来,我们希望模型在新的没有见过的数据上表现的很好,而不仅仅是在训练集上表现优异,也就是说在机器学习中,我们的目标不仅仅是模型的训练误差小,而更希望它的泛化误差小。

但是新的样本是无限多的,在实际中我们不可能测试无限多样本的数据集,因此实际上是无法得到泛化误差的。

训练集和测试集

为了评价学习算法,在新的没有见过的数据上的效果,我们就把数据样本及划分为训练集合测试集

  • 训练集:训练模型
  • 测试集:测试学习器在新样本上的预测或判断能力
  • 测试误差:用来近似泛化误差

首先使用训练集,训练完成之后,再在测试集上运行模型测试学习器,对新样本的预测或者判断能力,使用这个测试集上的测试误差来作为泛化误差的近似。为了得到泛化性能强的模型测试集中的样本,最好是没有在训练集中出现过,也就是说测试集应该尽可能和训练集是互斥的。

公共数据集

公共数据集一般由研究机构或大型公司创建和维护,可以直接从这些机构提供的链接中下载。由于它们是由不同的组织创建的,因此它们的格式各不相同,这就需要我们针对不同的数据集去编写代码解析和读取它们。

为了方便学习者使用很多数据处理和机器学习库都内置了一些常用的公共数据集,并且对他们进行了封装,提供了快速下载读取和访问他们的函数。

例如keras中就集成了波士顿房价数据集,手写数字数据集等常用的数据集,我们在编程时可以直接使用这些数据集的名称来加载和使用它们,而不必考虑数据集下载保存解析的细节,从而把精力集中于业务逻辑的开发。
模型评估
鸢尾花数据集在keras中没有封装,我们介绍了使用tf.keras下载,然后使用partners读取和访问它,并转换为numpy数组的方法。
模型评估
对于同一个数据集,不同的下载源,提供的数据集的格式,对训练集和测试集的划分方式,可能不同,甚至有些并没有划分,需要我们自己去划分他们不同的库,对于数据集的封装方式也可能会不同。大家可以根据需要选择合适的方式获取和使用这些数据集。