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

article/2025/9/12 5:33:53

Logistic回归学习笔记

  • Logistic回归学习线路
    • 预备知识:建议先去B站学习一下信息量,熵,BL散度,交叉熵的概念。
    • Logistic回归的函数模型
    • 损失函数、损失最小化架构
      • 对数损失作为损失函数
      • 损失最小化架构
    • 分类函数
      • 最大概率分类函数
      • 阈值分类函数
    • Logistic回归的优化算法
      • 梯度下降
      • 随机梯度下降
      • 小批量梯度下降
      • 坐标下降

Logistic回归学习线路

预备知识:建议先去B站学习一下信息量,熵,BL散度,交叉熵的概念。

推荐B站视频:“交叉熵”如何做损失函数?打包理解“信息量”、“比特”、“熵”、“KL散度”、“交叉熵”

信息量(Information)指的是一个事件所包含的信息的多少,通常用以2为底的对数表示。比如说,如果一个事件发生的概率是1/8,那么这个事件的信息量就是log2(1/8)=-3,因为需要三个比特才能表示它。

熵(Entropy)是一个系统或信源中不确定性的度量,也可以理解为信息的平均量。在信息论中,熵越大表示系统或信源越难以预测,因此包含的信息越多。比如说,一堆硬币正反面朝上的情况有很多种可能性,因此它们的熵比一堆已知全是正面朝上的硬币要高。

KL散度(Kullback-Leibler
divergence),又称相对熵,是衡量两个概率分布之间差异的一种方式。KL散度是非负的,并且当且仅当两个分布完全相同时取值为0。

交叉熵(Cross-entropy)是一种用来比较两个概率分布之间差异的方法,它通常用于评估分类模型的性能。与KL散度类似,交叉熵也是非负的,当且仅当两个分布相等时取值为0。

本节知识导图

Logistic回归的函数模型

 逻辑回归是一个分类模型

 它可以用来预测某件事发生是否能够发生。分类问题是生活中最常见的问题:

  • 生活中:比如预测上证指数明天是否会上涨,明天某个地区是否会下雨,西瓜是否熟了

  • 金融领域:某个交易是否涉嫌违规,某个企业是否目前是否违规,在未来一段时间内是否会有违规

  • 互联网:用户是否会购买某件商品,是否会点击某个内容

 对于已知的结果,上面问题的回答只有:0,1

 我们以以下的一个二分类为例,对于一个给定的数据集,存在一条直线可以将整个数据集分为两个部分:

 此时,决策边界为 w 1 x 1 + w 2 x 2 + b = 0 w_{1}x_1+w_2x_2+b=0 w1x1+w2x2+b=0,此时我们很容易将 h ( x ) = w 1 x 1 + w 2 x 2 + b > 0 h(x)=w_1x_1+w_2x_2+b>0 h(x)=w1x1+w2x2+b>0的样本设置为1,反之设置为0。但是这其实是一个感知机的决策过程。
 逻辑回归在此基础上还需要在加上一层,找到分类概率与输入变量之间的关系,通过概率来判断类别。
回顾一下线性回归模型: h ( x ) = w T x + b h(x)=w^Tx+b h(x)=wTx+b在线性模型的基础上加上一个函数 g g g,即 h ( x ) = g ( w T x + b ) h(x)=g(w^Tx+b) h(x)=g(wTx+b)。这个函数就是sigmoid函数,也叫做logistic函数 g ( z ) = 1 1 + e − z g(z)=\frac{1}{1+e^{-z}} g(z)=1+ez1

它可以将一个线性回归中的结果转化为一个概率值。此时 h ( x ) h(x) h(x)表示的就是某件事发生的概率,我们也可以记为 p ( Y = 1 ∣ x ) p(Y=1|x) p(Y=1∣x)
可以看下sigmoid函数的图像:

总结:这样,我们便得到Logistic模型 h ( x ) h(x) h(x)的表达式 h ( x ) = 1 1 + e − w T x + b h(x) = \frac{1}{1+e^{-w^Tx+b}} h(x)=1+ewTx+b1
: h ( x i ) h(x_i) h(xi)的意义在于 样本 x i x_i xi的标签为1的概率为 h ( x ) h(x) h(x)

损失函数、损失最小化架构

对数损失作为损失函数

对数损失: l ( y , y ^ ) = − ∑ i = 1 m y i l o g 2 y ^ l(y,\hat{y})=-\sum_{i=1}^my_ilog_2\hat{y} l(y,y^)=i=1myilog2y^

l l l取最小值的时候,模型 y ^ \hat{y} y^分布最接近真实(理论)模型 y i y_i yi分布

损失最小化架构

因为是二分类问题,所以


将其带入对数损失函数 l l l
所以二分类的损失最小化架构为:

m i n − ∑ [ y i l o g ( h ( x i ) ) + ( 1 − y i ) l o g ( 1 − h ( x i ) ) ] min -\sum [y_ilog(h(x_i))+(1-y_i)log(1-h(x_i))] min[yilog(h(xi))+(1yi)log(1h(xi))]

逻辑回归损失函数为什么不用最小二乘法?答案


