1.逻辑回归

  逻辑回归(Logistic regression,简称LR)虽然其中带有"回归"两个字,但逻辑回归其实是一个分类模型,并且广泛应用于各个领域之中。 将线性回归模型得到的结果通过一个非线性的 s i g m o i d sigmoid sigmoid函数,得到 [ 0 , 1 ] [0,1] [0,1]之间取值范围的值,同时设置阈值为 0.5 0.5 0.5,通过与阈值的比较达到二分类的效果,即为逻辑回归模型。

  关于逻辑回归,可以用一句话总结:假设数据服从伯努利分布(0-1分布),通过极大似然函数的方法,运用梯度下降法求解参数,来达到将数据二分类的目的

2.sigmoid函数

2.1 sigmoid函数公式

逻辑回归就是基于sigmoid函数构建模型,该函数公式如下
g ( z ) = 1 1 + e ( − z ) g(z)=\frac{1}{1+e^{(-z)}} g(z)=1+e(−z)1​
使用Python的numpy,matplotlib对该函数进行可视化,如下:

# 绘制[-7,7]的sigmod函数图像
import matplotlib.pyplot as plt
import numpy as npdef sigmod(z):return 1.0 / (1.0 + np.exp(-z))z = np.arange(-7, 7, 0.1)
phi_z = sigmod(z)
plt.plot(z, phi_z)
plt.axvline(0.0, color='k')
plt.axhspan(0.0, 1.0, facecolor='1.0', alpha=1.0, ls="dotted")
plt.yticks([0.0, 0.5, 1.0])
plt.ylim(-0.1, 1.1)
plt.xlabel('z')
plt.ylabel('$g(z)$')
plt.show()

逻辑回归模型直观上看:
y _ p r e d = 1 1 + e − ( w 0 + w 1 ∗ x 1 + w 2 ∗ x 2 + . . . + w n ∗ x n ) y_{\_pred}=\frac{1}{1+e^{-(w_0+w_1*x_1+w_2*x_2+...+w_n*x_n)}} y_pred​=1+e−(w0​+w1​∗x1​+w2​∗x2​+...+wn​∗xn​)1​
线性回归模型套上了 s i g m o i d sigmoid sigmoid函数就输出值压缩到了 ( 0 , 1 ) (0,1) (0,1)之间,设置阈值 0.5 0.5 0.5即可分类。

2.2 sigmoid函数的性质

  • 将任意的输入压缩到 ( 0 , 1 ) (0,1) (0,1)之间
  • 函数在 z = 0 z=0 z=0处的导数最大
  • 设 f ( x ) = s i g m o i d ( x ) f(x)=sigmoid(x) f(x)=sigmoid(x), f ( x ) f(x) f(x)的导函数为: ∂ f ( x ) ∂ x = f ( x ) ( 1 − f ( x ) ) \frac{ \partial f(x) }{ \partial x}=f(x)(1-f(x)) ∂x∂f(x)​=f(x)(1−f(x))
  • 函数两边梯度趋于饱和(容易导致梯度消失)
  • 函数不以原点为中心

2.3 逻辑回归使用sigmoid函数的原因

  对于一般的线性回归模型,我们知道:自变量 X X X和因变量 Y Y Y都是连续的数值,通过 X X X的输入就可以很好的预测 Y Y Y值。在实际生活中,离散的数据类型也是比较常见的,比如好和坏,男和女等等。那么问题来了:在线性回归模型的基础上,是否可以实现预测一个因变量为离散数据类型的模型呢?

