机器学习编程:从编码到深度学习
上QQ阅读APP看书,第一时间看更新

1.3 魔法背后的数学原理

监督学习系统使用函数拟合这一数学概念来理解样本数据与其标签之间的关系。下面我们结合具体实例来介绍这个数学概念的基本原理。

想象一下,你家屋顶上有一块太阳能板。你就像是一个监督学习系统一样,学习太阳能板如何产生能量,并预测在未来某个时间段内产生能量的大小。

预测太阳能板的能量输出需要时间、天气等变量。时间应该是一个重要变量,所以你决定专注于时间这个变量。对于真正的监督学习过程,你应该从收集每天不同时段太阳能板所产生能量大小的样本数据开始。经过几周时间的随机取样之后,你得到了如下数据列表:

上表中的每一行都是包含输入变量(时间)与标签(产生的能量值)的样本数据,就像那个识别动物的系统一样,动物图片是输入,动物名称是标签。

如果你将这些样本数据绘成一幅图表,那么就能很形象地看到时间与太阳能板产能值之间的关系:

我们一看就知道,太阳能板不会在夜间产生能量,并且能量值在中午的时间达到了顶峰。如下图所示,虽然监督学习系统没有人脑那样机敏,但是它能够将样本数据近似拟合成某个函数,由此实现对数据的理解。

寻找与样本数据比较接近的拟合函数并不是一件容易的事情。但是,随后的预测阶段就要简单得多。系统会忘记所有的样本信息,并使用找到的拟合函数来预测太阳能板在未来某个时间所产生的能量,例如在正午时产生的能量如下图所示:

这就是我所说的监督学习通过函数拟合的方式实现算法功能。监督学习系统接收的实际样本数据通常是混乱且不完整的。在数据训练阶段,我们通常需要构造一个比较简单的函数来近似拟合比较复杂的实际数据。在预测阶段,则使用所构造的拟合函数实现对未知数据的预测。

作为一名程序员,你已经习惯于考虑很多有可能出错的情形。因此,你可能已经在考虑将样本数据的处理复杂化的方法。例如,太阳能电池板的能量输出除了与时间有关之外,还会受到其他因素的影响,比如云层或月份的影响。如果收集了所有这些变量的数据,那么我们将会得到一个多维的点云,将无法使用一个简单的图表对这些点云数据进行可视化表示。同样,对于太阳能电池板,我们需要预测的是数值标签。你可能想知道如何将这种数值标签转换成非数值标签(如动物的名称),即类别标签。

我们将在本书中讨论所有这些问题。你现在只需要知道一点:不管你在上面叠加了多少复杂的东西,监督学习的基本思想就和我们刚才所描述的一样——找一堆样本数据,再找到一个可以近似拟合这些样本数据的函数。

现代监督学习系统非常擅长这种拟合工作。事实上,这种拟合功能可以强大到足以拟合出极其复杂的函数关系——例如X光扫描图片和诊断结论之间的关系。当然,用于拟合这些对应关系的函数对于我们人类而言会是非常复杂的。然而,对于计算机系统而言则是小菜一碟。

简而言之,这就是监督学习。至于细节……嗯,本书的其余部分都是关于细节的。让我们设置好计算机,开始编码吧。

什么是非监督学习

机器学习有几种不同的基本类型。大部分教材都列出了三种,即强化学习、监督学习和非监督学习。我们使用强化学习来引入机器学习的基本原理,并在本书剩下的章节里讨论监督学习。那么什么是非监督学习呢?

监督学习和非监督学习技术的区别在于,非监督学习是从未标注的样本数据中进行学习。实际上,非监督学习与“学习”这一直觉理念没有关系,它更像是一种复杂的数据处理方式。

下面是一个非监督学习的例子。假设你正在为一家线上商店做市场调研。你拥有商店客户的所有数据:他们花了多少钱,访问线上商品的次数,等等。一种非监督学习算法可以通过将相似的客户进行分组,来帮助你理解这些数据——这个过程被称为聚类。

非监督学习十分有用,但它可能不是你心目中的机器学习。我们会在本书中重点讨论监督学习。