线性回归原理推导与应用(七):逻辑回归原理与公式推导

逻辑回归是一种分类算法,常用于二分类,也就是得出的结果为是和不是,例如通过各种因素判断一个人是否生病,信用卡是否违约等。逻辑回归在社会和自然科学中应用非常广泛,

前置知识

线性回归

逻辑回归的底层方法就是线性回归,所以需要对线性回归有基本的了解。具体的一元,多元线性回归原理在之前的文章中已经讲过,可以查看之前的文章
https://blog.csdn.net/qq_42692386/article/details/140824402
https://blog.csdn.net/qq_42692386/article/details/138210463
https://blog.csdn.net/qq_42692386/article/details/146070598

回归:假设现在有一些数据点,我们用一条线对这些点进行拟合(这条线称为最佳拟合线),这个拟合的过程就叫做回归。

线性回归:最佳拟合线是一条直线,线性是指每个自变量(或者说特征) x x x与因变量(或者说结果) y y y的结果是线性的关系

逻辑回归

在线性回归中得到的结果一般是连续的结果,而分类需要的结果是离散型的,例如二分类就是最终结果只需要两类。逻辑回归可以进行分类就是使用了Sigmoid函数将结果转化为0到1的范围内,再将0.5作为分界线从而分类。

Sigmoid函数

又被称为对数几率函数、Logistic函数。Sigmoid函数的数学表达式为:
σ ( z ) = 1 1 + e − z \sigma(z)= \frac 1 {1+e^{-z}} σ(z)=1+ez1
其函数图像为:
在这里插入图片描述

从图形可以看出,Sigmoid函数有如下性质:
1.函数定义域为 ( − ∞ , + ∞ ) (−\infty,+\infty) (,+),值域为 ( 0 , 1 ) (0,1) (0,1)
2.当 z z z趋近于 − ∞ −\infty 时,函数值 g ( z ) g(z) g(z)趋近于0;当 z z z趋近于 + ∞ +\infty +时,函数值 σ ( z ) \sigma(z) σ(z)趋近于1;当 z = 0 z=0 z=0时,函数值 σ ( z ) \sigma(z) σ(z)等于0.5.
3.函数单调可微。

Sigmoid函数的这些性质决定了它可以将 ( − ∞ , + ∞ ) (−\infty,+\infty) (,+)的数据映射到 ( 0 , 1 ) (0,1) (0,1)上,加上它在中心点处取值为0.5,所以我们可以将0.5作为分界线来进行分类。当然选择0.5作为阈值是一个一般的做法,实际应用时特定的情况可以选择不同阈值,如果对正例的判别准确性要求高,可以选择阈值大一些,对正例的召回要求高,则可以选择阈值小一些

对Sigmoid函数求导,有:
σ ′ ( z ) = d d z 1 1 + e − z = e − z ( 1 + e − z ) 2 = 1 ( 1 + e − z ) ⋅ ( 1 − 1 ( 1 + e − z ) ) = σ ( z ) ( 1 − σ ( z ) ) \begin{aligned} \sigma'(z) & = \frac d{dz}\frac 1{1+e^{-z}}\\ & = \frac {e^{-z}}{(1+e^{-z})^2}\\ & = \frac 1{(1+e^{-z})} \cdot (1- \frac 1{(1+e^{-z})})\\ & = \sigma(z)(1-\sigma(z))\\ \end{aligned} σ(z)=dzd1+ez1=(1+ez)2ez=(1+ez)1(1(1+ez)1)=σ(z)(1σ(z))
可以看到Sigmoid函数求导后仍然可以使用原函数表示,这也是它的一个比较好的性质。

逻辑回归的损失函数

逻辑回归本质上是线性回归,只是在特征到结果的映射中加入了一层Sigmoid函数映射,即先把特征线性求和,然后使用Sigmoid函数 g ( z ) g(z) g(z)将线性回归的结果值映射到0到1之间。将线性回归模型的表达式带入g(z),就得到逻辑回归的表达式:

在之前的线性回归原理中多元线性回归的一般形式为:
f ( x ) = w 0 x 0 + w 1 x 1 + w 2 x 2 + . . . + w k x k = w T x f(x) = w_{0}x_{0} +w_{1}x_{1}+ w_{2}x_{2} + ... +w_{k}x_{k}=w^Tx f(x)=w0x0+w1x1+w2x2+...+wkxk=wTx
代入到逻辑Sigmoid函数的表达式中,结果为:
h ( x ) = σ ( w T x ) = 1 1 + e − w T x h(x)=\sigma(w^Tx)= \frac 1 {1+e^{-w^Tx}} h(x)=σ(wTx)=1+ewTx1

此时如果按照之前的最小二乘法推导出最终的损失函数是非凸的,很难找到最优解,所以逻辑回归中使用最大似然法来确定模型的参数。

最大似然估计

最大似然估计认为我们既然已经抽取得到了一个结果,那么就认为这个结果就是所有情况、所有样本结果中出现概率最大的那一个。考虑到每次的抽取都是独立同分布的,所以将每一个取值对应的概率相乘就是这一个样本结果出现的概率(也就是似然函数),那么只要让这一个结果出现的概率(似然函数)最大就可以估算出每个值对应的概率

举个例子来说就是一个大桶里有红蓝两种球,现在有放回的随机抽了100个球,最终有70个红球和30个蓝球,那么我们可以推断认为桶里红蓝球的比例约为7:3,因为这种比例下出现已抽取到的结果的可能性最大.。
具体可以参阅如下链接文章:
https://blog.csdn.net/qq_42692386/article/details/139919043

最大似然估计的一般步骤为:

  1. 写出似然函数(也就是已知的样本结果出现的概率)。对于离散型变量是将对应概率相乘,连续型变量就是概率密度函数相乘。
  2. 求似然函数最大时对应概率的值。一般为了简化计算,首先对等式两边取对数,将相乘改为相加减,然后对似然函数求导,求导数为0时的值

逻辑回归损失函数推导

逻辑回归的最终结果是一个二分类结果,在概率中将结果表示为 y = 0 , y = 1 y=0,y=1 y=0,y=1,通常用数字1表示结果为正例,0表示结果为反例,可以分别表示发生与不发生,正面与反面,成功与失败,有问题与无问题等等二分类结果。在概率中我们用 P ( Y ) P(Y) P(Y)表示事件 Y Y Y发生的概率,例如 P ( Y = 1 ) P(Y=1) P(Y=1)可以表示硬币抛出正面,下雨这个事件发生等等的概率。同时二分类中的结果只有正例和反例,所以两者发生概率相加为1。用 P ( Y ∣ X ) P(Y|X) P(YX)表示在条件 X X X的情况下事件 Y Y Y发生的概率,称为后验概率

所以在逻辑回归中,结果当取值为 x x x时为正例的概率为:
P ( y = 1 ∣ x ; w ) = h ( x ) = 1 1 + e − w T x = e w T x 1 + e w T x P(y=1|x;w)=h(x)= \frac 1 {1+e^{-w^Tx}}=\frac{ e^{w^Tx}} {1+e^{w^Tx}} P(y=1∣x;w)=h(x)=1+ewTx1=1+ewTxewTx
同理可得出当取值为 x x x时为负例的概率:
P ( y = 0 ∣ x ; w ) ) = 1 − h ( x ) = 1 − σ ( w T x ) = 1 1 + e w T x P(y=0|x;w))=1-h(x)=1-\sigma(w^Tx)= \frac{1} {1+e^{w^Tx}} P(y=0∣x;w))=1h(x)=1σ(wTx)=1+ewTx1
需要注意的是这里直接将逻辑回归的计算结果 h ( x ) h(x) h(x)作为概率,例如一个样本计算结果 h ( x ) = 0.8 h(x)=0.8 h(x)=0.8,则就是认为其为正例的可能性为0.8,从而根据概率理解为其为正例,但是需要注意的是这个计算结果并不是一个真实的概率,只是在逻辑回归中计算结果可以作为概率来使用。

