Logistic Regression(逻辑回归)详细讲解

article/2025/9/12 5:09:35

Logistic Regression(逻辑回归)

以前在学校学到Logistic Regression的时候,虽然最后会使用,但是对于许多地方有很多的疑惑,今天在这里详细梳理一下Logistic Regression的过程:

  • Logistic Regression逻辑回归
    • 回归的思想
    • Logistic Regression形式
    • 损失函数
    • 最小化Einw E_invec w
    • 梯度下降法
    • 总结


回归的思想

Logistic Regression和线性回归一样,是回归中常见的算法。很多人刚接触Logistic Regression,不知道回归的含义。其实在念中学的时候学到的用最小二乘法求解线性回归方程,就是我们最早接触到的回归。在二维平面上有很多的点 <x1,y1>,<x2,y2>...<xn,yn> <script type="math/tex" id="MathJax-Element-11428"> , ... </script>,从这些点中选出一条直线,来很好的拟合这些点。通过求解,最后得到的回归方程形式是 y=bx+a ,然后来一个新的新的 x ,通过这个函数,能够计算得到对应的y的值。

所以一种常见的回归就是通过一系列的点,计算得到一条合适的线。当有新的输入时,可以直接计算得到输出。不局限于二维平面的话,点可以表示为 <x1,y1>,<x2,y2>...<xn,yn> <script type="math/tex" id="MathJax-Element-11432"><\vec {x_1},y_1>,<\vec {x_2},y_2>...<\vec {x_n},y_n></script>, x1 是一个 d 维的向量。对于线的表示都不尽相同,线性回归得到的预测函数形式是y=w⃗ Tx⃗ +a,对于Logistic 回归,是一条“S”型曲线,在接下来会讲到。

还有一些回归不是通过得到一条线。比如使用决策树来回归。就是把一些点分布到树的节点上。每个节点的平均值就是作为回归值。

简单来说,回归就是根据输入预测一个值。

Logistic Regression形式

Logistic Regression最常见的应用场景就是预测概率。比如知道一个人的 年龄性别血压胆固醇水平体重,想知道这个人患心脏病的概率。首先很容易想到通过线性回归,根据这一组值来计算得到一个分数。对于病人的特征 (x0,x1,x2,...,xd) ,计算得到危险分数是

s=i=0dwixi

计算得到的分数越高,风险越大,分数越低,风险越小。s的取值是 [,+] 的值,但是我们想要的是一个 [0,1] 之间的值。因此需要一个转换函数来把这个分数转换成 [0,1] 之间的值。这个函数称为Logistic 函数,Logistic函数是一个S形的函数。
形状如下图所示:
Logistic Function
这个函数也称为sigmoid函数。函数能够把s映射到 [0,1] 之间,我们把这个函数称为 θ(s) 。Logistic函数形式为:
θ(s)=es1+es=11+es

其中 e 即是自然常数。
因此整个Logistic Regression的函数形式为:
h(x⃗ )=11+ew⃗ Tx⃗ 

损失函数

在Logistic Regression函数中,我们使用最大似然方式来求解模型的参数。有关最大似然,维基百科有定义。
我们把真实模型称为 f ,学习得到的模型为h f 是未知的,要用h去拟合 f 。Logistic Regression的目标函数是,在已知x的条件下,输出 y=+1 的概率, y=+1 即为 f(x) y=1 的概率为 1f(x) 。对于数据集 D={(x⃗ 1,+1),(x⃗ 2,1),...,(x⃗ n,1)} ,抽取到该数据集的概率为

P(x⃗ 1)f(x⃗ 1)P(x⃗ 2)(1f(x⃗ 2))...P(x⃗ n)(1f(x⃗ n))

因为 f 是真正产生这个数据集的,f产生这个数据集的概率应该是很大的(最大似然估计的思想)。如果我们用 h 来代替f,那么得到该数据集的概率为
P(x⃗ 1)h(x⃗ 1)P(x⃗ 2)(1h(x⃗ 2))...P(x⃗ n)(1h(x⃗ n))
,这个概率我们称为似然函数 likelihood(h) 。需要找到的最终的函数 h 应该是likelihood(h)取最大值的那个 h 。即我们要求解likelihood(h)最大值,然后得到 h 即为我们想要的。

likelihood(h)=P(x⃗ 1)h(x⃗ 1)P(x⃗ 2)(1h(x⃗ 2))...P(x⃗ n)(1h(x⃗ n))

