
引言
在线性回归中,输出是连续的。而在逻辑回归中,输出非 A 即 B,解决的是二分类的问题。比如某套房子是否适合购买,明天是否有雨等。
逻辑回归
线性回归的输出是连续的,如果要预测二分类选择问题,线性回归就不好满足了。比如预测某套房子是否适合购买,通过如下的数据如何建立模型呢?

回顾线性回归的方程:
Y1m=W1n∗Xnm+b
其中:
-
n 表示变量维度
-
m 表示样本个数
-
X 表示变量矩阵
-
W 表示权重矩阵
- b 表示偏移量
线性回归的输出 Y 是连续的,如何才能把结果改造成逻辑回归要求的非 A 即 B,非 0 即 1 呢?
首先想到的是利用阶跃函数:

u(x)={01x<0x>=0
阶跃函数是一个分段函数,当变量小于 0 时结果为 0,当变量大于等于 0 时结果为 1。
使用阶跃函数确实可以把输出固定为 0 或 1,但运算求解就比较麻烦了,因为阶跃函数是分段函数,不是连续可导的函数。
那有没有一个既连续可导又类似阶跃函数的函数呢,还真有,就是下面这个 sigmoid 函数:

Sigmoid(x)=s=1+e−x1
可以看到,Sigmoid 函数不仅连续可导,并且随着变量的变化,在 y 轴两侧很快就趋近于 0 或 1 了。
所以我们在线性回归的基础上加上一层 Sigmoid 函数即可得到逻辑回归的方程:
Y1m=Sigmoid(W1n∗Xnm+b)
逻辑回归的损失函数
和线性回归一样,我们仍然希望方程预测的值 Y^ 与真值 Y 差异越小越好,需要给出表示误差大小的损失函数。
逻辑回归的损失函数和线性回归中有所不同。
因为对于逻辑回归而言,线性回归损失函数的形式 21∑i=1m(y^i−yi)2 过于复杂且不是凸函数(因为有sigmoid),不好求最小值点。
逻辑回归的损失函数采用的是交叉熵:
loss=−(ylogy^+(1−y)log(1−y^))
关于交叉熵的细节可以参考 《决策树系列1:聊聊信息熵》,这里仅给出直观的解释。
- 当真值 y = 0 时, loss=−log(1−y^), 希望 loss 越小越好,而 loss 越小,log(1−y^) 越大,1−y^ 越大,y^ 越小,逼近真值 y=0, 符合预期。
- 当真值 y = 1 时, loss=−logy^, 希望 loss 越小越好,而 loss 越小,logy^ 越大,y^ 越大,逼近真值 y=1, 符合预期。
损失函数的矩阵表示为:
Loss=−(YlogY^+(1−Y)log(1−Y^))
求解逻辑回归
逻辑回归的求解采用梯度下降的方法,梯度下降在线性回归中我们介绍过,采用多轮迭代逼近的方式,每轮求解偏导数 (dW,db) 然后沿偏导数减小的方向前进 α 步长并更新 (W, b)。
我们把一轮中从 X 到 Y^ 再到 Loss 的过程叫做正向传播,把从 Loss 求解 (dW,db) 的过程叫做反向传播。

1. 正向传播
ZY^Loss=W∗X+b=A=sigmoid(Z)=−(YlogY^+(1−Y)log(1−Y^))
这里预测值 Y^ 又写做 A 是为了与后续篇章神经网络保持一致。
2. 反向传播
反向传播中主要利用链式求导法则,即 ∂x∂z=∂y∂z∂x∂y
dA=∂A∂L=−AY+1−A1−YdZ=∂Z∂L=∂A∂L∂Z∂A=(−AY+1−A1−Y)⋅A(1−A)=A−YdW=∂W∂L=∂Z∂L∂W∂Z=m1⋅dZXT=m1(A−Y)XTdb=∂b∂L=∂Z∂L∂b∂Z=m1⋅sum(dZ)=m1sum(A−Y)
求解 dZ 时用到了 sigmoid 的导数:令 sigmoid(Z) = A, 则 sigmoid’(Z) = A’ = A(1-A)
在 dW 和 db 中都有一个 m1, 这是因为正向计算时有 m 个样本,所以这里需要除以 m
3. 更新参数
W:b:=W−αdW=b−αdb
经过 (1,2,3) 的多轮迭代即可得到最优的(W,b)。
后记
逻辑回归今天就聊到这里。铺垫了两次,下一次终于可以开始神经网络了,神经网络与人体神经有什么关系,它又是如何工作的,且听下回分解。
欢迎关注本人公众号《大数据茶馆》,用大白话畅聊大数据。
来的都是客,欢迎您常来坐坐~