将两者合并到一起,可以得到逻辑回归的表达式:
P ( y ∣ x ; w ) = ( h ( x ) ) y ( 1 − h ( x ) ) 1 − y P(y|x;w)= (h(x))^y(1- h(x))^{1-y} P(yx;w)=(h(x))y(1h(x))1y

假设训练样本相互独立,则根据最大似然函数写出似然函数的表达式为:

J ( w ) = ∏ i = 1 n P ( y ( i ) ∣ x ( i ) ; w ) = ∏ i = 1 n h ( x ( i ) ) y ( i ) ( 1 − h ( x ( i ) ) ) 1 − y ( i ) J(w) = \prod_{i=1}^n P(y^{(i)}|x^{(i)};w) = \prod_{i=1}^n h(x^{(i)})^{y^{(i)}}(1-h(x^{(i)}))^{1-y^{(i)}} J(w)=i=1nP(y(i)x(i);w)=i=1nh(x(i))y(i)(1h(x(i)))1y(i)

其中 x ( i ) , y ( i ) x^{(i)},y^{(i)} x(i),y(i)是第 i i i 个观察样本的自变量值和实际结果值
对等式两边取以自然底数 e e e为底的对数,将累乘变为累加,有:

l n J ( w ) = l n ( ∏ i = 1 n h ( x ( i ) ) y ( i ) ( 1 − h ( x ( i ) ) ) 1 − y ( i ) ) = ∑ i = 1 n [ y ( i ) l n ( h ( x ( i ) ) ) + ( 1 − y ( i ) ) l n ( 1 − h ( x ( i ) ) ) ] \begin{aligned} ln J(w) &= ln \bigg(\prod_{i=1}^n h(x^{(i)})^{y^{(i)}}(1-h(x^{(i)}))^{1-y^{(i)}} \bigg) \\&= \sum^n_{i=1} \Big[y^{(i)} ln(h(x^{(i)})) + (1-y^{(i)})ln(1-h(x^{(i)}))\Big] \end{aligned} lnJ(w)=ln(i=1nh(x(i))y(i)(1h(x(i)))1y(i))=i=1n[y(i)ln(h(x(i)))+(1y(i))ln(1h(x(i)))]

最大似然估计希望似然函数越大越好,而之前我们求解损失函数时用的梯度下降是求最小值,所以在前面可以加一个负号,这样就得到逻辑回归的损失函数如下:
J ( w ) = − ∑ i = 1 n [ y ( i ) l n ( h ( x ( i ) ) ) + ( 1 − y ( i ) ) l n ( 1 − h ( x ( i ) ) ) ] J(w)= -\sum^n_{i=1} \Big[y^{(i)} ln(h(x^{(i)})) + (1-y^{(i)})ln(1-h(x^{(i)}))\Big] J(w)=i=1n[y(i)ln(h(x(i)))+(1y(i))ln(1h(x(i)))]

梯度下降更新公式

为了求解得到逻辑回归的损失函数的最小值,依旧使用梯度下降法
w j n + 1 = w j n − α ∂ ∂ w j J ( w ) w_{j}^{n+1}=w_{j}^{n}-\alpha\frac{\partial}{\partial w_{j}} J(w) wjn+1=wjnαwjJ(w)
其中 α \alpha α为学习率

根据Sigmoid函数求导的性质,对w求偏导有:

h ( x ) = σ ( w T x ) = σ ( w T x ) ( 1 − σ ( w T x ) ) ∂ ∂ w j w T x = h ( x ) ( 1 − h ( x ) ) ∂ ∂ w j w T x h(x)=\sigma(w^Tx)= \sigma(w^Tx)(1-\sigma(w^Tx))\frac{\partial}{\partial w_{j}}{w^Tx}= h(x){(1-h(x)}) \frac{\partial}{\partial w_{j}}{w^Tx} h(x)=σ(wTx)=σ(wTx)(1σ(wTx))wjwTx=h(x)(1h(x))wjwTx