其中,根据Logistic函数的对称性有 1h(x⃗ )=h(x⃗ ) 。从而有
likehood(h)i=1nh(yixi)()

我们要求解 maxhlikelihood(h) ,即需要求解 maxhni=1h(yixi) ,我们需要的是求得 w⃗  这个参数,因此转换得到
likehood(w)i=1nθ(yiw⃗ Txi)

这是一个连乘,两边取对,即可转换成连加。
ln(likehood(w))i=1nln(θ(yiw⃗ Txi))1ni=1nln(θ(yiw⃗ Txi))

求解上式的最大值,等价于求解
minw⃗ 1ni=1nln(θ(yiw⃗ Txi))

θ 函数定义代入,得到
minw⃗ 1ni=1nln(1+eyiw⃗ Txi)

定义
Ein(w⃗ )=i=1nln(1+eyiw⃗ Txi)

err(w⃗ ,y,x⃗ )=ln(1+eyiw⃗ Txi)

err(w⃗ ,y,x⃗ ) 为在极大似然估计下,Logistic方程的误差,称为cross entropy error。而让 Ein(w⃗ ) 最小的 w⃗  是我们希望得到的Logistic Regression模型的参数。

最小化 Ein(w⃗ )

根据以上的推导,损失函数 Ein(w⃗ )

Ein(w⃗ )=i=1nln(1+eyiw⃗ Txi)

从数学上可以推导出 Ein(w⃗ ) 是连续平滑的,可微,且二次可微的,也是凸函数(来自林轩田老师视频)。要求 Ein(w⃗ ) 的最小值,就对 Ein(w⃗ ) 求微分,然后计算微分等于0的点。
Ein(w⃗ ) w⃗  每一个方向分量 wj 上求偏微分
Ein(w⃗ )wj=1ni=1nθ(yiw⃗ Txi)(yixi,j)

把偏微分中的 xi,j 换成向量,则可以得到一阶微分:
Ein(w⃗ )=1ni=1nθ(yiw⃗ Txi)(yixi)

Ein(w⃗ ) 属于该损失函数的梯度,在二维空间的话我们称为斜率。如果直接令:

Ein(w⃗ )=0

来求解的话,是很难求解出 w⃗  的值的,因此需要使用其他方式。

梯度下降法

直接求解是无法求解出 w⃗  的,一种思想是采用迭代的方式求最小的 Ein(w⃗ ) 。每次改变 w⃗  一点,尽可能使这个改变让 Ein(w⃗ ) 朝着变得更小,这样逐步使 Ein(w⃗ ) 趋近于最小值。如第 t 次到t+1次迭代,权重更新的形式如下:

w⃗ t+1=w⃗ t+ηv⃗ 

其中 v⃗  是一个单位向量, η 是步长。 Ein(w⃗ t+1) 应该要比 Ein(w⃗ t) 更小,这样的更新才有意义。因为我们是要找到 Ein(w⃗ ) 的最小值。
Ein(w⃗ t+1) 代入 w⃗ t ,得到 Ein(w⃗ t+ηv⃗ ) 。现在有 Ein(w⃗ ) 的一阶微分,可以对 Ein(w⃗ t+ηv⃗ ) 采用泰勒展开,如下:
Ein(w⃗ t+ηv⃗ )Ein(w⃗ t)+ηv⃗ TEin(w⃗ t)

忘记泰勒展开没关系,可以从直观上来理解这个式子。根据以上的结论, Ein(w⃗ ) 是存在最小值的,同时是光滑连续,可微及二次可微的。其曲线类似于下图:
这里写图片描述
任何一条曲线,如果只看一小段的话,可以把这一小段曲线看成是一个线段。从数学上来讲,一个函数在某一点到附近的另外一点,可以用一个线段来表示。附近点的值为该点的值加上一小段线段的梯度,就得到了上式。

要使 Ein(w⃗ t)+ηv⃗ TEin(w⃗ t) Ein(w⃗ t) 小很多,必须 ηv⃗ TEin(w⃗ t) 取最小值, η 是不变的,两个向量相乘需要得到最小值,很显然方向相反时,向量乘积取得最小值。因此 v⃗  需要和 Ein(w⃗ t) 方向相反,同时 v⃗  是单位向量,因此在 wt 点时有

v⃗ =Ein(w⃗ t)Ein(w⃗ t)

因此有 w⃗  的更新方式为

w⃗ t+1=w⃗ tηEin(w⃗ t)Ein(w⃗ t)

