回归分析之逻辑回归-Logistic Regression

转载请注明出处:http://blog.csdn.net/gamer_gyt
博主微博:http://weibo.com/234654758
Github:https://github.com/thinkgamer
公众号:数据与算法联盟

个人网站:http://thinkgamer.github.io


回归分析之理论篇
回归分析之线性回归(N元线性回归)
回归分析之Sklearn实现电力预测

逻辑回归与线性回归本质上是一样的,都是通过误差函数求解得到最优的系数,在形式上只不过是在线性回归上套了一个逻辑函数。线性回归的相关知识可以参考上边的给出链接文章,与线性回归相比,逻辑回归(Logistic Regression)更适用于因变量为二分变量的模型,Logistic 回归系数可用于估计模型中每个自变量的几率比。

Sigmoid函数

数学表达式和图形

这里选用Sigmoid函数(海维赛德阶跃函数)作为LR的模型函数,是因为在二分类情况下输出为0和1,其函数的数学表达式为:
f ( x ) = 1 1 + e − x f(x)=\frac{1}{1+e^{-x}} f(x)=1+ex1
其图形为:

import math
import matplotlib.pyplot as plt

def sigmoid(x):
  return 1 / (1 + math.exp(-x))

# python2 中range生成的是一个数组,py3中生成的是一个迭代器,可以使用list进行转换
X = list(range(-9,10))
Y = list(map(sigmoid,X))

#画图
plt.plot(X,Y)
plt.show()