答案当然是可以的。我们可能会想想到阶跃函数:
f ( n ) = { 0 , i f z < 0 0.5 , i f z = 0 1 , i f z > 0 f(n)= \begin{cases} 0, &if\ \ z \lt 0\\ 0.5, &if\ \ z=0 \\ 1, &if\ \ z\gt 0 \end{cases} f(n)=⎩ ⎨ ⎧​0,0.5,1,​if  z<0if  z=0if  z>0​
但是用在这里是不合适的,正如我们神经网络激活函数不选择阶跃函数的原因一样,因为它不连续不可微。 而能满足分类效果,且是连续的函数,sigmoid函数是再好不过的选择了。因此逻辑回归模型是在线性回归模型的基础上,套一个sigmoid函数,得到一个处于[0,1]之间的数值,同时设置一个阈值,通过与阈值的比较来实现分类的效果

3.逻辑回归的假设

逻辑回归的假设条件主要是两个:

(1)假设数据服从伯努利分布

(2)假设模型的输出值是样本为正例的概率

基于这两个假设,我们可以分别得出类别为 1 1 1和 0 0 0的后验概率估计
P ( y = 1 ∣ x , θ ) = h θ ( x ) = 1 1 + e − x θ P ( y = 0 ∣ x , θ ) = h θ ( x ) = e − x θ 1 + e − x θ P(y=1|x,\theta)=h_{\theta}(x)=\frac{1}{1+e^{-x\theta}} \\[2ex] P(y=0|x,\theta)=h_{\theta}(x)=\frac{e^{-x\theta}}{1+e^{-x\theta}} P(y=1∣x,θ)=hθ​(x)=1+e−xθ1​P(y=0∣x,θ)=hθ​(x)=1+e−xθe−xθ​

4.逻辑回归的损失函数

  有了模型,我们自然会想到要求策略,也就是损失函数。对于逻辑回归,很自然想到:用线性回归的损失函数"离差平方和"的形式是否可以?

  但事实上,这种形式并不适合,因为所得函数并非凸函数,而是有很多局部的最小值,这样不利于求解。

  前面说到逻辑回归其实是概率类模型,因此,我们通过极大似然估计(MLE)推导逻辑回归损失函数(交叉熵损失函数)。 下面是具体推导过程。

① 通过基本假设得到了 1 1 1和 0 0 0两类的后验概率,现在将两个概率合并可得:
P ( y = 1 ∣ x , θ ) = h θ ( x ) y ( 1 − h θ ( x ) ) 1 − y y ∈ { 0 , 1 } P(y=1|x,\theta)=h_{\theta}(x)^{y}(1-h_{\theta}(x))^{1-y}\qquad y\in\{0,1\} P(y=1∣x,θ)=hθ​(x)y(1−hθ​(x))1−yy∈{0,1}
② 使用极大似然估计来根据给定的训练数据集估计出参数,将n个训练样本的概率相乘得到:
L ( θ ) = ∏ i = 1 n P ( y ( i ) ∣ x ( i ) , θ ) = ∏ i = 1 n h θ ( x ( i ) , θ ) y ( i ) [ 1 − h θ ( x ( i ) , θ ) ] 1 − y ( i ) L(\theta)=\prod \limits^n \limits_{i=1}P(y^{(i)}|x^{(i)},\theta)=\prod \limits^n \limits_{i=1}h_{\theta}(x^{(i)},\theta)^{y^{(i)}}[1-h_\theta(x^{(i)},\theta)]^{1-y^{(i)}} L(θ)=i=1∏n​P(y(i)∣x(i),θ)=i=1∏n​hθ​(x(i),θ)y(i)[1−hθ​(x(i),θ)]1−y(i)
③ 似然函数是相乘的模型,可以通过取对数将等式右侧变为相加模型,然后将指数提前,以便于求解。变换后如下:
l ( θ ) = l n ( L ( θ ) ) = ∑ i = 1 n y ( i ) l n [ h θ ( x ( i ) , θ ) ] + ( 1 − y ( i ) ) l n [ 1 − h θ ( x ( i ) , θ ) ] l(\theta)=ln(L(\theta))=\sum\limits^n\limits_{i=1}y^{(i)}ln[h_{\theta}(x^{(i)},\theta)]+(1-y^{(i)})ln[1-h_{\theta}(x^{(i)},\theta)] l(θ)=ln(L(θ))=i=1∑n​y(i)ln[hθ​(x(i),θ)]+(1−y(i))ln[1−hθ​(x(i),θ)]
④ 如此就推导出了参数的最大似然估计。我们的目的是将所得似然函数极大化,而损失函数是最小化,因此,我们需要在上式前加一个负号便可得到最终的损失函数。
J ( θ ) = − l ( θ ) = − ( ∑ i = 1 n y ( i ) l n [ h θ ( x ( i ) , θ ) ] + ( 1 − y ( i ) ) l n [ 1 − h θ ( x ( i ) , θ ) ] ) J(\theta)=-l(\theta)=-\left(\sum\limits^n\limits_{i=1}y^{(i)}ln[h_{\theta}(x^{(i)},\theta)]+(1-y^{(i)})ln[1-h_{\theta}(x^{(i)},\theta)]\right) J(θ)=−l(θ)=−(i=1∑n​y(i)ln[hθ​(x(i),θ)]+(1−y(i))ln[1−hθ​(x(i),θ)])

J ( h θ ( x ( i ) ; θ ) , y ; θ ) = − y l n ( h θ ( x ; θ ) ) − ( 1 − y ) l n ( 1 − h θ ( x ; θ ) ) J(h_{\theta}(x^{(i)};\theta),y;\theta)=-yln(h_{\theta}(x;\theta))-(1-y)ln(1-h_{\theta}(x;\theta)) J(hθ​(x(i);θ),y;θ)=−yln(hθ​(x;θ))−(1−y)ln(1−hθ​(x;θ))

其等价于:
J ( h θ ( x ( i ) ; θ ) , y ; θ ) = { − l n ( h θ ( x ; θ ) ) , i f y = 1 − l n ( 1 − h θ ( x ; θ ) ) , i f y = 0 J(h_{\theta}(x^{(i)};\theta),y;\theta)=\begin{cases} -ln(h_{\theta}(x;\theta)), &if\ \ y=1 \\[2ex] -ln(1-h_{\theta}(x;\theta)), &if \ \ y=0 \end{cases} J(hθ​(x(i);θ),y;θ)=⎩ ⎨ ⎧​−ln(hθ​(x;θ)),−ln(1−hθ​(x;θ)),​if  y=1if  y=0​

5.逻辑回归损失函数的求解

  现在我们推导出了逻辑回归的损失函数,而需要求解是模型的参数 θ \theta θ,即线性模型自变量的权重系数。 对于线性回归模型而言,可以使用最小二乘法,但对于逻辑回归而言使用传统最小二乘法求解是不合适的。
J ( θ ) = ∑ i = 1 n ( y ( i ) − 1 1 + e − θ T x ( i ) ) 2 J(\theta)=\sum\limits^n\limits_{i=1}\left(y^{(i)}-\frac{1}{1+e^{-\theta^Tx^{(i)}}}\right)^2 J(θ)=i=1∑n​(y(i)−1+e−θTx(i)1​)2
  对于不适合的解释原因有很多,但本质上不能使用经典最小二乘法的原因在于: l o g i s t i c logistic logistic回归模型的参数估计问题不能“方便地”定义“误差”或者“残差”。 因此,考虑使用迭代类算法优化,常见的就是梯度下降法。当然,还有其它方法比如,坐标轴下降法,牛顿法等。我们本篇介绍使用”梯度下降法“来对损失函数求解。

使用梯度下降法求解逻辑回归损失函数 梯度下降的迭代公式如下:
θ j = θ j + Δ j = θ j − η ∂ J ( θ ) ∂ θ j \begin{align} \theta_j & = \theta_j+\Delta_j \\[2ex] &= \theta_j - \eta\frac{\partial J(\theta)}{\partial\theta_j} \end{align} θj​​=θj​+Δj​=θj​−η∂θj​∂J(θ)​​​
问题变为如何求损失函数对参数 θ \theta θ的梯度。下面进行详细推导过程:
∂ J ( θ ) ∂ θ = − ∑ i = 1 n ( y ( i ) 1 h θ ( x ( i ) ; θ ) ∂ h θ ( x ( i ) ; θ ) ∂ θ + ( 1 − y ( i ) ) 1 1 − h θ ( x ( i ) ; θ ) ∂ ( 1 − h θ ( x ( i ) ; θ ) ) ∂ θ ) = − ∑ i = 1 n ( y ( i ) 1 h θ ( x ( i ) ; θ ) h θ ( x ( i ) ; θ ) [ 1 − h θ ( x ( i ) ; θ ) ] x ( i ) + ( 1 − y ( i ) ) 1 1 − h θ ( x ( i ) ; θ ) − [ 1 − h θ ( x ( i ) ; θ ) ] h θ ( x ( i ) ; θ ) x ( i ) ) = − ∑ i = 1 n ( y ( i ) [ 1 − h θ ( x ( i ) ; θ ) ] − ( 1 − y ( i ) ) h θ ( x ( i ) ; θ ) ) x ( i ) = ∑ i = 1 n ( h θ ( x ( i ) ; θ ) − y ( i ) ) x ( i ) \begin{align} \frac{\partial J(\theta)}{\partial \theta} &=-\sum\limits^n\limits_{i=1}\left(y^{(i)}\frac{1}{h_{\theta}(x^{(i)};\theta)}\frac{\partial h_{\theta}(x^{(i)};\theta)}{\partial \theta}+(1-y^{(i)})\frac{1}{1-h_{\theta}(x^{(i)};\theta)}\frac{\partial(1-h_{\theta}(x^{(i)};\theta))}{\partial \theta}\right)\\[4ex] &=-\sum\limits^n\limits_{i=1}\left(y^{(i)}\frac{1}{h_{\theta}(x^{(i)};\theta)} h_{\theta}(x^{(i)};\theta)[1-h_{\theta}(x^{(i)};\theta)]x^{(i)} +(1-y^{(i)})\frac{1}{1-h_{\theta}(x^{(i)};\theta)} -[1-h_{\theta}(x^{(i)};\theta)]h_{\theta}(x^{(i)};\theta)x^{(i)}\right)\\[4ex] &=-\sum\limits^n\limits_{i=1}\left( y^{(i)}[1-h_{\theta}(x^{(i)};\theta)]-(1-y^{(i)})h_{\theta}(x^{(i)};\theta) \right)x^{(i)} \\[4ex] &=\sum\limits^n\limits_{i=1}\left(h_{\theta}(x^{(i)};\theta)- y^{(i)}\right)x^{(i)} \end{align} ∂θ∂J(θ)​​=−i=1∑n​(y(i)hθ​(x(i);θ)1​∂θ∂hθ​(x(i);θ)​+(1−y(i))1−hθ​(x(i);θ)1​∂θ∂(1−hθ​(x(i);θ))​)=−i=1∑n​(y(i)hθ​(x(i);θ)1​hθ​(x(i);θ)[1−hθ​(x(i);θ)]x(i)+(1−y(i))1−hθ​(x(i);θ)1​−[1−hθ​(x(i);θ)]hθ​(x(i);θ)x(i))=−i=1∑n​(y(i)[1−hθ​(x(i);θ)]−(1−y(i))hθ​(x(i);θ))x(i)=i=1∑n​(hθ​(x(i);θ)−y(i))x(i)​​
最后将求得的梯度带入迭代公式中,即为:
θ j = θ j + Δ j = θ j − η ∂ J ( θ ) ∂ θ j = θ j − η ∑ i = 1 n ( h θ ( x ( i ) ; θ ) − y ( i ) ) x ( i ) \begin{align} \theta_j & = \theta_j+\Delta_j \\[2ex] &= \theta_j - \eta\frac{\partial J(\theta)}{\partial\theta_j} \\[2ex] &= \theta_j - \eta\sum\limits^n\limits_{i=1}\left(h_{\theta}(x^{(i)};\theta)- y^{(i)}\right)x^{(i)} \end{align} θj​​=θj​+Δj​=θj​−η∂θj​∂J(θ)​=θj​−ηi=1∑n​(hθ​(x(i);θ)−y(i))x(i)​​

注意:公式中, i i i 代表样本数, j j j 代表特征数。

6.逻辑回归的优缺点

6.1 优点

1)LR能以概率的形式输出结果,而非只是0,1判定。

2)LR的可解释性强,可控度高

