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

4.1 添加更多维度

我们在前一章编写了一个基于梯度下降算法的增强版学习程序。我们可以将这个增强的学习程序进一步扩展为包含多个变量的复杂模型。

我们一时心软,向朋友Roberto提到了可以扩展程序的可能性。这真是个错误。Roberto现在对比萨销量的预测充满了热情,除了使用座位预订数量这个输入变量之外,他还希望能够通过使用一系列不同的输入变量进行比萨销量的预测,比如天气、镇上的游客数量等输入变量。

这对我们来说意味着更多的工作。当然,我们不能责怪想要在模型中添加更多变量的Roberto。毕竟,被考察的变量越多,就越有可能准确地预测比萨的销量。

我们从旧pizza.txt文件中的一个增强版本开始。下面是这个新样本数据集的前几行数据:

Roberto猜想在天气温和的时候,可能会有更多的人光顾他的比萨店,所以他会以摄氏度为单位记录下店里的温度(例如,2摄氏度接近结冰;26摄氏度约为78华氏度)。数据集中的第三列是标签(比萨销量),前两列是输入变量。

首先,考察一下输入变量由一个变成两个时,线性回归会发生什么变化。你知道,线性回归是使用一条直线来近似拟合样本数据,如下图所示。

提醒一下,下面给出的公式是一个直线方程:

如果我们在线性回归模型中添加第二个输入变量(比如“温度”),那么这些样本数据就不再是分布在平面上的数据点了,它们会是分布在三维空间中的数据点。为了拟合这些数据点,我们可以使用一个比直线模型多一个维度且用途与直线模型等价的数学模型,即平面模型,如下图所示。

与直线模型一样,我们可以使用平面方程来计算。平面方程与直线方程比较类似,但它包含两个输入变量x1和x2,以及两个权重w1和w2:

如果你不相信我们需要为每个输入变量设置单独的权重,那么可以试着使用更为具体的表达术语进行思考。在Roberto的数据集中,x1是座位预订数量,x2是温度值。预订数和温度值分别对比萨的销售数量有着不同的影响,因此它们的权重应该有所不同。

在直线方程中,偏置b使得直线偏离原点。对于平面方程来说也是如此,如果平面方程没有偏置b,那么这个平面就会被限制为一个通过坐标轴的原点的平面。如果你想证明这个结论,可以把所有的输入变量设为0。在没有偏置b的情况下,也将是0。如果存在偏置变量,平面就可以自由地垂直移动,并且可以找到尽可能接近样本数据点的位置。

现在我们来考察一下当Roberto在数据集中新增一列时,会发生什么变化。

这个新增的列表示镇里游客的密度,相关数据可以从当地旅游局网站下载获得。游客密度的取值可以从1(毫无游客)到10(游客爆满)。

我们从使用一维模型来拟合二维的样本数据开始。然后在此基础上,添加一个输入变量,继续使用一个二维模型来拟合三维的样本数据。既然我们已经有了四维的样本数据,那么就需要使用三维模型来拟合这些样本数据。随着更多输入变量的加入,这个过程还会持续下去。为了拟合n维的样本数据,我们需要使用(n-1)维的模型。

除了H. P. Lovecraft(他是被誉为“现代恐怖小说之父”的著名美国小说家,克苏鲁系列的作者——译者注)笔下的人物之外,人类只能感知三维信息,但使用数学方法处理那些可弯曲的多维空间则没有任何问题,只是将这些多维空间称为超空间,并使用与二维和三维空间相同的方程来描述它们而已。无论空间包含多少个维度,我们都可以将输入变量和权重添加到如下关于直线或平面的公式之中:

上述公式称为输入数据的加权和。直线方程只是其中一种特殊的情况,即为单个输入的加权和。因此,可以在这里使用一个简单的方案,将我们的学习程序从具有一个输入变量的情形升级为具有多个输入变量的情形。我们将使用更通用的加权和计算公式来替换前述的直线方程。

然而,要实现这个简单的方案,就必须了解更多的数学运算。让我们先来学习一下这些数学运算。