这就是交叉熵:
− ∑ [ y i l o g ( h ( x i ) ) + ( 1 − y i ) l o g ( 1 − h ( x i ) ) ] -\sum [y_ilog(h(x_i))+(1-y_i)log(1-h(x_i))] [yilog(h(xi))+(1yi)log(1h(xi))]


从概率论、统计学角度来看损失最小化架构(交叉熵):
 在统计学中,假设我们已经有了一组样本(X,Y),为了计算出能够产生这组样本的参数。通常我们会采用最大似然估计的方法(一种常用的参数估计的方法)。使用到最大似然估计的话,我们还要一个假设估计,这里我们就是假设 Y Y Y是服从于伯努利分布的。 P ( Y = 1 ∣ x ) = p ( x ) P(Y=1|x)=p(x) P(Y=1∣x)=p(x) P ( Y = 0 ∣ x ) = 1 − p ( x ) P(Y=0|x)=1-p(x) P(Y=0∣x)=1p(x)由于 Y Y Y服从于伯努利分布,我们很容易就有似然函数: L = ∏ [ p ( x i ) y i ] [ 1 − p ( x i ) ] ( 1 − y i ) L=\prod[p(x_i)^{y_i}][1-p(x_i)]^{(1-y_i)} L=[p(xi)yi][1p(xi)](1yi)为了求解我们可以两边取对数:
l o g L = ∑ [ y i l o g ( p ( x i ) ) + ( 1 − y i ) l o g ( 1 − p ( x i ) ) ] logL = \sum [y_ilog(p(x_i))+(1-y_i)log(1-p(x_i))] logL=[yilog(p(xi))+(1yi)log(1p(xi))]

最大似然估计其实就是取概率的概率最大的那个概率模型:这么说你可能不懂,换种方式, ∏ p ( h ( x i ) ∣ θ ) \prod p(h(x_i)|\theta) p(h(xi)θ),已有概率模型 h ( x ) h(x) h(x)在现有样本 θ \theta θ的条件下,计算出值越大,越说明 h ( x ) h(x) h(x)最接近理论概率模型

我们一般喜欢取式子的最小值,所以将原式子转化一下
m i n ( − l o g L ) = m i n − ∑ [ y i l o g ( p ( x i ) ) + ( 1 − y i ) l o g ( 1 − p ( x i ) ) ] min(-logL) =min -\sum [y_ilog(p(x_i))+(1-y_i)log(1-p(x_i))] min(logL)=min[yilog(p(xi))+(1yi)log(1p(xi))]

这里的 p ( x i ) p(x_i) p(xi)对应的就是 h ( x i ) h(x_i) h(xi)

从信息量,熵的角度来看损失最小化架构:

KL散度:当 D K L = 0 D_{KL}=0 DKL=0时,P模型=Q模型,我们追求的就是我们所构建的Q模型(也就是 h ( x ) h(x) h(x))接近真实P模型(这里是样本的理论模型, p i 为 p_i为 pi样本)

没错,根据吉布斯不等式,交叉熵 ≥ \geq P系统的熵,所以当我们取交叉熵的最小值时,Q模型越接近真实的理论P模型,又知道,信息量的定义是 f : = − l o g 2 x f:=-log_2x f:=log2x
所以带入原式子,交叉熵为: − ∑ i = 1 m p i l o g 2 x -\sum_{i=1}^mp_ilog_2x i=1mpilog2x

这也就是对数损失的由来: l ( y , y ^ ) = − ∑ i = 1 m y i l o g 2 y ^ l(y,\hat{y})=-\sum_{i=1}^my_ilog_2\hat{y} l(y,y^)=i=1myilog2y^看老师的课的时候,直接丢给我一个对数损失,然后又直接讲交叉熵,对数损失为啥可以作为损失函数,也没告诉我们。通过上面的知识,读者应该明白这个对数损失怎么来的了吧。继续看下去,你会收获更多。

推荐视频:[“交叉熵”如何做损失函数?打包理解“信息量”、“比特”、“熵”、“KL散度”、“交叉熵”]

因为是二分类问题,所以


所以二分类的交叉熵为:

− ∑ [ y i l o g ( p ( x i ) ) + ( 1 − y i ) l o g ( 1 − p ( x i ) ) ] -\sum [y_ilog(p(x_i))+(1-y_i)log(1-p(x_i))] [yilog(p(xi))+(1yi)log(1p(xi))]

这里的 p ( x i ) p(x_i) p(xi)对应的就是 h ( x i ) h(x_i) h(xi)

这两个角度的思考:

  • 它们推导出来的式子是一样的,是不是都能叫交叉熵?
    • 不是的,它们只是式子相同,最大似然估计函数推导的时候是因为习惯上将相乘改为相加,所以才出现的 l o g log log,它的底数可以为任意正数,而且没有单位,而信息量 l o g 2 log_2 log2写进了定义里,并且他是有单位的,比特就是它的单位。

分类函数

最大概率分类函数

