逻辑回归

在这里插入图片描述

分割线


逻辑回归

已知:给定数据,包含数据的特征和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 = 1 ∣ x ; ω ) = ϕ ( ω T + b ) = ϕ ( z ) p(y=1|x;\omega) = \phi(\omega^T+b) = \phi(z) p(y=1x;ω)=ϕ(ωT+b)=ϕ(z)

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

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

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

我们现在已知很多样本,我们需要找到参数 ω \omega ω,使用最大似然函数来估计参数:
L ( ω ) = ∏ i = 1 n p ( y ( i ) ∣ x ( i ) ; ω ) = ∏ i = 1 n ( ϕ ( z ( i ) ) ) y ( i ) ⋅ ( 1 − ϕ ( z ( i ) ) ) 1 − y ( 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(ω)=i=1np(y(i)x(i);ω)=i=1n(ϕ(z(i)))y(i)(1ϕ(z(i)))1y(i)
取对数:
l ( ω ) = ln ⁡ L ( ω ) = ∑ i = 1 n y ( i ) ln ⁡ ( ϕ ( z ( i ) ) ) + ( 1 − y ( 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)})) l(ω)=lnL(ω)=i=1ny(i)ln(ϕ(z(i)))+(1y(i))ln(1ϕ(z(i)))

再取反:
J ( ω ) = − l ( ω ) = − ∑ i = 1 n y ( i ) ln ⁡ ( ϕ ( z ( i ) ) ) + ( 1 − y ( 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)})) J(ω)=l(ω)=i=1ny(i)ln(ϕ(z(i)))+(1y(i))ln(1ϕ(z(i)))

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

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

sgd训练:

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

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

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

改进的随机梯度下降

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

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

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

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

初始化回归系数为1

重复下面步骤直到收敛{

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

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

​ 计算该样本的梯度

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

​ }

返回回归系数值

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

几个问题:

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

img

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值