逻辑回归

逻辑回归

分割线


逻辑回归

已知:给定数据,包含数据的特征和label

问题:二分类,根据数据的特征,对数据二分类。

例子:给定一个肿瘤的特征,如大小形状等等,判断是否是恶性肿瘤。

基础:线性回归,输入一个肿瘤各种特征,经过线性变换得到一个预测值y,若y>0.5为恶性,y<0.5为良性。

大概原理:

逻辑回归是在线性回归的基础上,增加了一个sigmoid函数。 为什么要增加这么一个函数呢?一个原因是线性回归的鲁棒性很差,就是因为线性回归需要作用于整个实数域,或者说,对整个实数域敏感,而分类的话,只需要在0,1之间分类就好了。sigmiod函数就能把预测区间减少到零到一。同时这个函数是单调可微的。

有了Sigmoid fuction之后,由于其取值在[0,1],我们就可以将sigmoid的结果 ϕ(x)当作类别1的后验概率估计p(y=1|x),也就是该点属于类别1的概率。

如果这个结果>0.5那么归为类别1,反之归为类别0.

那我们现在逻辑回归模型预测的流程就变成了:输入数据及特征 -> 经过线性变换和sigmoid函数输出一个预测值 -> 根据预测值的大小分类。

loss function选取:

模型参数:ω和b,也就是权重和偏差。

一般机器学习和深度学习的训练就是降低损失函数。

逻辑回归特殊之处是用最大似然的方法来做,个人感觉和降低损失函数差不多。

为什么不用mse,理论上来说mse也可以作为loss function,但是其图像可能有较多局部最小值,不平滑。所以mse对于之后的sgd步骤不太友好。

那么极大似然函数如何推导:

ϕ(z)可以视为类别1的后验估计,即:
p(y=1x;ω)=ϕ(ωT+b)=ϕ(z) p(y=1|x;\omega) = \phi(\omega^T+b) = \phi(z)

那么关于类别0,自然有:(因为是二分类)
p(y=0x;ω)=1ϕ(z) p(y=0|x;\omega) = 1-\phi(z)

把上面两个公式合起来写:
p(yx;ω)=ϕ(z)y(1ϕ(z))1y p(y|x;\omega)=\phi(z)^y \cdot (1−\phi(z))^{1−y}

​ y=1时转换为第一个式子,y=0时转换为第二个式子。

我们现在已知很多样本,我们需要找到参数ω\omega,使用最大似然函数来估计参数:
L(ω)=i=1np(y(i)x(i);ω)=i=1n(ϕ(z(i)))y(i)(1ϕ(z(i)))1y(i) L(\omega) = \prod_{i=1}^n p(y^{(i)}|x{(i)};\omega) = \prod_{i=1}^n(\phi(z^{(i)}))^{y^{(i)}} \cdot (1−\phi(z^{(i)}))^{1−y^{(i)}}
取对数:
l(ω)=lnL(ω)=i=1ny(i)ln(ϕ(z(i)))+(1y(i))ln(1ϕ(z(i))) l(\omega) = \ln L(\omega)=\sum_{i=1}^n y^{(i)} \ln (\phi(z^{(i)})) + (1-y^{(i)})\ln (1-\phi(z^{(i)}))

再取反:
J(ω)=l(ω)=i=1ny(i)ln(ϕ(z(i)))+(1y(i))ln(1ϕ(z(i))) J(\omega)=-l(\omega) = -\sum_{i=1}^n y^{(i)} \ln (\phi(z^{(i)})) + (1-y^{(i)})\ln (1-\phi(z^{(i)}))

就是loss function了,因为最大似然函数估计参数是要最大化,所以我们取反后就是最小化,可以用gradient descent了。

当然这是对所有的数据(样本),只取一个看:
J(ϕ(z),y;ω)=yln(ϕ(z))(1y)ln(1ϕ(z)) J(\phi(z),y;\omega) = - y \ln (\phi(z)) - (1-y)\ln (1-\phi(z))

sgd训练:

sigmoid function有一个很好的性质就是
ϕ(z)=ϕ(z)(1ϕ(z)) \phi^{&#x27;}(z) = \phi(z)(1-\phi(z))

sgd更新梯度如下:
J(ω)ωj==i=1n(y(i)ϕ(z(i)))xj(i) \frac {\partial J(\omega)} {\partial \omega_j} = \cdots = -\sum_{i=1}^n (y^{(i)} - \phi(z^{(i)})) x_j^{(i)}

当然上面严格说来是gd不是sgd,sgd只需要更新几个而不是全部.

改进的随机梯度下降

1)在每次迭代时,调整更新步长alpha的值。随着迭代的进行,alpha越来越小,这会缓解系数的高频波动(也就是每次迭代系数改变得太大,跳的跨度太大)。当然了,为了避免alpha随着迭代不断减小到接近于0(这时候,系数几乎没有调整,那么迭代也没有意义了),我们约束alpha一定大于一个稍微大点的常数项,具体见代码。

2)每次迭代,改变样本的优化顺序。也就是随机选择样本来更新回归系数。这样做可以减少周期性的波动,因为样本顺序的改变,使得每次迭代不再形成周期性。

改进的随机梯度下降算法的伪代码如下:

################################################

初始化回归系数为1

重复下面步骤直到收敛{

​ 对随机遍历的数据集中的每个样本

​ 随着迭代的逐渐进行,减小alpha的值

​ 计算该样本的梯度

​ 使用alpha x gradient来更新回归系数

​ }

返回回归系数值

#################################################

几个问题:

交叉熵代价函数cross entropy通常用做多分类问题的loss function,其形式和上面的似然函数取对数很想,但其实是有信息论中信息熵的概论推导过来的。

逻辑回归

sigmoid和softmax是神经网络输出层使用的**函数,分别用于两类判别和多类判别。

binary cross-entropy和categorical cross-entropy是相对应的损失函数。

https://blog.csdn.net/lanchunhui/article/details/50970625

https://www.cnblogs.com/silent-stranger/p/7987708.html