对损失函数求偏导有:
∂ ∂ w j J ( w ) = − ∑ i = 1 n [ y ( i ) 1 h ( x ( i ) ) ∂ ∂ w j h ( x ( i ) ) + ( 1 − y ( i ) ) 1 ( 1 − h ( x ( i ) ) ) ∂ ∂ w j ( 1 − h ( x ( i ) ) ) ] = − ∑ i = 1 n [ y ( i ) 1 h ( x ( i ) ) ∂ ∂ w j h ( x ( i ) ) − ( 1 − y ( i ) ) 1 ( 1 − h ( x ( i ) ) ) ∂ ∂ w j h ( x ( i ) ) ] = − ∑ i = 1 n [ y ( i ) 1 h ( x ( i ) ) − ( 1 − y ( i ) ) 1 ( 1 − h ( x ( i ) ) ) ) ] ∂ ∂ w j h ( x ( i ) ) = − ∑ i = 1 n [ y ( i ) 1 h ( x ( i ) ) − ( 1 − y ( i ) ) 1 ( 1 − h ( x ( i ) ) ) ) ] h ( x ( i ) ) ( 1 − h ( x ( i ) ) ) ∂ ∂ w j w T x = − ∑ i = 1 n [ y ( i ) ( 1 − h ( x ( i ) ) ) − ( 1 − y ( i ) ) h ( x ( i ) ) ] ∂ ∂ w j w T x = − ∑ i = 1 n [ y ( i ) − h ( x ( i ) ) ] ∂ ∂ w j w T x = ∑ i = 1 n [ h ( x ( i ) − y ( i ) ) ] x j ( i ) \begin{aligned} \frac{\partial}{\partial w_{j}} J(w) &= -\sum^n_{i=1} \Big[y^{(i)} \frac{1}{h(x^{(i)})} \frac{\partial}{\partial w_{j}}h(x^{(i)}) + (1-y^{(i)}) \frac{1}{(1-h(x^{(i)}))} \frac{\partial}{\partial w_{j}}{(1-h(x^{(i)})})\Big] \\&= -\sum^n_{i=1} \Big[y^{(i)} \frac{1}{h(x^{(i)})} \frac{\partial}{\partial w_{j}}h(x^{(i)}) - (1-y^{(i)}) \frac{1}{(1-h(x^{(i)}))} \frac{\partial}{\partial w_{j}}{h(x^{(i)}})\Big] \\&= -\sum^n_{i=1} \Big[y^{(i)} \frac{1}{h(x^{(i)})} - (1-y^{(i)}) \frac{1}{(1-h(x^{(i)}))} )\Big] \frac{\partial}{\partial w_{j}}h(x^{(i)}) \\&= -\sum^n_{i=1} \Big[y^{(i)} \frac{1}{h(x^{(i)})} - (1-y^{(i)}) \frac{1}{(1-h(x^{(i)}))} )\Big] h(x^{(i)}){(1-h(x^{(i)}))} \frac{\partial}{\partial w_{j}}{w^Tx} \\&= -\sum^n_{i=1} \Big[y^{(i)} {(1-h(x^{(i)}))} - (1-y^{(i)})h(x^{(i)})\Big] \frac{\partial}{\partial w_{j}}{w^Tx}\\&= -\sum^n_{i=1} \Big[y^{(i)} - h(x^{(i)})\Big] \frac{\partial}{\partial w_{j}}{w^Tx} \\&= \sum^n_{i=1} \Big[h(x^{(i)} - y^{(i)} )\Big] x_{j}^{(i)} \end{aligned} wjJ(w)=i=1n[y(i)h(x(i))1wjh(x(i))+(1y(i))(1h(x(i)))1wj(1h(x(i)))]=i=1n[y(i)h(x(i))1wjh(x(i))(1y(i))(1h(x(i)))1wjh(x(i))]=i=1n[y(i)h(x(i))1(1y(i))(1h(x(i)))1)]wjh(x(i))=i=1n[y(i)h(x(i))1(1y(i))(1h(x(i)))1)]h(x(i))(1h(x(i)))wjwTx=i=1n[y(i)(1h(x(i)))(1y(i))h(x(i))]wjwTx=i=1n[y(i)h(x(i))]wjwTx=i=1n[h(x(i)y(i))]xji

