深度学习原理-----逻辑回归算法

article/2025/9/16 18:14:51

系列文章目录

深度学习原理-----线性回归+梯度下降法
深度学习原理-----逻辑回归算法
深度学习原理-----全连接神经网络
深度学习原理-----卷积神经网络
深度学习原理-----循环神经网络(RNN、LSTM)
时间序列预测-----基于BP、LSTM、CNN-LSTM神经网络算法的单特征用电负荷预测
时间序列预测(多特征)-----基于BP、LSTM、CNN-LSTM神经网络算法的多特征用电负荷预测


系列教学视频

快速入门深度学习与实战
[手把手教学]基于BP神经网络单特征用电负荷预测
[手把手教学]基于RNN、LSTM神经网络单特征用电负荷预测
[手把手教学]基于CNN-LSTM神经网络单特征用电负荷预测
[多特征预测]基于BP神经网络多特征电力负荷预测
[多特征预测]基于RNN、LSTM多特征用电负荷预测
[多特征预测]基于CNN-LSTM网络多特征用电负荷预测


文章目录

  • 系列文章目录
  • 系列教学视频
  • 前言
  • 1、逻辑回归算法的原理
  • 2、损失函数和参数更新
  • 总结


前言

  在机器学习有监督学习中大致可以分为两大任务,一种是回归任务,一种是分类任务;那么这两种任务的区别是什么呢?按照较官方些的说法,输入变量与输出变量均为连续变量的预测问题是回归问题,输出变量为有限个离散变量的预测问题成为分类问题。
  举个例子,输入一个人每日的运动时间、睡眠时间、工作时间、饮食等一些特征来预测一个人的体重,一个人的体重的值可以有无限个值。所以预测的结果是无限的、不确定的连续数值。这样的机器学习任务就是回归任务。
  如果利用一个人每日的运动时间、睡眠时间、工作时间、饮食等一些特征来判断这个人的身体状况是否健康,那么最终的判断的结果就只有两种健康和不健康。这样的输出结果为离散值,预测的结果也是一个有限的数值来代表种类。
  前面已经对线性回归算法进行了一个讲解。线性回归算法可以解决一些简单的回归任务。而相对于线性回归来说,逻辑回归却是用来解决二分类问题的。因此逻辑回归这个名字很容易让初学者一脸懵,因为名字中带有回归却是用来做分类任务,其中后面深入去学习就会发现逻辑回归其实是用回归的方法来做分类,逻辑回归的本质输出还是一个在0-1之间的连续值,人为设定一个阈值来使输出的值映射为一个类别。下面我们就来具体的看看逻辑回归算法的原理。


1、逻辑回归算法的原理

  首先我们来介绍一下sigmoid函数,sigmoid函数的定义如如下: g ( z ) = 1 1 + e − z g(z)= \frac{1}{1+e^{-z}} g(z)=1+ez1  在sigmoid函数中,公式中,e为欧拉常数,自变量z可以取任意实数,函数的值域为[0,1],这就相当于将输入的自变量值映射到0-1之间;sigmoid的函数图像如下图所示:
在这里插入图片描述  我们可以想象一下,一件事发生的概率一定是是在0到1之间。因此我们可以利用输出的值来判断事情发生的概率的大小,假设这时候设置一个阈值0.3,那么当得分大于0.3则为正例,小于0.3则为反例,因此阈值不一定非要是0.5。例如在现实生活中,利用机器学习模型判断一个人是否生病,往往会把阈值设置的较小。因为如果把阈值设为0.5,那么当一个人最后的逻辑回归的得分为0.49时,其实这个人是有一定可能患病的,那么模型判断其没有患病,其实这样是不负责任的。当阈值设置的小点,即可以进一步进行检测看是否身体有问题,这样即可以保证误判的可能性变小,同时也可以帮助筛掉一些身体健康的人,提升医生治病的效率。
  下面我们将函数的自变量转化为利用输入的数据特征来表示,以此来利用sigmoid函数对其进行映射。 z = w 0 x 0 + w 1 x 1 + + w n x n + b z = W ⊤ X + b \begin{gathered} z=w_0 x_0+w_1 x_1++w_n x_n+b \\ z=W^{\top} X+b \end{gathered} z=w0x0+w1x1++wnxn+bz=WX+b  此时自变量就转变成输入的数据特征了,特征利用向量X表示。同时特征还有对应的权重参数向量W来表示这个数据特征的重要程度,同时还有偏置参数b。因此,逻辑回归模型可以用如下的公式来表达: g ( X ) = 1 1 + e − w T X + b g(X)=\frac{1}{1+e^{-w^T X+b}} g(X)=1+ewTX+b1  因此,将数据的特征输入到逻辑回归模型中,就可以计算出该事件为正例的概率。因此对于一个二分类的的问题,此时正例和反例的函数表达式就如下式所示:
  预测结果为正例的表达式: p ( y = 1 ∣ X ) = 1 1 + e − w T X + b p(y=1 \mid X)=\frac{1}{1+e^{-w^T X+b}} p(y=1X)=1+ewTX+b1  预测结果为反例的表达式: p ( y = 0 ∣ X ) = e − w T X + b 1 + e − w T X + b = 1 − p ( y = 1 ∣ X ) p(y=0 \mid X)=\frac{e^{-w^T X+b}}{1+e^{-w^T X+b}}=1-p(y=1 \mid X) p(y=0X)=1+ewTX+bewTX+b=1p(y=1X)  上面的式子可以统一表达当案例为正例和反例的两种情况,例如:
  为正例的时候,也就是当y=1的时候,将y=1带入到上式,可以得到: p ( 1 ∣ X ) = p ( y = 1 ∣ X ) = 1 1 + e − w T X + b p(1 \mid X)=p(y=1 \mid X)=\frac{1}{1+e^{-w^T X+b}} p(1X)=p(y=1X)=1+ewTX+b1  为反例的时候,也就是当y=0的时候,将y=0带入到上式,可以得到: p ( 0 ∣ X ) = 1 − p ( y = 1 ∣ X ) = e − w T X + b 1 + e − w T X + b p(0 \mid X)=1-p(y=1 \mid X)=\frac{e^{-w^T X+b}}{1+e^{-w^T X+b}} p(0X)=1p(y=1X)=1+ewTX+bewTX+b  因此,很显然这个公式可以将正反两种情况都考虑到,同时也方便后续的求解和推导。


2、损失函数和参数更新

  前面的逻辑回归模型也有了,利用该模型可以对输入的数据特征进行分类判断。但是模型的判断能力的好坏取决于模型中的参数w和b,因此我们需要从提供的数据样本中不断学习,从而更新参数w和b使得预测出的结果全部正确的概率最大,简单来讲就是所有的样本的预测正确的概率相乘得到数值是最大的,按这样的要求得到数据表达式如下所示,该式就是逻辑回归的损失函数。
