logistic回归模型

  • 前言
  • logistic回归模型
    • logit变换
    • 几率
    • logistic模型
    • 二项逻辑回归模型
    • 损失函数
  • logistic回归模型的应用
  • logistic回归模型的评价

前言

从这一期开始,我们准备介绍一系列机器学习算法模型,主要包括logistic回归,决策树,随机森林,关联规则,朴素贝叶斯,支持向量机,隐式马尔可夫,因子分析,主成分分析,聚类,多元线性回归,时间序列,协同过滤,XGBoost,LightGBM,神经网络等,一般会涵盖模型的引入背景,背后数学原理,模型的应用范围,模型优缺点及改进建议,具体工程实践。既适合刚入门机器学习的新手,也适合有一定基础的读者想要进一步掌握模型的核心要义,其中不免会涵盖许多数学符号和公式以及推导过程,如果你觉得晦涩难懂,可以来微信公众号“三行科创”交流群和大家一起讨论。

logistic回归模型

逻辑回归(Logistic Regression)是机器学习中最常见的一种用于二分类的算法模型,由于其数学原理简单易懂,作用高效,其实际应用非常广泛。虽然带回归二字,实则是分类模型,下面从logit变换开始。

logit变换

我们在研究某一结果yyy与一系列因素(x1,x2,⋯,xn)(x_1,x_2,\cdots,x_n)(x1​,x2​,⋯,xn​)之间的关系的时候,最直白的想法是建立因变量和自变量的多元线性关系

y=θ0+θ1x1+θ2x2+⋯+θnxny=\theta_0+\theta_1x_1+\theta_2x_2+\cdots +\theta_nx_ny=θ0​+θ1​x1​+θ2​x2​+⋯+θn​xn​

其中 (θ0,θ1,θ2,⋯,θn)(\theta_0,\theta_1,\theta_2,\cdots,\theta_n)(θ0​,θ1​,θ2​,⋯,θn​) 为模型的参数,如果因变量是数值型的话,可以解释成某某因素xix_ixi​变化了多少导致结果 yyy 发生了多少变化,如果因变量 yyy 是用来刻画结果是否(0-1)发生?或者更一般的来刻画某特定结果发生的概率(0~1)呢?这时候因素 xix_ixi​ 变化导致结果 yyy 的变化恐怕微乎其微,有时候甚至忽略不计。然而实际生活中,我们知道某些关键因素会直接导致某一结果的发生,如亚马逊雨林一只蝴蝶偶尔振动翅膀,就会引起两周后美国德克萨斯州的一场龙卷风。于是,我们需要让不显著的线性关系变得显著,使得模型能够很好解释随因素的变化,结果也会发生较显著的变化,这时候,人们想到了logit变换,下图是对数函数图像

从对数函数的图像来看,其在(0,1)(0,1)(0,1)之间的因变量的变化是很迅速的,也就是说自变量的微小变化会导致因变量的巨大变化,这就符合了之前想要的效果。于是,对因变量进行对数变换,右边依然保持线性关系,有下面式子

log(y)=θ0+θ1x1+θ2x2+⋯+θnxnlog(y)=\theta_0+\theta_1x_1+\theta_2x_2+\cdots +\theta_nx_nlog(y)=θ0​+θ1​x1​+θ2​x2​+⋯+θn​xn​

虽然上式解决了因变量随自变量变化的敏感性问题,同时也约束了yyy的取值范围为(0,+∞)(0,+\infty)(0,+∞)。我们知道概率是用来描述某件事发生的可能性,一件事情发生与否,更应该是调和对称的,也就是说该事件发生与不发生有对立性,结果可以走向必然发生(概率为1),也可以走向必然不发生(概率为0),概率的取值范围为(0,1)(0,1)(0,1),而等式左边 yyy 的取值范围是(0,+∞)(0,+\infty)(0,+∞),所以需要进一步压缩,又引进了几率。

几率

几率(odd)是指事件发生的概率与不发生的概率之比,假设事件 A 发生的概率为 ppp,不发生的概率为 1−p1-p1−p,那么事件 A 的几率为

odd(A)=p1−podd(A)=\frac{p}{1-p}odd(A)=1−pp​