在一个 k k k元分类问题中,给定预测概率模型 h h h,即
h ( x ) = ( h 1 ( x ) , h 2 ( x ) , . . . , h k ( x ) ) h(x)=(h_1(x),h_2(x),...,h_k(x)) h(x)=(h1(x),h2(x),...,hk(x))其中, h i ( x ) h_i(x) hi(x)是样本属于第i个类别的概率。
关于模型h的最大概率分类函数为:
M a x P r o b h ( x ) = a r g m a x h i ( x ) MaxProb_h(x)=argmax h_i(x) MaxProbh(x)=argmaxhi(x)

:argmax,取最大值的下标。
这个 h i ( x ) h_i(x) hi(x)可以理解为,样本标签为 h i h_i hi的概率,最大 h i h_i hi的作为样本i的标签

阈值分类函数

在一个2元分类问题中,设标签在{0,1}中取值。
给定预测概率模型h,即h(x)表示特征组x的标签为1的概率。
关于模型h的以t为阈值的阈值分类函数为:

其就是,如果真实标签为1,那么就是当预测模型(标签为1)函数值大于某个值的时候,便认为预测标签为1,反正为0

Logistic回归的优化算法

梯度下降

理论部分:我的另一篇文章:搜索算法—学习笔记

achine_learning.logistic_regression.lib.logistic_regression_gd
import numpy as npdef sigmoid(scores):return 1 / (1 + np.exp(-scores))class LogisticRegression:def fit(self, X, y, eta=0.1, N = 1000): #eta ηm, n = X.shapew = np.zeros((n,1))for t in range(N):h = sigmoid(X.dot(w)) #hw(X)g = 1.0 / m * X.T.dot(h - y) #梯度gw = w - eta * g #更新wself.w = wdef predict_proba(self, X):return sigmoid(X.dot(self.w)) # 概率def predict(self, X):proba = self.predict_proba(X) # 概率return (proba >= 0.5).astype(np.int) 

交叉熵是一个凸函数吗,可导。

随机梯度下降

理论部分:我的另一篇文章:搜索算法—学习笔记

import numpy as npdef sigmoid(scores):return 1.0 / (1 + np.exp(-scorecs ))class LogisticRegression:def fit(self, X, y, eta_0=10, eta_1=50, N=1000):m, n = X.shapew = np.zeros((n,1))self.w = wfor t in range(N):i = np.random.randint(m) #随机选一个样本 x(i)x = X[i].reshape(1, -1) # 1*n 向量pred = sigmoid(x.dot(w)) # hw(x)g = x.T * (pred - y[i]) # 梯度w = w - eta_0 / (t + eta_1) * g # 更新wself.w += wself.w /= N # w均值def predict_proba(self, X):return sigmoid(X.dot(self.w))def predict(self, X):proba = self.predict_proba(X)return (proba >= 0.5).astype(np.int)

小批量梯度下降

坐标下降


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

相关文章

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

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

【printf函数的具体用法】

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

C语言printf函数详解

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

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;目的是把手机内部的接口如摄像头、显示屏接…

液晶屏接口LVDS接口与MIPI DSI接口区别

LVDS与MIPI DSI区别_那个苏轼回不来了丶的博客-CSDN博客_“mipi dsi接口与LVDS与MIPI DSI区别_那个苏轼回不来了丶的博客-CSDN博客_“mipi dsi接口与lvds接口区别LVDS与MIPI DSI区别_那个苏轼回不来了丶的博客-CSDN博客_“mipi dsi接口与 1、LVDS接口只用于传输视频数据&#x…

液晶屏接口-LVDS

LVDS是英文Low Voltage Differential Signaling的缩写&#xff0c;它是一种低压差分信号技术接口。采用LVDS接口&#xff0c;可以使得信号在差分PCB线或平衡电缆上以几百Mbps的速率传输&#xff0c;推荐的最高数据传输速率是655Mbps&#xff0c;而理论上可以达到1.923Gbps。 【…

LVDS高速接口测试

话不多说&#xff0c;直接测试 1. OUTPUT&#xff1a;LVDS_TX 2. SDR&#xff1a;代表着速率&#xff0c;测试选的SDR&#xff08;单速率&#xff09; 3. 8&#xff1a;串换因子&#xff0c;就是一对LVDS转化几bit的并行数据&#xff08;和后面的clk&#xff0c;clk_div有关系…

MIPI、LVDS、RGB、HDMI等接口对比

液晶屏有RGB TTL、LVDS、MIPI、HDMI接口&#xff0c;这些接口区别于信号的类型&#xff08;种类&#xff09;&#xff0c;也区别于信号内容。 具体RGB TTL接口信号类型是TTL电平&#xff0c;信号的内容是RGB666或者RGB888还有行场同步和时钟&#xff1b; LVDS接口信号类型是LVD…

LVDS接口液晶屏定义(lcd)

转载于&#xff1a;https://blog.csdn.net/linphusen/article/details/6389032 LVDS接口液晶屏定义 LVDS接口又称RS-644总线接口 20PIN单6定义&#xff1a; 1&#xff1a;电源2&#xff1a;电源3&#xff1a;地 4&#xff1a;地 5&#xff1a;R0- 6&#xff1a;R0 7&…