3)训练快,feature engineering之后效果赞。

4)因为结果是概率,可以做ranking model。

6.2 缺点

1)容易欠拟合,一般准确度不太高

2)分类精度可能不高, 因为形式非常的简单,很难去拟合数据的真实分布。

7.逻辑回归的特征离散化

Q:LR模型为什么对特征进行离散化?

  • 非线性!非线性!非线性!逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合; 离散特征的增加和减少都很容易,易于模型的快速迭代;
  • 速度快!速度快!速度快!稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;
  • 鲁棒性!鲁棒性!鲁棒性!离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰;
  • 方便交叉与特征组合:离散化后可以进行特征交叉,由 M + N M+N M+N个变量变为 M ∗ N M*N M∗N个变量,进一步引入非线性,提升表达能力;
  • 稳定性:特征离散化后,模型会更稳定,比如如果对用户年龄离散化, 20 − 30 20-30 20−30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问;
  • 简化模型:特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。

8.总结

1)逻辑回归即为数据服从伯努利分布,通过极大似然函数的方法,运用梯度下降法求解参数,来达到二分类的目的。

2)逻辑回归是一个分类模型,解决分类问题(类别+概率),可以做ranking model。

本文仅作为个人学习记录使用, 不用于商业用途, 谢谢您的理解合作。

