逻辑回归模型(Logistic Regression)

article/2025/8/24 12:30:08

逻辑回归符合伯努利分布。伯努利分布就是我们常见的0-1分布,即它的随机变量只取0或者1,各自的频率分别取1−p和p,当x=0或者x=1时,我们数学定义为:

所以在常规的逻辑回归模型中,只有两个类别,0或者1,适合二分类问题。

模型函数

逻辑回归模型可以看成是将线性回归模型放入一个sigmoid函数中。

线性回归模型为

sigmoid函数是

所以逻辑回归模型函数是

sigmoid函数的范围为[0,1],所以逻辑回归的输出范围也是[0,1],它相当于是x属于某个类别的概率。

损失函数

假设有下面这些训练数据,他们属于两个类别c1和c2. 我们要用一个模型f(x) 去拟合这批数据,使每个数据属于它的类别的概率最大。由于函数f(x)是关于weights w和bias b  的函数,所以模型的训练过程就是找一个最合适的w和b能使总概率最大。

由于只有两个类别,为了方面计算,我们将c1和c2分别用1和0来表示。

另外,求总概率的最大值相当于求的最小值。当替换掉之后,可得到下图中的结果。

由于类别只有0和1,所以可以用来替代原来式子。

这样就得到了逻辑回归模型的损失函数:

它相当于两个伯努利分布的交叉熵cross entropy。所以逻辑回归的损失函数叫cross entropy或者log loss function。

cross entropy的定义如下:

损失函数和错误函数的区别是:loss function是指一个数据上的错误。error function是一批数据上的平均错误

当真实类别y=1时,损失函数为-logf(x),它的图像如下。 可以看到预测值f(x)=0时,损失函数最大,当预测值f(x)=1时,损失函数最小。

当真实类别y=0时,损失函数为-log(1-f(x)), 它的损失函数在f(x)=1时最大,在f(x)=y=0时最小。

 

可以得到逻辑回归和线性回归的模型函数及损失函数的对比如下:

为什么线性函数可以用真实label和预测label之间差值的平方作为损失函数,而逻辑回归不用这个呢?这个后面再解释。

学习算法

接下来,就是怎么求损失函数的最小值。由于我们最终要得到的是weight和bias的值,所以我们用损失函数对他们求偏导。

对于复合函数,用链式法则求导。

由于中间涉及到sigmoid函数的求导,所以先给出sigmoid函数的导数如下:

 

其他部分利用链式法则逐层求导。

最后得到

根据梯度下降对权重w进行更新,更新公式如上图。

它由3个因素决定:learning rate,数据xi,以及预测值和实际值的差值大小。
 

逻辑回归的模型函数,损失函数,学习算法以及它与线性回归模型的对比如下。

 

逻辑回归解决多分类问题

由上面可知,逻辑回归只适用于二分类问题,类别要么是0,要么是1.

当然,如果要用逻辑回归处理多分类问题也可以,一般可以用有三种方法:一种是将一个类别设为1,其他所有类别设为0,训练多个二分类分类器,然后选择概率最高的分类器,它的预测类别就是所要的类别。但是会造成数据集不平衡。第二种是每次只取两个类别的数据进行训练。训练多个分类器,最后通过多个分类器投票选择出最后的类别。但是当类别较多时需要的分类器数量较多,影响运行速度。第三个是使用softmax函数。

下面介绍softmax方法。

softmax函数能将一个含任意实数的K维向量“压缩”到另一个K维实向量,使得每一个元素的范围都在(0,1)之间,并且所有元素的和为1。softmax函数定义如下

softmax 方法如下图所示。

假设有3个类别C1,C2,C3。 针对这3个类别分别训练3个线性模型z1,z2,z3。当有一个新的数据x过来时,z1,z2,z3都会产生一个输出。这3个输出被输入softmax函数,得到y1,y2,y3三个概率。表示x属于类别c1, c2, c3的概率分别是多少。

然后再将预测的y1,y2,y3和实际的类别标签做cross entropy 运行,这是模型的损失函数。然后用相同的方法求损失函数的最小值,获得w和b的最优解。

逻辑回归为什么要用cross entropy 来计算loss,而不像linear regression一样用平方差来计算loss