![sigmoid](https://imgconvert.csdnimg.cn/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcxMjE5MTkyMzI5MzI4?x-oss-process=image/format,png)

从上图可以看到sigmoid函数是一个s形的曲线,它的取值在[0, 1]之间,在远离0的地方函数的值会很快接近0/1。

LR为什么要使用Sigmoid

首先Sigmoid函数满足LR模型的需要,在自变量小于0时,因变量小于0.5,自变量大于0时,因变量大于0.5。
以下一段引用 Logistic Regression 模型简介 的介绍对逻辑回归是一种概率模型做了阐述。

逻辑回归是一种判别模型,表现为直接对条件概率P(y|x)建模,而不关心背后的数据分布P(x,y)。而高斯贝叶斯模型(Gaussian Naive Bayes)是一种生成模型,先对数据的联合分布建模,再通过贝叶斯公式来计算样本属于各个类别的后验概率,即:
p ( y ∣ x ) = P ( x ∣ y ) P ( y ) ∑ P ( x ∣ y ) P ( y ) p(y|x) = \frac{P(x|y)P(y)}{\sum{P(x|y)P(y)}} p(yx)=P(xy)P(y)P(xy)P(y)
通常假设P(x|y)是高斯分布,P(y)是多项式分布,相应的参数都可以通过最大似然估计得到。如果我们考虑二分类问题,通过简单的变化可以得到:
log ⁡ P ( y = 1 ∣ x ) P ( y = 0 ∣ x ) = log ⁡ P ( x ∣ y = 1 ) P ( x ∣ y = 0 ) + log ⁡ P ( y = 1 ) P ( y = 0 )   = − ( x − μ 1 ) 2 2 σ 1 2 + ( x − μ 0 ) 2 2 σ 0 2   + θ 0 \log\frac{P(y=1|x)}{P(y=0|x)} = \log\frac{P(x|y=1)}{P(x|y=0)} + \log\frac{P(y=1)}{P(y=0)} \ = -\frac{(x-\mu_1)^2}{2\sigma_1^2} + \frac{(x-\mu_0)^2}{2\sigma_0^2}\ + \theta_0 logP(y=0x)P(y=1x)=logP(xy=0)P(xy=1)+logP(y=0)P(y=1) =2σ12(xμ1)2+2σ02(xμ0)2 +θ0
如果 σ1=σ0,二次项会抵消,我们得到一个简单的线性关系:
log ⁡ P ( y = 1 ∣ x ) P ( y = 0 ∣ x ) = θ T x \log\frac{P(y=1|x)}{P(y=0|x)} = \theta^T x logP(y=0x)P(y=1x)=θTx
由上式进一步可以得到:
P ( y = 1 ∣ x ) = e θ T x 1 + e θ T x = 1 1 + e − θ T x P(y=1|x) = \frac{e^{\theta^T x}}{1+e^{\theta^T x}} = \frac{1}{1+e^{-\theta^T x}} P(y=1x)=1+eθTxeθTx=1+eθTx1
可以看到,这个概率和逻辑回归中的形式是一样的。这种情况下GNB 和 LR 会学习到同一个模型。实际上,在更一般的假设(P(x|y)的分布属于指数分布族)下,我们都可以得到类似的结论。

至于逻辑回归为什么采用Sigmoid函数作为激活函数,因为LR是在伯努利分布和广义线性模型的假设下推导而来的,伯努利分布是属于指数分布簇的。

具体的推导可以参考 机器学习算法之:指数族分布与广义线性模型 的介绍

Logistic Regression 分类器

即决策函数。
一个机器学习的模型,实际上是把决策函数限定在某一组条件下,这组限定条件就决定了模型的假设空间。当然,我们还希望这组限定条件简单而合理。而逻辑回归模型所做的假设是:
P ( y = 1 ∣ x ; θ ) = g ( θ T x ) = 1 1 + e − θ T ∗ x P(y=1|x;\theta) = g(\theta^T x) = \frac{1}{1 + e ^ {-\theta^T * x}} P(y=1x;θ)=g(θTx)=1+eθTx1
这里的 g(h)是上边提到的 sigmoid 函数 θ \theta θ 表示的是一组参数,$\theta^T 表 示 参 数 的 转 置 矩 阵 , 表示参数的转置矩阵, \theta^T x 其 实 表 示 的 就 是 其实表示的就是 \theta_{0}x_{0} + \theta_{1}x_{1} + \theta_{2} x_{2}…$,相应的决策函数为:
y ∗ = 1 ,   if   P ( y = 1 ∣ x ) > 0.5 y^* = 1, \, \textrm{if} \, P(y=1|x) > 0.5 y=1,ifP(y=1x)>0.5
选择0.5作为阈值是一个一般的做法,实际应用时特定的情况可以选择不同阈值,如果对正例的判别准确性要求高,可以选择阈值大一些,对正例的召回要求高,则可以选择阈值小一些。

参数求解

确定好决策函数之后就是求解参数了。

模型的数学形式确定后,剩下就是如何去求解模型中的参数。统计学中常用的一种方法是最大似然估计,即找到一组参数,使得在这组参数下,我们的数据的似然度(概率)越大。在逻辑回归模型中,似然度可表示为:
L ( θ ) = P ( D ∣ θ ) = ∏ P ( y ∣ x ; θ ) = ∏ g ( θ T x ) y ( 1 − g ( θ T x ) ) 1 − y L(\theta) = P(D|\theta) = \prod P(y|x;\theta) = \prod g(\theta^T x) ^ y (1-g(\theta^T x))^{1-y} L(θ)=P(Dθ)=P(yx;θ)=g(θTx)y(1g(θTx))1y
取对数可以得到对数似然度:
l ( θ ) = ∑ y log ⁡ g ( θ T x ) + ( 1 − y ) log ⁡ ( 1 − g ( θ T x ) ) l(\theta) = \sum {y\log{g(\theta^T x)} + (1-y)\log{(1-g(\theta^T x))}} l(θ)=ylogg(θTx)+(1y)log(1g(θTx))
另一方面,在机器学习领域,我们更经常遇到的是损失函数的概念,其衡量的是模型预测错误的程度。常用的损失函数有0-1损失,log损失,hinge损失等。其中log损失在单个数据点上的定义为
− y log ⁡ p ( y ∣ x ) − ( 1 − y ) log ⁡ 1 − p ( y ∣ x ) -y\log{p(y|x)}-(1-y)\log{1-p(y|x)} ylogp(yx)(1y)log1p(yx)
如果取整个数据集上的平均log损失,我们可以得到
J ( θ ) = − 1 N l ( θ ) J(\theta) = -\frac{1}{N} l(\theta) J(θ)=N1l(θ)
即在逻辑回归模型中,我们最大化似然函数和最小化log损失函数实际上是等价的。对于该优化问题,存在多种求解方法,这里以梯度下降的为例说明。梯度下降(Gradient Descent)又叫作最速梯度下降,是一种迭代求解的方法,通过在每一步选取使目标函数变化最快的一个方向调整参数的值来逼近最优值。基本步骤如下:

  • 选择下降方向(梯度方向, ∇ J ( θ ) \nabla {J(\theta)} J(θ)
  • 选择步长,更新参数 θ i = θ i − 1 − α i ∇ J ( θ i − 1 ) \theta^i = \theta^{i-1} - \alpha^i \nabla {J(\theta^{i-1})} θi=θi1αiJ(θi1)
  • 重复以上两步直到满足终止条件
    在这里插入图片描述

其中损失函数的梯度计算方法为:
∂ J ∂ θ = − 1 n ∑ i ( y i − y i ∗ ) x i + λ θ \frac{\partial{J}}{\partial{\theta}} = -\frac{1}{n}\sum_i (y_i - y_i^*)x_i + \lambda \theta θJ=n1i(yiyi)xi+λθ
沿梯度负方向选择一个较小的步长可以保证损失函数是减小的,另一方面,逻辑回归的损失函数是凸函数(加入正则项后是严格凸函数),可以保证我们找到的局部最优值同时是全局最优。此外,常用的凸优化的方法都可以用于求解该问题。例如共轭梯度下降,牛顿法,LBFGS等。

分类边界

知道如何求解参数后,我们来看一下模型得到的最后结果是什么样的。很容易可以从sigmoid函数看出,当 θ T x > 0 \theta^T x > 0 θTx>0 时,y=1,否则 y=0。 θ T x = 0 \theta^T x = 0 θTx=0 是模型隐含的分类平面(在高维空间中,我们说是超平面)。所以说逻辑回归本质上是一个线性模型,但是,这不意味着只有线性可分的数据能通过LR求解,实际上,我们可以通过特征变换的方式把低维空间转换到高维空间,而在低维空间不可分的数据,到高维空间中线性可分的几率会高一些。下面两个图的对比说明了线性分类曲线和非线性分类曲线(通过特征映射)。
在这里插入图片描述
在这里插入图片描述

左图是一个线性可分的数据集,右图在原始空间中线性不可分,但是在特征转换 [ x 1 , x 2 ] = > [ x 1 , x 2 , x 1 2 , x 2 2 , x 1 x 2 ] [x_1, x_2] => [x_1, x_2, x_1^2, x_2^2, x_1x_2] [x1,x2]=>[x1,x2,x12,x22,x1x2] 后的空间是线性可分的,对应的原始空间中分类边界为一条类椭圆曲线。

总结

逻辑回归的数学模型和求解都相对比较简洁,实现相对简单。通过对特征做离散化和其他映射,逻辑回归也可以处理非线性问题,是一个非常强大的分类器。因此在实际应用中,当我们能够拿到许多低层次的特征时,可以考虑使用逻辑回归来解决我们的问题。


资料参考

http://blog.csdn.net/han_xiaoyang/article/details/49123419

https://www.cnblogs.com/sxron/p/5489214.html

https://tech.meituan.com/intro_to_logistic_regression.html


【技术服务】,详情点击查看: https://mp.weixin.qq.com/s/PtX9ukKRBmazAWARprGIAg

扫一扫 关注微信公众号!号主 专注于搜索和推荐系统,尝试使用算法去更好的服务于用户,包括但不局限于机器学习,深度学习,强化学习,自然语言理解,知识图谱,还不定时分享技术,资料,思考等文章!


Thinkgamer_ CSDN认证博客专家 图书作者 推荐系统研究者
Thinkgamer,著有《推荐系统开发实战》,「搜索与推荐Wiki」公众号独立作者,愿景是持续输出精品系列内容,让知识能够平等的到达每一个人。从事推荐系统相关工作多年!
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页