到此,梯度下降总体思想结束了。梯度下降主要有两种方法,一种是随机梯度下降,一种是批量梯度下降。批量梯度下降每次更新权重需要训练完所有的数据,随机梯度下降每次训练完一条记录,就可以计算对应梯度,更新权重。在实际使用中,推荐使用随机梯度,收敛速度快。同时有关步长 η 的设置需要注意,设置太大会引起抖动,太小收敛速度太慢,可以采用动态的步长,比如一开始比较大,慢慢的缩小。迭代更新的停止条件从理论上来说是找不到更小的 Ein(w⃗ ) ,在实际使用可以直接设置一个比较大的迭代次数,或者根据经验设置一个迭代次数,一般都会收敛。当然这些都是工程上的东西了。

总结

到此基本讲完了Logistic Regression大部分内容了。当时在学校学完之后怎么也没懂,损失函数为什么是这样,为什么要使用随机梯度下降等等这些问题一直没有解决,虽然看看博客也能够做实验把代码写完(南京大学数据挖掘课程很赞啊)。最近在看林轩田老师的视频,慢慢弄,基本搞懂了。Logistic Regression作为常见的一类回归,其中的思想在很多算法中都用到。欢迎大家一起讨论。


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

相关文章

第13章Stata Logistic回归分析

目录 13.1二元Logistic回归分析 案例延伸 延伸1&#xff1a;设定模型预测概率得具体值 延伸2&#xff1a;使用Probit模型对二分类因变量进行拟合 13.2多元Logistic回归分析 案例延伸 延伸&#xff1a;根据模型预测每个样本视力低下程度的可能性 13.3有序Logistic回归 …

机器学习笔记-Logistic回归

0 - 回顾 l i n e a r r e g r e s s i o n linear\ regression linear regression如果使用平方错误的话&#xff0c;我们可以很方便的解析出最好的 w w w是什么。即 w b e s t X † y w_{ best}X^{\dagger} y wbest​X†y 1 - 逻辑斯蒂回归问题 1.1 - 问题的提出 从一个人…

logistic回归详解

逻辑斯谛回归&#xff08;logistic regression&#xff09;是统计学习中的经典分类方法&#xff0c;虽然带有回归的字眼&#xff0c;但是该模型是一种分类算法&#xff0c;逻辑斯谛回归是一种线性分类器&#xff0c;针对的是线性可分问题。利用logistic回归进行分类的主要思想是…

机器学习笔记(六)Logistic回归

目录 一、什么是Logistics回归 二、sigmoid函数 三、梯度上升法 四、代码实现 数据导入 决策边界 梯度上升 五、总结 一、什么是Logistics回归 logistic回归是一种广义线性回归&#xff08;generalized linear model&#xff09;&#xff0c;因此与多重线性回归分析有很多相…

【机器学习】Logistic回归(重新整理)

Logistic回归学习笔记 Logistic回归学习线路预备知识&#xff1a;建议先去B站学习一下信息量&#xff0c;熵&#xff0c;BL散度&#xff0c;交叉熵的概念。Logistic回归的函数模型损失函数、损失最小化架构对数损失作为损失函数损失最小化架构 分类函数最大概率分类函数阈值分类…

C语言 fprintf 函数 - C语言零基础入门教程

目录 一.fprintf 函数简介二.fprintf 函数使用三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.fprintf 函数简介 fprintf 是 C / C 中的一个格式化库函数&#xff0c;位于头文件 中&#xff0c;其作用是格式化输出到一个流文件中&#xff1…

【printf函数的具体用法】

一、printf&#xff08;&#xff09;函数 1、基本输出语句 printf()函数是C语言的输出函数&#xff0c;功能是按指定的输出格式把相应的参数值在标准的输出设备中显示出来。 printf 的格式 printf(格式控制串&#xff0c;参数1&#xff0c;参数2&#xff0c;…)&#xff0c;…

C语言printf函数详解

文章目录 1、类型符&#xff08;type&#xff09;2、宽度&#xff08;width&#xff09;3、对齐标志&#xff08;flags&#xff09;4、精度&#xff08;prec&#xff09;5、格式化输出到字符串6、版权声明 C语言格式化输出的函数有printf、sprintf和snprintf等&#xff0c;功能…

printf函数讲解

printf函数讲解 #include <stdio.h>/*辗转相除法求最大公约数*/ int gcd(int m, int n); int factrial(int a); int main(void){int m, n, t;scanf_s("%d %d", &m, &n);if (m < n){t m;m n;n t;}//n gcd(m, n);//printf("%d", n);pr…

