5.2.4 模型函数受到的影响
当我们在做线性回归计算的时候,使用的模型是直线、平面或高维超平面。在接下来的几节内,我们通过S型函数包裹了模型从而改变了它的形状。让我们来看看这个新模型是什么样的。
为了可视化新模型,我写了个脚本来训练Roberto文件中关于第一列样本数据的分类器,然后绘制forward()函数图像。如下图所示:
我们将加权和传递到S型曲线上,使得一条简单的曲线看起来更像S型曲线。一眼看去,你就知道这个曲线比直线更加适合这些样本数据。统计学家也可以从数学的角度证明这个模型对于异常值来说更加稳定。
我们只画了forward()函数的图像——分类器在训练阶段使用的模型。对于标签值的预测,分类器通过classify()函数遍历模型,生成下图所示更为尖锐的图像:
当座位预订数低于某个阈值(在本例中似乎是12)时,模型的输出值就会小于0.5,classify()函数就会将其四舍五入为0。当座位预订数高于这个阈值时,模型的输出值大于0.5,classify()函数就会将其四舍五入为1。我们可以通过逐步求精的方法获得所需的分类函数模型。训练阶段的工作是拉伸和移动这条曲线,并最终设置好确定分类结果输出是0还是1的阈值。
当你在模型中再添加另外一个输入变量时,虽然模型函数从形式上看与之前的函数比较类相似,但是它现在是三维图像,如下图所示:
再说一次,我们之前有一个线性曲面,例如一个平面,而现在我们有一个曲面。这个曲面的取值被裁剪为0或1来预测某个二元标签。如果我们向样本数据中添加更多的输入变量,就会发生同样的过程,但是模型的维度会变得更高,无法再对其进行可视化的表示。
需要说明的是,图像中显示的与我们在5.2.2节中看到的损失曲线无关。这个图像使模型得到可视化的表示,而前面的图像则是使得模型的损失函数变得可视化。即使这两个函数是不同的,但是它们之间是相关的。特别地,如果模型函数包含了突然的跳跃,那么损失函数也会发生突然的跳跃。我们的模型函数看起来像丝绸一样光滑,从梯度下降法准确性的角度来看,这是一件好事。
既然你们已经见识过了分类器模型的图像,那么现在该转为实际操作了。让我们来运行代码吧。