几率恰好反应了某一事件两个对立面,具有很好的对称性,下面我们再来看一下概率和几率的关系

首先,我们看到概率从0.01不断增大到 0.99,几率也从0.01随之不断变大到99,两者具有很好的正相关系,我们再对 ppp 向两端取极限有

lim⁡p→0+(p1−p)=0\lim\limits _ {p \to 0^+}(\frac{p}{1-p})=0p→0+lim​(1−pp​)=0

lim⁡p→1−(p1−p)=+∞\lim\limits _ {p \to 1^-}(\frac{p}{1-p})=+\inftyp→1−lim​(1−pp​)=+∞

于是,几率的取值范围就在(0,+∞)(0,+\infty)(0,+∞),这符合我们之前的因变量取值范围的假设。

logistic模型

正因为概率和几率有如此密切对等关系,于是想能不能用几率来代替概率刻画结果发生的可能性大小,这样既能满足结果对特定因素的敏感性,又能满足对称性 ,便有了下面式子

log(p1−p)=θ0+θ1x1+θ2x2+⋯+θnxnlog(\frac{p}{1-p}) =\theta_0+ \theta_1x_1+\theta_2x_2+\cdots +\theta_nx_nlog(1−pp​)=θ0​+θ1​x1​+θ2​x2​+⋯+θn​xn​

现在,我们稍微改一改,让等式左边对数变成自然对数 ln=logeln=log_eln=loge​,等式右边改成向量乘积形式,便有

ln(p1−p)=θXln(\frac{p}{1-p})=\theta Xln(1−pp​)=θX

其中 θ=(θ0,θ1,θ2,⋯,θn)\theta=(\theta_0,\theta_1,\theta_2,\cdots,\theta_n)θ=(θ0​,θ1​,θ2​,⋯,θn​),X=(1,x1,x2,⋯,xn)TX=(1,x_1,x_2,\cdots,x_n)^TX=(1,x1​,x2​,⋯,xn​)T,我们解得

p=eθX1+eθXp=\frac{e^{\theta X}} {1+ e^{\theta X}}p=1+eθXeθX​

其中 eee 是自然常数,保留5位小数是2.71828。这就是我们常见的logistic模型表达式,作出其函数图像如下

我们看到logistic函数图像是一条S型曲线,又名sigmoid曲线,以 (0,0.5)(0,0.5)(0,0.5) 为对称中心,随着自变量 xxx 不断增大,其函数值不断增大接近1,随自变量 xxx 不断减小,其函数值不断降低接近0,函数的取值范围在 (0,1)(0,1)(0,1) 之间,且函数曲线在中心位置变化速度最快,在两端的变化速率较慢。

从上面的操作,我们可以看到逻辑回归模型从最初的线性回归模型基础上对因变量进行 logit 变换,使得因变量对自变量显著,同时约束因变量取值范围为0到正无穷大,然后用概率表示几率,最后求出概率关于自变量的表达式,把线性回归的结果压缩在 (0,1)(0,1)(0,1) 范围内,这样最后计算出的结果是一个0到1之间的概率值,表示某事件发生的可能性大小,可以做概率建模,这也是为什么逻辑回归叫逻辑回归,而不叫逻辑分类了。

二项逻辑回归模型

既然logistic回归把结果压缩到连续的区间 (0,1)(0,1)(0,1),而不是离散的 0 或者1,然后我们可以取定一个阈值,通常以0.5为阈值,通过对比概率值与阈值的大小关系而定,如果计算出来的概率大于0.5,则将结果归为一类 (1),如果计算出来的概率小于0.5,则将结果归为另一类 (0),用分段函数写出来便是