C语言中fscanf和fprintf函数的使用

目录 一、前言 二、对比 1、scanf和fscanf&#xff1a; 2、printf和fprintf&#xff1a; 三、结论&#xff1a; 四、代码实现 1、fprintf相关代码 2、fscanf代码实现 3、 用fscanf和fprintf实现scanf和printf功能&#xff1a; 一、前言 在了解fscanf和fprintf之前我…

printf()函数详解

感谢博主的分享&#xff1a;https://me.csdn.net/blog/K346K346 1.printf()简介 printf()是C语言标准库函数&#xff0c;用于将格式化后的字符串输出到标准输出。标准输出&#xff0c;即标准输出文件&#xff0c;对应终端的屏幕。printf()申明于头文件stdio.h。 函数原型&am…

有关于fprintf()函数的用法

fprintf&#xff08;简介&#xff09; fprintf是C/C中的一个格式化库函数&#xff0c;位于头文件中&#xff0c;其作用是格式化输出到一个流文件中&#xff1b;函数原型为int fprintf( FILE *stream, const char *format, [ argument ]…)&#xff0c;fprintf()函数根据指定的格…

雷达理论的模糊函数

在雷达理论中&#xff0c;模糊与分辨是两个既有联系又有区别的概念。对多个目标来说&#xff0c;模糊就是不能分辨。雷达的分辨力取决于模糊图中心主瓣的宽度。雷达模糊度不仅考虑主瓣宽度&#xff0c;还考虑模糊图旁瓣的影响。因此&#xff0c;在研究雷达分辨理论之前&#xf…

驱动板LVDS输出接口(发送器),液晶面板LVDS输入接口(接收器)

1&#xff0e;LVDS输出接口概述 液晶显示器驱动板输出的数字信号中&#xff0c;除了包括RGB数据信号外&#xff0c;还包括行同步、场同步、像素时钟等信号&#xff0c;其中像素时钟信号的最高频率可超过28MHz。采用TTL接口&#xff0c;数据传输速率不高&#xff0c;传输距离较短…

两种LVDS数传接口--车载视频传输

本文介绍两种LVDS数传接口&#xff1a;GMSL和FPD Link&#xff0c;这两种接口在汽车视频传输方面的应用是比较广泛的&#xff0c;尤其是Camera和处理器之间的链路&#xff0c;通过STP或者同轴电缆能使整个链路达到15m。 1、FPD Link Flat Panel Display Link(FPD Link)最早是…

LVDS接口分类与数据格式

转发路径&#xff1a;https://blog.csdn.net/a617996505/article/details/82386952 1.LVDS接口分类与数据格式 单路6it LVDS 这种接口电路中&#xff0c;采用单路方式传输&#xff0c;每个基色信号采用6位数据&#xff0c;共18位RGB数据&#xff0c;因此&#xff0c;也称18位…

Xilinx fpga实现LVDS高速ADC接口

LVDS 即Low-Voltage Differential Signaling。FPGA的selecteIO非常强大&#xff0c;支持各种IO接口标准&#xff0c;电压电流都可以配置。其接口速率可以达到几百M甚至上千M。使用lvds来接收高速ADC产生的数据会很方便。像ISERDES&#xff0c;IDDR&#xff0c;IDELAY&#xff0…

LVDS接口和接口电路概述

1、LVDS接口概述 LVDS&#xff0c;即Low Voltage Differential Signaling&#xff0c;是一种低压差分信号技术接口。克服以TTL电平方式传输宽带高码率数据时功耗大、EMI电磁干扰大等缺点而研制的一种数字视频信号传输方式。LVDS输出接口利用非常低的电压摆幅&#xff08;约350m…

常见视频高速接口分析MIPI,LVDS,RGB,HDMI

文章目录 一、RGB接口二、LVDS接口三、MIPI接口四、HDMI接口 一、RGB接口 &#xff08;1&#xff09;接口定义 RGB颜色是工业界的一种颜色标准&#xff0c;是通过对红、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的&#xff0c;RGB即是代表红…

接口mipi和lvds的区别

原文&#xff1a;http://m.elecfans.com/article/578395.html MIPI &#xff08;Mobile Industry Processor Interface&#xff09; 是2003年由ARM&#xff0c; Nokia&#xff0c; ST &#xff0c;TI等公司成立的一个联盟&#xff0c;目的是把手机内部的接口如摄像头、显示屏接…