所以最终的梯度下降更新公式为:
w j : = w j − ∂ ∂ w j J ( w ) = w j − α ∑ i = 1 n [ h ( x ( i ) − y ( i ) ) ] x j ( i ) w_{j}:=w_{j}-\frac{\partial}{\partial w_{j}} J(w)=w_{j}-\alpha \sum_{i=1}^{n} \Big[h(x^{(i)} - y^{(i)} )\Big] x_{j}^{(i)} wj:=wjwjJ(w)=wjαi=1n[h(x(i)y(i))]xji

可以看到梯度下降更新公式与之前说的多元线性回归梯度下降更新公式形式是一样的。但是这里的 h ( x ) h_(x) h(x)其中有Sigmoid函数,所以是非线性的函数,与多元线性回归是不同的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/81089.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Fastrace:Rust 中分布式追踪的现代化方案

原文链接:Fastrace: A Modern Approach to Distributed Tracing in Rust | FastLabs / Blog 摘要 在微服务架构中,分布式追踪对于理解应用程序的行为至关重要。虽然 tokio-rs/tracing 在 Rust 中被广泛使用,但它存在一些显著的挑战&#xf…

水果系列数据集- 葡萄grapes>> DataBall

该数据集可以用于目标检测,水果分类 ,文生图相关项目。 以下是图片样例:

HTTP协议接口三种测试方法之-postman

HTTP协议作为现代Web开发的基石,其接口测试是开发过程中不可或缺的环节。Postman作为最流行的API测试工具之一,能够极大提升我们的测试效率。本文将详细介绍如何使用Postman进行HTTP接口测试。 一、HTTP协议基础回顾 在开始使用Postman之前&#xff0c…

佰力博科技与您探讨半导体电阻测试常用的一些方法

一、两探针法​ 两探针法是一种较为基础的测试方法。该方法将两根探针与半导体样品表面紧密接触,通过电源在两根探针之间施加电压,同时使用电流表测量通过样品的电流,再根据欧姆定律计算电阻。​这种方法的优点在于操作简单、设备要求较低&a…

机器学习的一些基本概念

看了b站一个清华博士的视频做的笔记,对于人工智能的底层原理,训练方式,以及生成式文本输出,图片生成的底层原理有了一个了解,算是一个还不错的科普文。之前一直想要了解一下机器学习的入门原理,神经网络相关…

Python爬虫实战:研究Grab 框架相关技术

1. 引言 1.1 研究背景与意义 随着互联网的快速发展,网络上的数据量呈爆炸式增长。如何高效地获取和利用这些数据成为了当前的研究热点。网络爬虫作为一种自动获取网页内容的技术,能够按照一定的规则,自动地抓取万维网信息,在搜索引擎、数据挖掘、信息整合等领域有着广泛的…

uniapp 嵌入鸿蒙原生组件 具体步骤

关于怎么使用uniapp 嵌入鸿蒙原生组件 HBuilder X 版本 4.64 app-harmony文件下新建 index.uts button.ets button.ets里面复制uniapp 官方提供的 示例代码 https://uniapp.dcloud.net.cn/tutorial/harmony/native-component.html button.ets import { NativeEmbedBuilderO…

阿里云 OS Copilot 使用指南

安装: AlibabaCloudLinux: sudo yum install -y os-copilotUbuntu: curl -#S https://mirrors.aliyun.com/os-copilot/os-copilot-all-in-one-latest.sh | bash添加RAM用户 打开 https://ram.console.aliyun.com/users 复制AccessKey,Ac…

