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

5.2 S型函数

尽管我们不能使用线性回归模型解决上述二元分类问题,但并不意味着必须废弃现有的线性回归代码从头开始。相反,我们可以使用统计学家称为逻辑回归的方法,通过对现有算法进行调整的方式来解决这个新问题。

我们首先来回顾一下变量,它是输入样本数据的加权和,我们曾经在4.1节中介绍过:

在线性回归模型中,可以取任何数值。然而,在二元分类的场合有着十分严格的取值约束,即的取值既不能低于0也不能高于1。其实我们可以这样考虑,也许可以找到一个能够包裹着这个加权和取值的函数,通过这个函数将的取值限制在0~1的范围之内,如下式所示:

我来重复一下wrapper_function()函数的作用,该函数可以读取加权和(可以取任何数值)的任何数值,并将该数值压缩到0~1的范围之内。

这里还有一个要求,就是要找的这个函数必须能够很好地配合梯度下降算法。想想看,我们需要使用这个函数来计算,然后通过来计算损失,最后通过梯度下降法来不断减少损失。为了能够实现梯度下降算法,这个wrapper函数应该是平滑的,并且没有水平区域(此时梯度为零)或突然的缝隙缺口(此时梯度没有定义)。

总结一下,我们希望这个函数能够在0~1的范围内平滑地变化,而不会出现跳跃或水平化。如下图所示:

这是一个名为逻辑函数(logistic function)的众所周知的函数,它属于S型的函数族。事实上,由于“逻辑函数”很拗口,人们通常将它简称为“S型函数”。这个S型函数的具体表达式如下:

希腊字母西格玛(σ)代表S型函数,我还使用字母z表示S型函数的输入,以避免与系统中的输入x相混淆。

我们很难通过直观的方式去理解S型函数公式表达式的形式,但这个函数的图像告诉了我们需要知道的一切。当输入为0时,S型函数输出0.5。然后,随着输入变量朝负数方向的变化,函数值迅速而平稳地向0的方向下降,并且随着输入变量朝正数方向的变化,函数值迅速而平稳地向1的方向上升。但是,函数值永远不会到达0和1这两个极端取值。换句话说,S型函数可以将任何数值压缩到0~1这个狭窄的范围之内,并且没有任何陡峭的悬崖,也不会完全变平。这正是我们需要的函数!

让我们再次回到代码部分并使用这个新发现的知识。