y={1p > 0.50p < 0.5y= \begin{cases} 1&\text{p > 0.5} \\ 0 & \text{p < 0.5} \end{cases} y={10​p > 0.5p < 0.5​

这样逻辑回归就可以用来进行2分类了,在本文中,不特别指出,均指二项逻辑回归,假设数据结构如下

样本 x1x_1x1​ x2x_2x2​ xnx_nxn​ yyy
1 x11x_{11}x11​ x12x_{12}x12​ x1nx_{1n}x1n​ y1y_1y1​
2 x21x_{21}x21​ x22x_{22}x22​ x2nx_{2n}x2n​ y2y_2y2​
⋮\vdots⋮ ⋮\vdots⋮ ⋮\vdots⋮ ⋮\vdots⋮ ⋮\vdots⋮
m xm1x_{m1}xm1​ xm2x_{m2}xm2​ xmnx_{mn}xmn​ ymy_mym​

其中 mmm表示样本个数,nnn表示影响因数的个数,yi(i=0,1,⋯,m)y_i(i=0,1,\cdots,m)yi​(i=0,1,⋯,m) 取 0 或者 1。现在我们结合数据,利用条件概率分布模型给出基于概率的二项logistic模型如下

p(y=1∣X;θ)=eθX1+eθXp(y=1|X;\theta)=\frac{e^{\theta X}}{1+e^{\theta X}}p(y=1∣X;θ)=1+eθXeθX​

p(y=0∣X;θ)=11+eθXp(y=0|X;\theta)=\frac{1}{1+e^{\theta X}}p(y=0∣X;θ)=1+eθX1​

其中,XXX 表示自变量,yyy 表示因变量所属的类别,θ\thetaθ 为模型待求的参数,模型解释为在特定的因素下,模型结果取1的概率和取0的概率。模型建好了,接下来就需要进行机器训练,而怎么来给训练一种恰当反馈呢?答案是损失函数,通过损失函数来评估模型学习的好坏和改进机制。

损失函数

由前面阈值的取定原则,我们知道相当于我们用一个类别值代替概率值,而类别值是sigmoid 函数的两个最值,概率不可能时时刻刻都取到最值,这势必会造成误差,我们把这种误差称为损失,为了给出损失函数表达式,我们假设模型第 iii 个样本所求的概率值为 pip_ipi​,而真实类别值可能是 0 或者 1。

当类别真实值是 1 的情况下,所求的概率值 pip_ipi​ 越小,越接近0,被划为类别 0 的可能性越大,被划为类别 1 的可能性越小,导致的损失越大。反之,所求的概率值 pip_ipi​ 越大,越接近1,被划为类别 1 的可能性越大,被划为类别 0 的可能性越小,导致的损失越小。我们用下面的函数来描述这种变化关系
−logpi-log p_i−logpi​
其中 pi∈(0,1)p_i\in(0,1)pi​∈(0,1) ,其图像大致如下

当类别真实值是0的情况下,所求的概率值 pip_ipi​ 越大,越接近1,其结果的类别判定更偏向于1,导致的损失越大。反之,所求的概率值 pip_ipi​ 越小,越接近0,其结果的类别判断更偏向于 0,导致的损失越小。我们用下面的函数来描述这种变化关系

−log(1−pi)-log(1-p_i)−log(1−pi​)


现在就要把两种情况结合起来,就不需要分真实值是 1 还是 0 两种情况讨论,求出其期望值,做成一个交叉熵(cross entropy)的整体损失函数如下

costi=−yilog(pi)−(1−yi)log(1−pi)cost_i = -y_ilog(p_i)-(1-y_i)log(1-p_i)costi​=−yi​log(pi​)−(1−yi​)log(1−pi​)

其中 yiy_iyi​ 表示第 iii 个样本的真实值,pip_ipi​ 是根据模型计算出来的概率值,当yi=1y_i=1yi​=1 时,costi=−log(pi)cost_i= -log(p_i)costi​=−log(pi​),当yi=0y_i=0yi​=0时,costi=−log(1−pi)cost_i = -log(1-p_i)costi​=−log(1−pi​),这符合前面两种情况。

假设现在有 mmm 个样本,总体的损失函数为

Cost=∑i=1mcosti=∑i=1m[−yilog(pi)−(1−yi)log(1−pi)]\begin{aligned} Cost &= \sum\limits_{i=1}^m cost_i \\ &=\sum\limits_{i=1}^m[-y_ilog(p_i)-(1-y_i)log(1-p_i)]\\ \end{aligned} Cost​=i=1∑m​costi​=i=1∑m​[−yi​log(pi​)−(1−yi​)log(1−pi​)]​

代入 pi=eθX1+eθXp_i=\frac{e^{\theta X}}{1+e^{\theta X}}pi​=1+eθXeθX​ 得

Cost=∑i=1m[−yilog(eθX1+eθX)−(1−yi)log(1−eθX1+eθX)]\begin{aligned} Cost &=\sum\limits_{i=1}^m[-y_ilog(\frac{e^{\theta X}}{1+e^{\theta X}})-(1-y_i)log(1-\frac{e^{\theta X}}{1+e^{\theta X}})] \end{aligned} Cost​=i=1∑m​[−yi​log(1+eθXeθX​)−(1−yi​)log(1−1+eθXeθX​)]​
上式就是二项逻辑回归的损失函数,是一个关于参数 θ\thetaθ 和 XXX的二元函数,也叫对数似然函数,现在问题转化为以对数似然函数为目标函数的最优化问题,其中 θ\thetaθ 为模型待求的参数,为了求参数 θ\thetaθ ,可以对目标函数求偏导数,记

L(X∣θ)=∑i=1m[−ylog(eθX1+eθX)−(1−y)log(1−eθX1+eθX)]\mathcal{L}(X|\theta)=\sum\limits_{i=1}^m[-ylog(\frac{e^{\theta X}}{1+e^{\theta X}})-(1-y)log(1-\frac{e^{\theta X}}{1+e^{\theta X}})]L(X∣θ)=i=1∑m​[−ylog(1+eθXeθX​)−(1−y)log(1−1+eθXeθX​)]

对 L(X∣θ)\mathcal{L} (X|\theta)L(X∣θ) 求关于 θ\thetaθ 的偏导,主要是里面对数函数关于 θ\thetaθ 的偏导数求解
∂L(X∣θ)∂θ=∂{∑i=1m[−yilog(eθX1+eθX)−(1−yi)log(1−eθX1+eθX)]}∂θ=∑i=1m[(−yi)∂log(eθX1+eθX)∂θ−(1−yi)∂log(1−eθX1+eθX)∂θ]=∑i=1m[(−yi)cX1+eθX−(1−yi)(−cXeθX1+eθX)]\begin{aligned} &\frac{\partial \mathcal{L}(X|\theta)}{ \partial \theta} \\&=\frac{ \partial \{\sum\limits_{i=1}^m[-y_ilog(\frac{e^{\theta X}}{1+e^{\theta X}})-(1-y_i)log(1-\frac{e^{\theta X}}{1+e^{\theta X}})]\}}{\partial \theta}\\ &= \sum\limits_{i=1}^m[(-y_i)\frac{\partial log(\frac{e^{\theta X}}{1+e^{\theta X}})}{\partial \theta}-(1-y_i)\frac{\partial log(1-\frac{e^{\theta X}}{1+e^{\theta X}})}{\partial \theta}]\\ &= \sum\limits_{i=1}^m [ (-y_i)\frac{cX}{1+e^{\theta X}}-(1-y_i)(-\frac{cXe^{\theta X}}{1+e^{\theta X}})] \end{aligned} ​∂θ∂L(X∣θ)​=∂θ∂{i=1∑m​[−yi​log(1+eθXeθX​)−(1−yi​)log(1−1+eθXeθX​)]}​=i=1∑m​[(−yi​)∂θ∂log(1+eθXeθX​)​−(1−yi​)∂θ∂log(1−1+eθXeθX​)​]=i=1∑m​[(−yi​)1+eθXcX​−(1−yi​)(−1+eθXcXeθX​)]​
其中 c=lnac=ln ac=lna,aaa 为对数底数,令 ∂L((X∣θ)∂θ=0\frac{\partial \mathcal{L}((X|\theta)}{ \partial \theta}=0∂θ∂L((X∣θ)​=0,求出 θ\thetaθ 值,然后带入模型便是学到的logistic模型,假设 θ^\hat{\theta}θ^ 是上式子所求的值,那么原二项logistic模型方程为

p(y=1∣X,θ^)=eθ^X1+eθ^Xp(y=1|X,\hat{\theta})=\frac{e^{\hat{\theta} X}}{1+e^{\hat{\theta} X}}p(y=1∣X,θ^)=1+eθ^Xeθ^X​

p(y=0∣X,θ^)=11+eθ^Xp(y=0|X,\hat{\theta})=\frac{1}{1+e^{\hat{\theta} X}}p(y=0∣X,θ^)=1+eθ^X1​

logistic回归模型的应用

既然logistic回归主要用来二分类,那么凡是涉及到二分类的场景都有logistic回归的用武之地,同时,我们还可以用logistic回归模型预测某件事情的发生概率,我们常见的logistic回归模型的应用场景有
(1) 在P2P,汽车金融等领域,根据申请人的提供的资料,预测其违约的可能性大小,进而决定是否给其贷款。
(2) 电商平台根据用于购买记录预测用户下一次是否会购买某件商品。
(3) 天涯,bbs,微博,豆瓣短评等舆论平台做情感分类器。如根据某网友对某些特定主题的历史评论数据,预测其下次对某类型的主题是否会给出正面的评论。
(4) 在医疗领域,根据病人症状,预测其肿瘤是良性的还是恶性的。
(5) 根据CT,流行病学,旅行史,检测试剂结果等特点预测某位疑似病人是否真感染新型冠状病毒。
(6) 在精准营销领域,预测某个产品的收益。

logistic回归模型的评价

从logistic回归的数学原理,在阈值取定的时候一刀切的做法上面,我们能够根据logistic回归的这些特点给出模型优缺点评价

优点:

  • 原理简单,模型清晰,操作高效,背后的概率的推导过程经得住推敲,在研究中,通常以 Logistic 回归模型作为基准,再尝试使用更复杂的算法,可以在大数据场景中使用。
  • 使用online learning的方式更新轻松更新参数,不需要重新训练整个模型
  • 基于概率建模,输出值落在0到1之间,并且有概率意义
  • 求出来的参数 θi\theta_iθi​ 代表每个特征对输出的影响,可解释性强
  • 解决过拟合的方法很多,如L1、L2正则化,L2正则化就可以解决多重共线性问题

缺点:

  • 对数据依赖性强,很多时候需要做特征工程,且主要用来解决线性可分问题
  • 因为它本质上是一个线性的分类器,所以处理不好特征之间相关的情况,对模型中自变量多重共线性较为敏感,例如两个高度相关自变量同时放入模型,可能导致较弱的一个自变量回归符号不符合预期,符号被扭转,正好变负号。
  • logit变换过程是非线性的,在两端随着变化率微乎其微,而中间的变化很大,很敏感。 导致很多区间的变量变化对目标概率的影响没有区分度,很难确定阀值。
  • 当特征空间很大时,性能不好
  • 容易欠拟合,精度不高

下一期,我们将用一个实例来一睹logistic魅力。

参考文献

1,对数函数
2,python绘制对数函数
3,如何理解logistic函数
4,logit究竟是个啥?
5,逻辑回归
6,从原理到代码,轻松深入逻辑回归
7,https://www.zybuluo.com/frank-shaw/note/143260

logistic回归模型相关推荐

  1. R语言构建logistic回归模型:构建模型公式、拟合logistic回归模型、模型评估,通过混淆矩阵计算precision、enrichment、recall指标

    R语言构建logistic回归模型:构建模型公式.拟合logistic回归模型.模型评估,通过混淆矩阵计算precision.enrichment.recall指标 目录

  2. R语言glm拟合logistic回归模型实战:基于glm构建逻辑回归模型及模型系数统计显著性分析、每个预测因子对响应变量的贡献

    R语言glm拟合logistic回归模型实战:基于glm构建逻辑回归模型及模型系数统计显著性分析.每个预测因子对响应变量的贡献 目录

  3. R语言glm拟合logistic回归模型:模型评估(模型预测概率的分组密度图、混淆矩阵、准确率、精确度、召回率、ROC、AUC)、PRTPlot函数获取logistic模型最优阈值(改变阈值以优化)

    R语言glm拟合logistic回归模型:模型评估(模型预测概率的分组密度图.混淆矩阵.Accuray.Precision.Recall.ROC.AUC).PRTPlot函数可视化获取logistic ...

  4. R语言构建logistic回归模型:WVPlots包PRTPlot函数可视化获取logistic回归模型的最优阈值、优化(precision、enrichment)和recall之间的折衷

    R语言构建logistic回归模型:WVPlots包PRTPlot函数可视化获取logistic回归模型的最佳阈值(改变阈值以优化精确度(precision.enrichment)和查全率(recal ...

  5. R语言glm拟合logistic回归模型:模型评估(计算模型拟合的统计显著性)、模型评估(赤信息AIC指标计算)

    R语言glm拟合logistic回归模型:模型评估(计算模型拟合的统计显著性).模型评估(赤信息AIC指标计算) 目录

  6. R语言构建logistic回归模型并评估模型:模型预测结果抽样、可视化模型分类预测的概率分布情况、使用WVPlots包绘制ROC曲线并计算AUC值

    R语言构建logistic回归模型并评估模型:模型预测结果抽样.可视化模型分类预测的概率分布情况.使用WVPlots包绘制ROC曲线并计算AUC值 目录

  7. R语言构建logistic回归模型并评估模型:构建基于混淆矩阵计算分类评估指标的自定义函数、阳性样本比例(垃圾邮件比例)变化对应的分类器性能的变化、基于数据阳性样本比例选择合适的分类评估指标

    R语言构建logistic回归模型并评估模型:构建基于混淆矩阵计算分类评估指标的自定义函数.阳性样本比例(垃圾邮件比例)变化对应的分类器性能的变化.基于数据阳性样本比例选择合适的分类评估指标 目录

  8. R语言构建logistic回归模型并评估模型:计算混淆矩阵、并基于混淆矩阵计算Accuray、Precision、Recall(sensitivity)、F1、Specificity指标

    R语言构建logistic回归模型并评估模型:计算混淆矩阵.并基于混淆矩阵计算Accuray.Precision.Recall(sensitivity).F1.Specificity指标 目录

  9. R语言限制性立方样条(RCS, Restricted cubic spline)分析:基于logistic回归模型、南非心脏病数据集(South African Heart Disease)

    R语言限制性立方样条(RCS, Restricted cubic spline)分析:基于logistic回归模型.南非心脏病数据集(South African Heart Disease) 目录

  10. R语言计算F1评估指标实战:F1 score、使用R中caret包中的confusionMatrix()函数为给定的logistic回归模型计算F1得分(和其他指标)

    R语言计算F1评估指标实战:F1 score.使用R中caret包中的confusionMatrix()函数为给定的logistic回归模型计算F1得分(和其他指标) 目录

最新文章

  1. 【原创】关于代码质量的打油诗
  2. AAC规格分类和下载地址
  3. 【UVA624 01背包中的路径问题】
  4. cmd上写的java简单代码_用cmd编辑一个超级简单的小游戏,求代码
  5. 使用Docker容器和Java EE进行持续交付
  6. cmd255command.executereader()打印连接错误_打印经常遇到的几个问题,轻松解决
  7. ArcEngine 9.3.1与64位操作系统 80040154
  8. python获取系统参数_python 常用系统参数
  9. 只做macd二次金叉_MACD指标的各种金叉、二次金叉都是买入信号吗?本文会给你答案...
  10. Oracle体系结构一
  11. 深度学习实践指南(六)—— ReLU(前向和后向过程)
  12. java构造一个水果类_Java基础入门之Object类、匿名内部类、构造方法的继承解析...
  13. python标准库time_python标准库介绍——12 time 模块详解
  14. linux下wps的字体缺失解决方法
  15. linux键盘映射默认,Linux 中的键盘映射
  16. 二级Visual Basic语言视频教程
  17. 好程序员web前端分享如何构建单页Web应用
  18. 计算机基础知识在哪里学,学习电脑基础知识先从哪方面入手?
  19. PTA L1-049 天梯赛座位分配(20分)(python)
  20. 使用html5 canvas绘制简单图形小作品~灰太狼

热门文章

  1. SSDP协议内容解析
  2. Python面向对象编程:数据封装、继承和多态
  3. n986原生android,【极光ROM】-【三星NOTE20U(国行/港版/台版/韩版/美版) N986X-高通865P】-【V4.0 Android-R-UA3】...
  4. Android Studio中修改APP图标和APP名称
  5. VOC2007数据集详细分析
  6. python 离线安装paramiko_离线安装 Python 2.7, paramiko 和 tornado
  7. 电脑上有什么好用的卸载软件?--geek 卸载神器
  8. 汉字拼音首字母检索筛选数据
  9. Python三种设计模式
  10. 前端必知必会的技术体系,再也不担心前端内卷了