当我们用差值的平方做损失函数求导时,如下图所示。假如真实类别为1,如果预测类别也为1,两者很相近,导数为0,符合预期。但是当预测类别为0时,它和真实类别相差很大,但是导数也为0,这显然是有问题的。同样在真实类别为0时也会发生这样的问题。所以不选用差值的平方作为损失函数。

cross entropy和square error 在逻辑回归上的loss和weights的图像如下。如果使用红色的平方差,loss是很平坦的,导数就很小,那么参数更新就很慢。这时我们也不能通过增大learning rate来加速参数更新,因为这时有可能就是预测值和目标值很接近的时候,如果learning rate过大,就跳过最优解了。

logistic regression的局限

由于逻辑回归是线性分类器,它是用一条直线对类别进行划分。但是在下面的图中,没有一条直线可以将红色的点和蓝色的点分开。

解决的方法是feature transfermation。

比如将特征x1,x2改为到点(0,0)和点(1,1)的距离,那么这些数据点就可以转换成了右边的图,则可以用直线进行线性划分了。

但是怎么制造特征转换比较麻烦,可以考虑让机器完成这个工作。我们可以将多个逻辑回归叠起来一起用。

这样就可以用逻辑回归将这样的数据进行划分了。

当把多个逻辑回归模型叠加起来,就成了神经网络,其中每一个逻辑回归模型就是一个神经元。

 

​参考资料:

李宏毅机器学习视频:https://www.bilibili.com/video/av27639681/?p=10

 

 


http://chatgpt.dhexx.cn/article/1OwxkGYZ.shtml

相关文章

逻辑回归(Logistic Regression)详解

逻辑回归也称作logistic回归分析,是一种广义的线性回归分析模型,属于机器学习中的监督学习。其推导过程与计算方式类似于回归的过程,但实际上主要是用来解决二分类问题(也可以解决多分类问题)。通过给定的n组数据&…

逻辑回归模型及案例(Python)

1 简介 逻辑回归也被称为广义线性回归模型,它与线性回归模型的形式基本上相同,最大的区别就在于它们的因变量不同,如果是连续的,就是多重线性回归;如果是二项分布,就是Logistic回归。 Logistic回归虽然名…

PyCharm如何修改配置大内存

现在的电脑标配都8G以上内存了,不过很多IDE仍然是以低配电脑为标准,去配置软件占用硬件的程度 因为内存会直接影响到软件的性能,可以通过手动去设置大内存 一、首先启动虚拟机 进入pychram的bin目录,可以看到2个以vmoptions为后…

jvm最大内存限制多少?

(1)堆内存分配 JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小 于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,…

大内存时代虚拟内存现在还有用吗

但凡用过Windows的人,大多听说过“虚拟内存”这四个字。尤其在当年物理内存还普遍偏低的年代,虚拟内存几乎成了每一个玩电脑的人都曾摆弄过 的东东。不过随着硬件技术不断发展,内存价格逐步白菜化,我们的电脑再也不像当年那样算计…

笔记本电脑查看几个卡槽,支持最大内存,内存条参数详细步骤,开启双通道条件

1:一个命令,轻松查看电脑支持多大内存 使用 Win R组合快捷键,打开 运行 操作框,然后在打开后面 输入命令 cmd ,并点击下方的“确定”进入命令操作窗口,如下图所示。 然后在打开的CMD命令窗口输入命令&am…

在Jupyter里按需删除大内存变量并且释放内存

使用情形: 项目需要对多个大内存变量进行处理,但是每个大内存变量处理的时候都需要加载一个另外共同的大内存变量。现在处理完一个变量之后,只能重启kernel然后处理另一个变量;但是理论上我们可以删除一个变量的内存并读入下一个…

xp计算机如何查看内存大小,xp如何查看内存大小

想知道怎么查看电脑内存的大小吗,下面是学习啦小编带来的关于xp如何查看内存大小的内容,欢迎阅读! xp查看内存大小方法一: 一: 右键单击 我的电脑,选择 【属性】 查看 二: 打开控制面板,打开【系…

Android Studio如何设置占用的最大内存?

1.File-Settings,如下图,是应用到所有项目中的。 2.下方的“Daemon Heap Size Setting”是设置当前项目编译时所能使用的最大内存的,所以如果我们需要仅当前项目有效,可以在这里设置,设置好之后点击“确定”,完成更改。