L ( w , b ) = ∏ i = 1 m ( P ( 1 ∣ x i ) ) y i ( 1 − P ( 1 ∣ x i ) ) 1 − y i L(w, b)=\prod_{i=1}^m\left(P\left(1 \mid x_i\right)\right)^{y_i}\left(1-P\left(1 \mid x_i\right)\right)^{1-y_i} L(w,b)=i=1m(P(1xi))yi(1P(1xi))1yi  其中: P ( 1 ∣ x i ) = g ( x i ) = 1 1 + e − w T x i + b P\left(1 \mid x_i\right)=g\left(x_i\right)=\frac{1}{1+e^{-w^T x_i+b}} P(1xi)=g(xi)=1+ewTxi+b1  但是我们习惯将sigmoid函数按如下的形式撰写: g ( x i ) = 1 1 + e − w T x i + b = σ ( w ⊤ x i + b ) g\left(x_i\right)=\frac{1}{1+e^{-w^T x_i+b}}=\sigma\left(w^{\top} x_i+b\right) g(xi)=1+ewTxi+b1=σ(wxi+b)  因此就可以将上述的损失函数写成如下所示: L ( w , b ) = ∏ i = 1 m ( σ ( w ⊤ x i + b ) ) y i ( 1 − σ ( w ⊤ x i + b ) ) 1 − y i ψ L(w, b)=\prod_{i=1}^m\left(\sigma\left(w^{\top} x_i+b\right)\right)^{y_i}\left(1-\sigma\left(w^{\top} x_i+b\right)\right)^{1-y_i} \psi L(w,b)=i=1m(σ(wxi+b))yi(1σ(wxi+b))1yiψ  相对连乘运算,连加运算计算起来要比连乘要简单许多,因此可以利用两边同时取log的形式让连乘变成连加。此时就变成如下式所示: l ( w , b ) = log ⁡ L ( w , b ) = ∑ i = 1 m ( y i log ⁡ σ ( w ⊤ x i + b ) + ( 1 − y i ) log ⁡ ( 1 − σ ( w ⊤ x i + b ) ) ) l(w, b)=\log L(w, b)=\sum_{i=1}^m\left(y_i \log \sigma\left(w^{\top} x_i+b\right)+\left(1-y_i\right) \log \left(1-\sigma\left(w^{\top} x_i+b\right)\right)\right) l(w,b)=logL(w,b)=i=1m(yilogσ(wxi+b)+(1yi)log(1σ(wxi+b)))  此时我们只需要找到一组参数w和b使得 l ( w , b ) l(w, b) l(w,b)最大即可,但是在机器学习中通常希望把上升问题转化为下降问题,因此将该函数取相反数即可。得到下式: J ( w , b ) = − 1 m l ( w , b ) J_{(w, b)}=-\frac{1}{m} l(w, b) J(w,b)=m1l(w,b)  经过推导 J ( w , b ) J_{(w, b)} J(w,b)这个函数就是逻辑回归最终的损失函数,我们叫它交叉熵损失函数。
  此时,只要利用梯度下降法进行参数更新就能通过数据样本不断学习更新参数了,梯度下降法的步骤如下:
  步骤1,利用损失函数求解对应参数的偏导数:
  w参数的偏导数的计算步骤如下所示: ∂ J ( w , b ) ∂ w = − 1 m ∑ i = 1 m ∂ ( y i log ⁡ σ ( ω ⊤ x i + b ) + ( 1 − y i ) log ⁡ ( 1 − σ ( ω ⊤ x i + b ) ) ∂ w = − 1 m ∑ i = 1 m y i σ ( ω ⊤ x i + b ) [ 1 − σ ( ω ⊤ x i + b ) ] σ ( ω ⊤ x i + b ) x i + ( 1 − y i ) − σ ( ω ⊤ x i + b ) [ 1 − σ ( ω ⊤ x i + b ) ] 1 − σ ( ω ⊤ x i + b ) x i = − 1 m ∑ i = 1 m y i x i − σ ( w ⊤ x i + b ) x i = 1 m ∑ i = 1 m ( σ ( w ⊤ x i + b ) − y i ) x i \begin{gathered} \frac{\partial J_{(w, b)}}{\partial w}=-\frac{1}{m} \sum_{i=1}^m \frac{\partial\left(y_i \log \sigma\left(\omega^{\top} x_i+b\right)+\left(1-y_i\right) \log \left(1-\sigma\left(\omega^{\top} x_i+b\right)\right)\right.}{\partial w} \\ =-\frac{1}{m} \sum_{i=1}^m y_i \frac{\sigma\left(\omega^{\top} x_i+b\right)\left[1-\sigma\left(\omega^{\top} x_i+b\right)\right]}{\sigma\left(\omega^{\top} x_i+b\right)} x_i \\ +\left(1-y_i\right) \frac{-\sigma\left(\omega^{\top} x_i+b\right)\left[1-\sigma\left(\omega^{\top} x_i+b\right)\right]}{1-\sigma\left(\omega^{\top} x_i+b\right)} x_i \\ =-\frac{1}{m} \sum_{i=1}^m y_i x_i-\sigma\left(w^{\top} x_i+b\right) x_i \\ =\frac{1}{m} \sum_{i=1}^m\left(\sigma\left(w^{\top} x_i+b\right)-y_i\right) x_i \end{gathered} wJ(w,b)=m1i=1mw(yilogσ(ωxi+b)+(1yi)log(1σ(ωxi+b))=m1i=1myiσ(ωxi+b)σ(ωxi+b)[1σ(ωxi+b)]xi+(1yi)1σ(ωxi+b)σ(ωxi+b)[1σ(ωxi+b)]xi=m1i=1myixiσ(wxi+b)xi=m1i=1m(σ(wxi+b)yi)xi  最终 ∂ J ( w , b ) ∂ w \frac{\partial J_{(w, b)}}{\partial w} wJ(w,b)的计算结果如下: ∂ J ( w , b ) ∂ w = 1 m ∑ i = 1 m ( σ ( w ⊤ x i + b ) − y i ) x i \frac{\partial J_{(w, b)}}{\partial w}=\frac{1}{m} \sum_{i=1}^m\left(\sigma\left(w^{\top} x_i+b\right)-y_i\right) x_i wJ(w,b)=m1i=1m(σ(wxi+b)yi)xi  b参数的偏导数的计算步骤如下所示: ∂ J ( w , b ) ∂ b = − 1 m ∑ i = 1 m ∂ ( y i log ⁡ σ ( ω ⊤ x i + b ) + ( 1 − y i ) log ⁡ ( 1 − σ ( ω ⊤ x i + b ) ) ∂ b = − 1 m ∑ i = 1 m y i σ ( ω ⊤ x i + b ) [ 1 − σ ( ω ⊤ x i + b ) ] σ ( ω ⊤ x i + b ) + ( 1 − y i ) − σ ( ω ⊤ x i + b ) [ 1 − σ ( ω ⊤ x i + b ) ] 1 − σ ( ω ⊤ x i + b ) = − 1 m ∑ i = 1 m y i [ 1 − σ ( ω ⊤ x i + b ) ] + ( y i − 1 ) σ ( ω ⊤ x i + b ) = 1 m ∑ i = 1 m σ ( ω ⊤ x i + b ) − y i \begin{gathered} \frac{\partial J_{(w, b)}}{\partial b}=-\frac{1}{m} \sum_{i=1}^m \frac{\partial\left(y_i \log \sigma\left(\omega^{\top} x_i+b\right)+\left(1-y_i\right) \log \left(1-\sigma\left(\omega^{\top} x_i+b\right)\right)\right.}{\partial b} \\ =-\frac{1}{m} \sum_{i=1}^m y_i \frac{\sigma\left(\omega^{\top} x_i+b\right)\left[1-\sigma\left(\omega^{\top} x_i+b\right)\right]}{\sigma\left(\omega^{\top} x_i+b\right)} \\ +\left(1-y_i\right) \frac{-\sigma\left(\omega^{\top} x_i+b\right)\left[1-\sigma\left(\omega^{\top} x_i+b\right)\right]}{1-\sigma\left(\omega^{\top} x_i+b\right)} \\ =-\frac{1}{m} \sum_{i=1}^m y_i\left[1-\sigma\left(\omega^{\top} x_i+b\right)\right]+\left(y_i-1\right) \sigma\left(\omega^{\top} x_i+b\right) \\ =\frac{1}{m} \sum_{i=1}^m \sigma\left(\omega^{\top} x_i+b\right)-y_i \end{gathered} bJ(w,b)=m1i=1mb(yilogσ(ωxi+b)+(1yi)log(1σ(ωxi+b))=m1i=1myiσ(ωxi+b)σ(ωxi+b)[1σ(ωxi+b)]+(1yi)1σ(ωxi+b)σ(ωxi+b)[1σ(ωxi+b)]=m1i=1myi[1σ(ωxi+b)]+(yi1)σ(ωxi+b)=m1i=1mσ(ωxi+b)yi  最终 ∂ J ( w , b ) ∂ b \frac{\partial J(w, b)}{\partial b} bJ(w,b)的计算结果如下: ∂ J ( w , b ) ∂ b = 1 m ∑ i = 1 m σ ( ω ⊤ x i + b ) − y i \frac{\partial J_{(w, b)}}{\partial b}=\frac{1}{m} \sum_{i=1}^m \sigma\left(\omega^{\top} x_i+b\right)-y_i bJ(w,b)=m1i=1mσ(ωxi+b)yi  步骤2,利用计算好的偏导数进行参数更新: w = w − α ∂ J ( w , b ) ∂ w b = b − α ∂ J ( w , b ) ∂ b \begin{aligned} w &=w-\alpha \frac{\partial J_{(w, b)}}{\partial w} \\ b &=b-\alpha \frac{\partial J_{(w, b)}}{\partial b} \end{aligned} wb=wαwJ(w,b)=bαbJ(w,b)  步骤3,不断重复步骤1和步骤2,直到损失函数趋于平稳不再下降为止。
  按如上的步骤就找到了最合适的模型参数了,利用训练出来的参数就可以进行逻辑回归的分类了。


总结

  在机器学习中的两大核心算法,线性回归和逻辑回归分别应用于回归任务和分类任务中。其中最核心的部分就是利用梯度下降法进行参数的更新,梯度下降法体现了模型可以不断利用现有的数据进行不断学习而完成自我更新的过程,因此将线性回归和逻辑回归学好,有利于理解后续的深度学习神经网络算法。因此线性回归和逻辑回归是学习深度学习神经网络必要学好的前置储备知识。


http://chatgpt.dhexx.cn/article/Zs8leBOl.shtml

相关文章

逻辑回归算法原理及python实现

文章目录 引言逻辑回归算法原理逻辑回归损失函数 python实现逻辑回归决策边界python实现多项式逻辑回归sklearn中的逻辑回归逻辑回归中的正则化sklearn实现逻辑回归 引言 逻辑回归(Logistic Regression)是一种分类学习算法,其本质是将样本的…

基于逻辑回归算法模型搭建思路

在真实工作场景中,有多种算法依据借贷数据集建立模型,主要使用的算法有逻辑回归、神经网络、决策树、贝叶斯信念网、GBDT算法等,本系列文章旨在为刚入门和对模型感兴趣的同学介绍传统风控模型算法之一——逻辑回归。 前方高能!准…

【机器学习】Logistic Regression 逻辑回归算法详解 + Java代码实现

文章目录 一、逻辑回归简介1.1 什么是逻辑回归1.2 Sigmoid函数1.3 预测函数 二、逻辑回归实战 - Java代码实现 一、逻辑回归简介 1.1 什么是逻辑回归 逻辑回归(Logistic Regression)是一种用于解决二分类(0 or 1)问题的机器学习…

机器学习之逻辑回归算法

文章目录 逻辑回归原理推导逻辑回归求解 逻辑回归(Logistic Regression)是机器学习中的一种分类模型,它是一种分类算法,虽然名字中带有回归,但是它与回归之间有一定的联系。 看到回归二字,很多人可能会认为…

机器学习算法 之 逻辑回归算法

1 逻辑回归之第一次学习 本文内容主要转自两处: [1] 逻辑回归从入门到深入(logistic regression) 本文内容从Python 逻辑回归实际使用的角度出发,较为通俗易懂,感谢其作者的分享。 [2] 《百面机器学习》之逻辑回归 注意&#xf…

逻辑回归算法简介

逻辑回归算法:虽然名字中带有回归两个字,但它却不是回归算法,它是一个经典的二分类算法。 回归与分类的区别: 回归:可以得到一个准确值或一个区间值,比如房屋价格预测,NBA比赛得分等。 分类&am…

逻辑回归算法原理

回归与分类的不同在于其目标变量是否是连续的。分类是预测出一个标签,找到一条线或超平面去区分数据,输出是离散的、有限的。回归是预测出一个量,找到一条线去尽可能的拟合逼近这些数据,输出是连续的、无限的。 逻辑回归本质上是线…

机器学习算法--逻辑回归原理介绍

一、逻辑回归基本概念 1. 什么是逻辑回归 逻辑回归就是这样的一个过程:面对一个回归或者分类问题,建立代价函数,然后通过优化方法迭代求解出最优的模型参数,然后测试验证我们这个求解的模型的好坏。 Logistic回归虽然名字里带“…

逻辑回归算法

逻辑回归算法-龙珠计划 一、逻辑回归算法原理 逻辑回归(Logistic Regression) 属于机器学习 — 监督学习 — 分类。 逻辑回归(Logistic Regression)主要解决二分类问题,用来表示某件事情发生的可能性。 逻辑回归本…

【机器学习】逻辑回归算法

逻辑回归算法 学习目标1. 逻辑回归的介绍1.1 逻辑回归的应用场景1.2 逻辑回归的原理1.2.1 输入1.2.2 激活函数 1.3 损失以及优化1.3.1 损失1.3.2 优化 1.4 小结 2. 逻辑回归api介绍3. 案例:癌症分类预测-良/恶性乳腺癌肿瘤预测3.1 背景介绍3.2 案例分析3…

java中字符流和字节流的区别_java中字节流和字符流有哪些区别

java中字节流和字符流的区别有:1、定义不同;2、结尾不同;3、处理方式不同;4、缓冲区不同;5、编码方式不同。字节流默认不使用缓冲区,而字符流使用缓冲区。字节流采用ASCII编码,字符流采用unicod…

JAVA--字节流和字符流区别

(一)功能区别 1、FileInputSteam和FileOutputStream可以完成所有格式文件的复制; 2、FileReader和FileWriter只能完成文本格式的复制,无法完成视频、音频等文件的复制; (二)区别原理 1、字节…

Java进阶(四十五)java 字节流与字符流的区别

字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区&a…

字节流与字符流的区别用字节流好还是用字符流好?

字节流: (A)FileOutputStream(File name) 创建一个文件输出流,向指定的 File 对象输出数据。 (B)FileOutputStream(FileDescriptor) 创建一个文件输出流,向指定的文件描述器输出数据。 (C)FileOutputStream(String name) 创建一个文件输出流&…

Java基础面试题 | 字节流和字符流有什么区别?

字节流按 8 位传输,以字节为单位输入输出数据,字符流按 16 位传输,以字符为单位输入输出数据。 但是不管文件读写还是网络发送接收,信息的最小存储单元都是字节。 java 字节流与字符流的区别_afa的专栏-CSDN博客_java中字节流和…

JAVA字节流和字符流的区别

之前在复习IO的时候,为了方便记忆,提到了以Stream结尾的为字节流,以Writer或者Reader结尾的为字符流。 除了在使用上的不一样,那究竟两者有什么区别呢。直接给出结论:字节流在操作时本身不会用到缓冲区(内…

字节流与字符流的区别及相互转换

转载:http://www.cnblogs.com/sjjsh/p/5269781.html 先来看一下流的概念: 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用…

字节流与字符流

字节流、字符流 主要内容 IO 流 字节流 字符流 异常处理 Properties 教学目标 能够说出IO流的分类和功能 能够使用字节输出流写出数据到文件能够使用字节输入流读取数据到程序 能够理解读取数据read(byte[])方法的原理能够使用字节流完成文件的复制 能够使用FileWirter…

Java字节流和字符流的区别?

字符流:就是在字节流的基础上,加上编码,形成的数据流 字符流出现的意义:因为字节流在操作字符时,可能会有中文导致的乱码,所以由字节流引申出了字符流。 程序中所有的数据都是以流的方式进行传输或保存的…