一文彻底搞懂逻辑回归模型相关推荐

  1. 逻辑回归——一文带你搞懂逻辑回归原理

    目录   1.逻辑回归的由来   2.逻辑回归模型建立过程中存在的两个问题     1)问题一:如何将等式左右连续化     2)问题二:使用sigmoid函数,将任意范围的值,映射为(0,1)    ...

  2. logit回归模型假设_一文让你搞懂Logistic回归模型

    注:本文是我和夏文俊同学共同撰写的 现考虑二值响应变量 ,比如是否购车,是否点击,是否患病等等,而 是相应的自变量或者称特征.现希望构建一个模型用于描述 和 的关系,并对 进行预测. 线性模型可以吗? ...

  3. 一文让你完全弄懂逻辑回归和分类问题实战《繁凡的深度学习笔记》第 3 章 分类问题与信息论基础(上)(DL笔记整理系列)

    好吧,只好拆分为上下两篇发布了>_< 终于肝出来了,今天就是除夕夜了,祝大家新快乐!^q^ <繁凡的深度学习笔记>第 3 章 分类问题与信息论基础 (上)(逻辑回归.Softm ...

  4. 逻辑回归模型(Logistic Regression, LR)基础 - 文赛平

     逻辑回归模型(Logistic Regression, LR)基础 - 文赛平 时间 2013-11-25 11:56:00 博客园精华区 原文  http://www.cnblogs.com/ ...

  5. 一文读懂逻辑回归(Logistic Regression)

    逻辑回归其实是是一种广义的线性回归,虽然说是回归函数,但是它其实是处理分类问题,我们从其背景,损失函数两方面说清楚. 背景 参考周志华教授的<机器学习>和吴恩达大神的深度学习中的讲解,逻辑 ...

  6. layer output 激活函数_一文彻底搞懂BP算法:原理推导+数据演示+项目实战(下篇)...

    在"一文彻底搞懂BP算法:原理推导+数据演示+项目实战(上篇)"中我们详细介绍了BP算法的原理和推导过程,并且用实际的数据进行了计算演练.在下篇中,我们将自己实现BP算法(不使用第 ...

  7. 大数据分析实战-信用卡欺诈检测(五)-逻辑回归模型

    大数据分析实战-信用卡欺诈检测(一) 大数据分析实战-信用卡欺诈检测(二)-下采样方案和交叉验证 大数据分析实战-信用卡欺诈检测(三)- 模型评估 大数据分析实战-信用卡欺诈检测(四)-正则化惩罚 逻 ...

  8. 逻辑回归模型算法研究与案例分析

    逻辑回归模型算法研究与案例分析 (白宁超 2018年9月6日15: 21:20) 导读:逻辑回归(Logistic regression)即逻辑模型,属于常见的一种分类算法.本文将从理论介绍开始,搞清 ...

  9. 一文彻底搞懂BP算法:原理推导+数据演示+项目实战(下篇)

    在"一文彻底搞懂BP算法:原理推导+数据演示+项目实战(上篇)"中我们详细介绍了BP算法的原理和推导过程,并且用实际的数据进行了计算演练.在下篇中,我们将自己实现BP算法(不使用第 ...

最新文章

  1. PCANet --- 用于图像分类的深度学习基准
  2. 公网ip判断_银行客户生产网和办公网知识共享网络部署方案
  3. 企业应用“数据优先”革命的下一个主战场:安全与运营
  4. JS中undefined和null的区别,以及出现原因
  5. sharepoint 2007页面显示真实的错误信息
  6. Postman从入门到入门
  7. python编程和继承_python面向对象编程-继承与派生
  8. java中map的使用和排序使用
  9. CAP以及分区容错性的含义
  10. Android编译tcpdump,android 5.0以上使用tcpdump
  11. 6种展示代码的绝佳方式
  12. 【求助】想知道Xcode怎么像devc一样调试程序
  13. c# winform 浏览器调用chrome内核
  14. 相关系数的比较与假设检验
  15. 三菱plc pwm指令_【三菱PLC指令教程】定时器指令应用之时序图编程法(一)
  16. Win7 SP1 安装 .NET Framework 4.6.2,提示“时间戳签名和或证书无法验证或已损坏”
  17. 微信小程序开发者代码管理中,不想要的项目怎么删除
  18. C语言数据结构——队列
  19. 【Tool】资料搜索:百度网盘资料检索
  20. Python爬虫爬取纵横中文网小说

热门文章

  1. AI算法之NaiveBayes(基于贝努利模型)
  2. 如何关闭Apple Watch 上的激活锁?
  3. 考研英语词汇文章3-Salt
  4. 一加5t升级 android p,第三方速度够快,一加1、一加5和一加5T火速升级AndroidP
  5. uniapp阿里矢量图多色图标的使用方法(超级无敌巨无霸详细)
  6. mail命令发送html格式的电子邮件
  7. C++音频单声道、双声道之间的转换
  8. CSS 预处理器语言Less
  9. 承德算命大师解读命与运的奥秘,承德算命大师预测指导
  10. Java source1.5不支持diamond运算符