不花里胡哨看电脑主板支持最大内存与频率

怎么看电脑主板支持最大内存 WinR输入Cmd回车 wmic memphysical get maxcapacity如上图 Maxcapacity:最大内存 k/1024M/1021G 33554432/1024/102132GB说明最高支持32GB的内存 怎么看电脑主板内存条卡槽 CtrlShiftEsc 可以看到卡槽、速度频率 怎么看电脑主板支…

确定你的台式计算机支持的内存类型,怎么查看电脑主板支持多大内存?教你看主板支持多大内存2种方法...

在我们使用电脑时,都希望电脑有这极强的性能,在想要电脑有极强的情况下,电脑的硬件其重要性毋庸置疑。很多喜欢DIY的小伙伴都会选择性能强但是极具性价比的硬件组装。不过不少用户在选择内存条的时候都是往大了选,通常情况下&…

确定你的台式计算机支持的内存类型,怎么看主板支持多大内存 教你看主板支持多大内存2种方法...

怎么看主板支持多大内存?由于不同的主板最大支持的内存大小不同,一些老主板最大支持4G/8GB内存,一些新主板可以支持16GB或者更高。对于DIY装机或者打算为电脑升级内存的时,就需要先了解主板最大支持多大的内存,这样才能…

win10设置虚拟内存_大内存时代,电脑系统还需要设置虚拟内存吗?

大家都知道,内存是组成电脑的重要硬件之一,甚至内存的大小决定了电脑系统运行的快慢,那么在电脑硬件高速发展的今天,电脑系统是否只需要物理内存就可以了呢?要搞清楚这个问题,我们需要先来认识一下物理内存和虚拟内存。 什么是物理内存,什么是虚拟内存? 虚拟内存是相对…

python设置程序最大内存_限制你的Python程序所能使用的最大内存

如果程序开发不当,可能会出现占用过多内存的情况。特别是在Docker里面,如果Python程序占用太多内存,可能会导致Docker容器死掉。 为了限制Python程序所能使用的最大内存,我们可以使用Python自带的resource模块。 首先获取系统默认…

64位 计算机 最大内存,win10 64位最大支持内存是多少_win10系统最高支持多大内存...

许多用户认为,win10电脑应该内存越大那么运行速度也就会越快,因此常常会给自己的win10 64位系统增加内存条,可是有些用户可能不知道,win10系统所能承受的内存空间也是有限制的,那么win10 64位最大支持内存是多少呢&…

计算机支持最大内存大小,64位电脑系统可以支持多大内存【详细介绍】

电脑最大支持多大内存条? 很多小白朋友对这方面的知识并不了解,导致走了很多弯路,其实电脑支持的内存位数取决于处理器、系统位数、主板等,不懂不要紧,今天小编给大家分享下详细的电脑最大支持多大内存条的相关知识点哦。 64位电脑系统可以支持多大内存? 就现在而言,主要…

引导最大内存_实际内存不够大,可用内存更加小,这样解决

内存在电脑上是非常重要的一个部件,电脑种所运行的程序都是在内存里面进行的,因此内存的大小也决定可同时运行的程序的多少,当电脑内存不足时就会影响电脑的性能。 有时电脑安装的内存明明很大,但实际可用的内存却很小,这是怎么回事呢? 右键计算机(或者此电脑)图标,打开…

linux内存--大内存页(大页)

linux 的内存管理是以页为单位进行管理的,标准的页大小是4kb,也就是4096字节。而linux允许配置定义更大大小的页。例如2M,1G,这就是大内存页。 1、大内存页(WHAT) 大内存页就是页的大小更大,例如…

JDK编译

重温下Jdk源码。。先来看下如何编译JDK,我用的环节是centos 其实很简单 大同小异。。 在openjdk官网:http://hg.openjdk.java.net/jdk8u下载的openjdk8u60版本 cd到下载的目录然后执行 bash ./configure --with-target-bits64 --with-boot-jdk机器上的…

java-如何反编译

Java内置的反编译工具 进入需要反编译的class文件夹输入cmd,打开命令行输入javap -p 类名称.class JAD反编译工具 进入需要反编译的class文件夹把jad.exe放在class文件的同级目录下输入cmd,打开命令行输入jad -sjava 类名称.class同级目录下会生成一个反编译的java文件