枚举类扩充处理

问题背景 由于 Java 不允许枚举继承另一个枚举(enum cannot extend enum),但可以通过 组合方式 或 工具类 来实现类似功能。 ✅ 解决方案一:组合方式引入原始枚举值 示例代码: public enum CustomErrorCodeEnum imp…

Spring Security探索与应用

Spring Security核心概念 框架定位与核心能力 Spring Security是Spring生态中实现应用级安全的核心框架,其官方定义为"强大且高度可定制的认证与访问控制框架"。作为Spring应用程序安全防护的事实标准解决方案,它通过模块化设计提供以下核心能力: 认证(Authenti…

蓝桥杯国14 不完整的算式

!!!!!!!!!!!!!!!理清思路 然后一步步写 问题描述 小蓝在黑板上写了一个形如 AopBC 的算式&#x…

扫描电镜:打开微观世界的“超维相机“

当你用手机拍摄一朵花的微距照片时,放大100倍已足够惊艳。但如果告诉你,科学家手中的"相机"能将物体放大百万倍,连病毒表面的蛋白突触都清晰可见,你是否会好奇这背后的黑科技?这把打开微观宇宙的钥匙&#x…

JVM学习(四)--对象内存布局

目录 一、对象内存布局 1、对象的实例化 1.1、你有几种方式创建对象? 1.2、创建对象的步骤 1.2.1、从字节码角度看待对象创建过程 1.2.2、从执行步骤角度分析 2、对象的内存布局 2.1、对象头 2.2、实例数据 2.3、对齐填充 3、对象的访问定位 3.1、句柄访…

SQL每日一题(4)

前言:第四更 虽然已经全部做完了,这套卷子非常推荐! 根据题目还原出来的原始表 employees表 idnameagestatus1张三28在岗2李四35在岗3王五42在岗4赵六NULL在岗5钱七58在岗6孙八24在岗7周九31离职8吴十-5在岗9郑十一45在岗10王十二52在岗 题…

如何做好一份技术文档?

文章目录 前言一、技术文档的核心原则二、技术文档的类型与场景三、技术文档的写作流程3.1 需求分析阶段(文档生产的基础)3.2 架构设计阶段(文档的骨架搭建)3.3 内容开发阶段(血肉填充)3.4 质量保障阶段&am…

怎么判断一个Android APP使用了KMM这个跨端框架

要判断一个 Android 应用是否使用了 KMM(Kotlin Multiplatform Mobile) 框架,可以通过以下方法逐步验证: 一、安装包结构分析 解压 APK 将 .apk 文件重命名为 .zip 并解压,检查以下特征: • kotlin/ 目录&a…

Axure系统原型设计列表版方案

列表页面是众多系统的核心组成部分,承担着数据呈现与基础交互的重要任务。一个优秀的列表版设计,能够极大提升用户获取信息的效率,优化操作体验。下面,我们将结合一系列精心设计的列表版方案图片,深入探讨如何打造出实…

HarmonyOS优化应用内存占用问题性能优化四

一、使用purgeable优化C内存 Purgeable Memory是HarmonyOS中native层常用的内存管理机制,可用于图像处理的Bitmap、流媒体应用的一次性数据、图片等。应用可以使用Purgeable Memory存放其内部的缓存数据,并由系统根据淘汰策略统一管理全部的purgeable内存…

第一课如何学习课程

读薄就这些东西 读厚细节;实现了还是很混沌(内功心法)-》有个项目;在听的过程中写博客:我学了什么,敲代码; 第二章 网络-》9.1kv存储 第三章 基础组件 (API函数、最基础的底层架构…

Linux 系统不终止进程的情况下关闭长连接

使用 tcpkill 中断指定 TCP 连接 适用场景:需主动中断已知源IP或目标端口的连接,无需进程重启。 安装 dsniff 工具(包含 tcpkill): yum -y install dsniff 捕获并杀死特定连接(例如目标IP 192.168.1.10…