【机器学习】P6 逻辑回归的 损失函数 以及 梯度下降

news2025/7/28 9:21:55

逻辑回归的损失函数 以及 梯度下降

  • 逻辑回归的损失函数
    • 逻辑回归的 Loss
    • 逻辑回归的 Cost
  • 逻辑回归的梯度下降
    • 总公式
    • 推导公式
  • 梯度下降动画效果展示
  • Reference

逻辑回归的损失函数

逻辑回归的 Loss

逻辑回归是一种用于二分类问题的监督学习算法,其损失函数采用交叉熵(Cross-Entropy)损失函数。

公式如下:
l o s s ( f w ⃗ , b ( x ⃗ ( i ) ) , y ( i ) ) = { − log ⁡ ( f w ⃗ , b ( x ⃗ ( i ) ) ) if  y ( i ) = 1 − log ⁡ ( 1 − f w ⃗ , b ( x ⃗ ( i ) ) ) if  y ( i ) = 0 \begin{equation} loss(f_{\mathbf{\vec{w}},b}(\vec{x}^{(i)}), y^{(i)}) = \begin{cases} - \log\left(f_{\vec{w},b}\left( \vec{x}^{(i)} \right) \right) & \text{if $y^{(i)}=1$}\\ - \log \left( 1 - f_{\vec{w},b}\left( \vec{x}^{(i)} \right) \right) & \text{if $y^{(i)}=0$} \end{cases} \end{equation} loss(fw ,b(x (i)),y(i))={log(fw ,b(x (i)))log(1fw ,b(x (i)))if y(i)=1if y(i)=0

简化为:
l o s s ( f w ⃗ , b ( x ⃗ ( i ) ) , y ( i ) ) = y ( i ) ∗ ( − l o g ( f w ⃗ , b ( x ⃗ ( i ) ) ) ) + ( 1 − y ( i ) ) ∗ ( − l o g ( 1 − f w ⃗ , b ( x ⃗ ( i ) ) ) ) loss(f_{\vec{w},b}(\vec{x}^{(i)}),y^{(i)})=y^{(i)}*(-log(f_{\vec{w},b}(\vec{x}^{(i)})))+(1-y^{(i)})*(-log(1-f_{\vec{w},b}(\vec{x}^{(i)}))) loss(fw ,b(x (i)),y(i))=y(i)(log(fw ,b(x (i))))+(1y(i))(log(1fw ,b(x (i))))

函数图像如下:
在这里插入图片描述

Q:为什么逻辑回归函数不使用平方误差损失函数?

A: 由于平方误差损失函数会对预测值和真实值之间的误差进行平方,所以对于偏离目标值较大的预测值具有较大的惩罚,使用平方误差损失函数可能导致训练出来的模型过于敏感,对于偏离目标值较远的预测值可能会出现较大的误差,从而导致出现 “震荡”现象
震荡现象: 平方误差损失函数的梯度在误差较小时非常小,而在误差较大时则非常大,这导致在误差较小时,模型参数的微小变化可能会导致损失函数的微小变化,而在误差较大时,模型参数的变化则会导致损失函数的大幅变化,从而产生了振荡现象。

在这里插入图片描述

震荡现象对于梯度下降来说是致命的,因为振荡现象意味着有着众多“局部最优”;而局部最优明显不是我们想要的解,因为我们希望能够最终抵达“全局最优”。

逻辑回归的 Cost

公式:
J ( w ⃗ , b ) = 1 m ∑ i = 0 m − 1 [ l o s s ( f w ⃗ , b ( x ( i ) ) , y ( i ) ) ] J(\vec{w},b)=\frac 1 m \sum ^{m-1} _{i=0} [loss(f_{\vec{w},b}(x^{(i)}),y^{(i)})] J(w ,b)=m1i=0m1[loss(fw ,b(x(i)),y(i))]

代码:

def compute_cost_logistic(X, y, w, b):

    m = X.shape[0]
    cost = 0.0
    for i in range(m):
        z_i = np.dot(X[i],w) + b
        f_wb_i = sigmoid(z_i)
        cost +=  -y[i]*np.log(f_wb_i) - (1-y[i])*np.log(1-f_wb_i)
             
    cost = cost / m
    return cost
def sigmoid(z):

	f_wb = 1/(1 + np.exp(-z))
	return f_wb 

逻辑回归的梯度下降

总公式

公式:
repeat until convergence:    {        w j = w j − α ∂ J ( w ⃗ , b ) ∂ w j    for j := 0..n-1            b = b − α ∂ J ( w ⃗ , b ) ∂ b } \begin{align*} &\text{repeat until convergence:} \; \lbrace \\ & \; \; \;w_j = w_j - \alpha \frac{\partial J(\vec{w},b)}{\partial w_j} \; & \text{for j := 0..n-1} \\ & \; \; \; \; \;b = b - \alpha \frac{\partial J(\vec{w},b)}{\partial b} \\ &\rbrace \end{align*} repeat until convergence:{wj=wjαwjJ(w ,b)b=bαbJ(w ,b)}for j := 0..n-1

其中:
∂ J ( w ⃗ , b ) ∂ w j = 1 m ∑ i = 0 m − 1 ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) x j ( i ) ∂ J ( w ⃗ , b ) ∂ b = 1 m ∑ i = 0 m − 1 ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) \frac {\partial J(\vec{w},b)} {\partial w_j} = \frac 1 m \sum ^{m-1} _{i=0} (f_{\vec{w},b}(\vec{x}^{(i)})-y^{(i)})x_j^{(i)} \\ \frac {\partial J(\vec{w},b)} {\partial b} = \frac 1 m \sum ^{m-1} _{i=0} (f_{\vec{w},b}(\vec{x}^{(i)})-y^{(i)}) wjJ(w ,b)=m1i=0m1(fw ,b(x (i))y(i))xj(i)bJ(w ,b)=m1i=0m1(fw ,b(x (i))y(i))

推导公式

已知:
l o s s ( f w ⃗ , b ( x ⃗ ( i ) ) , y ( i ) ) = − y ( i ) l o g ( f w ⃗ , b ( x ⃗ ( i ) ) ) − ( 1 − y ( i ) ) l o g ( 1 − f w ⃗ , b ( x ⃗ ( i ) ) ) loss(f_{\vec{w},b}(\vec{x}^{(i)}),y^{(i)}) = -y^{(i)}log(f_{\vec{w},b}(\vec{x}^{(i)}))-(1-y^{(i)})log(1-f_{\vec{w},b}(\vec{x}^{(i)}))\\ loss(fw ,b(x (i)),y(i))=y(i)log(fw ,b(x (i)))(1y(i))log(1fw ,b(x (i))) J ( w ⃗ , b ) = 1 m ∑ i = 0 m − 1 [ l o s s ( f w ⃗ , b ( x ⃗ ( i ) ) , y ( i ) ) ] = − 1 m ∑ i = 1 m − 1 [ ( y ( i ) l o g ( f w ⃗ , b ( x ⃗ ( i ) ) ) + ( 1 − y ( i ) ) l o g ( 1 − f w ⃗ , b ( x ⃗ ( i ) ) ) ) ] J(\vec{w},b)=\frac 1 m \sum ^{m-1} _{i=0}[loss(f_{\vec{w},b}(\vec{x}^{(i)}),y^{(i)})] \\ =-\frac 1 m \sum ^{m-1} _{i=1}[(y^{(i)}log(f_{\vec{w},b}(\vec{x}^{(i)}))+(1-y^{(i)})log(1-f_{\vec{w},b}(\vec{x}^{(i)})))] J(w ,b)=m1i=0m1[loss(fw ,b(x (i)),y(i))]=m1i=1m1[(y(i)log(fw ,b(x (i)))+(1y(i))log(1fw ,b(x (i))))]
对损失函数中第一项目 y ( i ) l o g ( f w ⃗ , b ( x ⃗ ( i ) ) ) y^{(i)}log(f_{\vec{w},b}(\vec{x}^{(i)})) y(i)log(fw ,b(x (i))),根据求导法则,有:
∂ ∂ w j ( y ( i ) l o g ( f w ⃗ , b ( x ⃗ ( i ) ) ) ) = y ( i ) f w ⃗ , b ( x ⃗ ( i ) ) ∂ ∂ w j ( f w ⃗ , b ( x ( i ) ) ) \frac{\partial} {\partial w_j}(y^{(i)}log(f_{\vec{w},b}(\vec{x}^{(i)})))= \frac {y^{(i)}} {f_{\vec{w},b}(\vec{x}^{(i)})} \frac {\partial} {\partial w_j}(f_{\vec{w},b}(x^{(i)})) wj(y(i)log(fw ,b(x (i))))=fw ,b(x (i))y(i)wj(fw ,b(x(i))) f w ⃗ , b ( x ( i ) ) = 1 1 + e w ⃗ x ⃗ + b f_{\vec{w},b}(x^{(i)})=\frac {1} {1+e^{\vec{w}\vec{x}+b}} fw ,b(x(i))=1+ew x +b1 ∂ ∂ w j ( f w ⃗ , b ( x ( i ) ) ) = ∂ ∂ w j u ( − 1 ) = − u ( − 2 ) ∂ u ∂ w j = − 1 ( 1 + e w ⃗ x ⃗ + b ) 2 ∂ ∂ w j ( 1 + e w ⃗ x ⃗ + b ) = . . . \frac {\partial} {\partial w_j}(f_{\vec{w},b}(x^{(i)})) = \frac {\partial} {\partial w_j}u^{(-1)}=-u^{(-2)}\frac {\partial u} {\partial w_j}=-\frac {1} {(1+e^{\vec{w}\vec{x}+b})^2} \frac {\partial} {\partial w_j}(1+e^{\vec{w}\vec{x}+b})=... wj(fw ,b(x(i)))=wju(1)=u(2)wju=(1+ew x +b)21wj(1+ew x +b)=... ∂ ∂ w j ( y ( i ) l o g ( f w ⃗ , b ( x ⃗ ( i ) ) ) ) = y ( i ) ( 1 − f w ⃗ , b ( x ⃗ ( i ) ) ) x j ( i ) ∂ ∂ w j ( ( 1 − y ( i ) ) l o g ( 1 − f w ⃗ , b ( x ⃗ ( i ) ) ) ) = − y ( i ) f w ⃗ , b ( x ⃗ ( i ) ) x j ( i ) \frac{\partial} {\partial w_j}(y^{(i)}log(f_{\vec{w},b}(\vec{x}^{(i)})))=y^{(i)}(1-f_{\vec{w},b}(\vec{x}^{(i)}))x_j^{(i)}\\ \frac{\partial} {\partial w_j}((1-y^{(i)})log(1-f_{\vec{w},b}(\vec{x}^{(i)})))=-y^{(i)}f_{\vec{w},b}(\vec{x}^{(i)})x_j^{(i)} wj(y(i)log(fw ,b(x (i))))=y(i)(1fw ,b(x (i)))xj(i)wj((1y(i))log(1fw ,b(x (i))))=y(i)fw ,b(x (i))xj(i)
最终得到:
∂ J ( w ⃗ , b ) ∂ w j = 1 m ∑ i = 0 m − 1 ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) x j ( i ) ∂ J ( w ⃗ , b ) ∂ b = 1 m ∑ i = 0 m − 1 ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) \frac {\partial J(\vec{w},b)} {\partial w_j} =\frac 1 m \sum ^{m-1} _{i=0} (f_{\vec{w},b}(\vec{x}^{(i)})-y^{(i)})x_j^{(i)} \\ \frac {\partial J(\vec{w},b)} {\partial b} = \frac 1 m \sum ^{m-1} _{i=0} (f_{\vec{w},b}(\vec{x}^{(i)})-y^{(i)}) wjJ(w ,b)=m1i=0m1(fw ,b(x (i))y(i))xj(i)bJ(w ,b)=m1i=0m1(fw ,b(x (i))y(i))

代码实现:
计算 ∂ J ∂ w j \frac {\partial J} {\partial w_j} wjJ, ∂ J ∂ b \frac {\partial J} {\partial b} bJ

def compute_gradient_logistic(X, y, w, b): 

    m,n = X.shape
    dj_dw = np.zeros((n,))
    dj_db = 0.

    for i in range(m):
        f_wb_i = sigmoid(np.dot(w,X[i]) + b)
        err_i  = f_wb_i - y[i]
        dj_dw = dj_dw + err_i * X[i]
        # for j in range(n):
            # dj_dw[j] = dj_dw[j] + err_i * X[i,j]
        dj_db = dj_db + err_i
    dj_dw = dj_dw/m
    dj_db = dj_db/m
        
    return dj_db, dj_dw  

梯度下降:

def gradient_descent(X, y, w_in, b_in, alpha, num_iters): 

    J_history = []
    w = copy.deepcopy(w_in)
    b = b_in
    
    for i in range(num_iters):
        dj_db, dj_dw = compute_gradient_logistic(X, y, w, b)   
        w = w - alpha * dj_dw               
        b = b - alpha * dj_db               
      
        if i<100000:
            J_history.append( compute_cost_logistic(X, y, w, b) )
        if i% math.ceil(num_iters / 10) == 0:
            print(f"Iteration {i:4d}: Cost {J_history[-1]}   ")
        
    return w, b, J_history

梯度下降动画效果展示

动画代码来源于 Ng. A. Machine Learning
请添加图片描述


Reference

Ng, A. (2017). Machine Learning [Coursera course]. Retrieved from https://www.coursera.org/learn/machine-learning/
Ng, A. (2017). Machine Learning [Coursera course]. Retrieved from https://www.coursera.org/learn/machine-learning/
Ng, A. (2017). Module 3: Gradient Descent Implementation [Video file]. Retrieved from https://www.coursera.org/learn/machine-learning/lecture/Ha1RP/gradient-descent-implementation

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

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

相关文章

ChatGPT研究报告:AIGC带来新一轮范式转移

本文约4000字&#xff0c;目标是快速建立AIGC知识体系&#xff0c;含有大量的计算专业名词&#xff0c;建议阅读同时扩展搜索。 一、行业现状 1、概念界定 区别于PGC与UGC不同的&#xff0c;AIGC是利用人工智能技术自动生成内容的新型生产方式。 2、数据模态 按照模态区分&a…

【计算机网络-网络层】路由选择协议

文章目录1 路由器与路由选择1.1 路由器1.2 路由表&#xff08;RIB 表&#xff09;1.2.1 路由表项1.2.2 动态路由1.2.3 静态路由1.2.4 直连路由1.3 转发表&#xff08;FIB 表&#xff09;1.4 自治系统 AS2 内部网关协议 IGP——路由信息协议 RIP2.1 RIP 规定2.2 RIP 的工作原理2…

GPT系列论文

目录 GPT 无监督预训练 有监督微调 如何将模型应用于下游任务&#xff1f; 试验结果 GPT-2 摘要 Introduction Approach 数据集&模型 试验结果 GPT-3 核心点 名词解释 few-shot做法图示 数据集 GPT 由无监督预训练有监督微调组成 无监督预训练 有监督微调 …

ICLR 2023 | 达摩院开源轻量人脸检测DamoFD

团队模型、论文、博文、直播合集&#xff0c;点击此处浏览 一、论文 本文介绍我们被机器学习顶级国际会议ICLR 2023接收的论文 “DamoFD: Digging into Backbone Design on Face Detection" 论文链接&#xff1a;https://openreview.net/pdf?idNkJOhtNKX91 开源代码&a…

云原生_kubernetes(k8s)介绍

目录 一、应用部署方式演变 二、k8s介绍 三、k8s的组件 四、k8s中的概念 五、k8s资源管理方式 1、命令式对象管理 2、命令式对象配置 3、声明式对象配置 一、应用部署方式演变 在部署应用程序的方式上&#xff0c;主要经历了三个时代&#xff1a; 1、物理机部署&#…

Vue 核心(一)

文章目录Vue 核心&#xff08;一&#xff09;一、 Vue 简介1、 概述2、 学前准备3、 第一个程序二、 模板语法三、 数据绑定四、 MVVM 模型五、 数据代理1、 defineProperty2、 理解数据代理3、 Vue中的数据代理六、 事件处理1、 事件的基本使用2、 键盘事件七、 计算属性与监视…

难以置信,已经有人用 ChatGPT 做 Excel 报表了?

要问2023年初科技领域什么最火&#xff0c;那自然是 ChatGPT。 ChatGPT 由人工智能研究实验室 OpenAI 于2022年11月30日推出。上线短短5天&#xff0c;用户数量已突破100万&#xff0c;在今年2月份&#xff0c;用户数量已经突破1亿。 ChatGPT 是一个超级智能聊天机器人&#…

GitLab CI/CD 新书发布,助企业降本增效

前言 大家好&#xff0c;我是CSDN的拿我格子衫来&#xff0c; 昨天我的第一本书《GitLab CI/CD 从入门到实战》上架啦&#xff0c;这是业内第一本详细讲解GitLab CI/CD的书籍。 历经无数个日夜&#xff0c;最终开花结果。感触良多&#xff0c;今天就借这篇文章来谈一谈这本书的…

贯穿设计模式第一话--单一职责原则

&#x1f973;&#x1f973;&#x1f973; 茫茫人海千千万万&#xff0c;感谢这一刻你看到了我的文章&#xff0c;感谢观赏&#xff0c;大家好呀&#xff0c;我是最爱吃鱼罐头&#xff0c;大家可以叫鱼罐头呦~&#x1f973;&#x1f973;&#x1f973; 从今天开始&#xff0c;将…

基于51单片机的智能婴儿看护床设计

需要源码及原理图文件请私信&#xff01;&#xff01;&#xff01;&#xff01; 基于51单片机的智能婴儿看护床设计1、引言2、功能设计系统结构框图3、系统硬件设计3.1声音电路的设计3.2语音播报电路的设计3.3独立按键电路的设计3.4模拟摇床&#xff08;步进电机驱动电路&#…

Springboot项目快速实现过滤器功能

前言很多时候&#xff0c;当你以为掌握了事实真相的时间&#xff0c;如果你能再深入一点&#xff0c;你可能会发现另外一些真相。比如面向切面编程的最佳编程实践是AOP&#xff0c;AOP的主要作用就是可以定义切入点&#xff0c;并在切入点纵向织入一些额外的统一操作&#xff0…

尚硅谷大数据技术Spark教程-笔记01【Spark(概述、快速上手、运行环境、运行架构)】

视频地址&#xff1a;尚硅谷大数据Spark教程从入门到精通_哔哩哔哩_bilibili 尚硅谷大数据技术Spark教程-笔记01【Spark(概述、快速上手、运行环境、运行架构)】尚硅谷大数据技术Spark教程-笔记02【SparkCore(核心编程、案例实操)】尚硅谷大数据技术Spark教程-笔记03【SparkSQL…

Scala之面向对象(2)

目录 单例对象&#xff08;伴生对象&#xff09;&#xff1a; 创建对象常用的两种方法&#xff1a; &#xff08;1&#xff09;使用构造器构造&#xff08;new&#xff09; &#xff08;2&#xff09;使用静态方法 伴生对象的定义&#xff1a; apply方法&#xff1a; app…

图像分割技术及经典实例分割网络Mask R-CNN(含基于Keras Python源码定义)

图像分割技术及经典实例分割网络Mask R-CNN&#xff08;含Python源码定义&#xff09; 文章目录图像分割技术及经典实例分割网络Mask R-CNN&#xff08;含Python源码定义&#xff09;1. 图像分割技术概述2. FCN与语义分割2.1 FCN简介2.2 反卷积2.2 FCN与语义分割的关系3. Mask …

Midjourney以图生图的详细教程(含6种案例介绍)

&#x1f3c6; 文章目标&#xff1a;学习并介绍Midjourney以图生图的详细教程 &#x1f340; Midjourney以图生图的详细教程 ✅ 创作者&#xff1a;熊猫Jay &#x1f389; 个人主页&#xff1a;Jay的个人主页 &#x1f341; 展望&#xff1a;若本篇讲解内容帮助到您&#xff0c…

SQL Server 单表数据查询

提示&#xff1a; 本篇文章详细介绍怎样向SQLServer中导入表格数据,导入之后根据不同的查询条件完成查询任务. 文章目录前言一、向SQL Server中导入数据二、例题1.查询所有学生的全部信息2.查询学生的学号和姓名3.查询所有学生的姓名和出生年4. 查询所有学生的姓名和出生年&…

【关于Linux中----生产消费模型】

文章目录一、生产消费模型1.1概念的引入1.2 321原则二、条件变量2.1概念的引入2.2理解条件变量2.3条件变量的使用三、基于BlockingQueue的生产者消费者模型3.1BlockingQueue的介绍3.2C queue模拟阻塞队列的生产消费模型3.3对生产消费任务的模拟封装四、遗留问题一、生产消费模型…

基于YOLOv5的水下海洋目标检测

摘要&#xff1a;水下海洋目标检测技术具有广泛的应用前景&#xff0c;可以用于海洋环境监测、海洋资源开发、海洋生物学研究等领域。本文提出了一种基于 YOLOv5 的水下海洋目标检测方法&#xff0c;使用数据增强方法进行了大量实验&#xff0c;并与其他方法进行了对比&#xf…

(SQL学习随笔3)SQL语法——SELECT语句

导航基本认识FROM关键字LIMIT与OFFSETORDER BYWHERE条件查询单值比较多条件组合范围筛选空值匹配LIKE通配条件分组运算符和函数数据变换分组运算表连接内连接左(右)外连接全外连接外键约束窗口函数UNION&#xff1a;表上下拼接子查询条件判断PostgreSQLMySQL基本认识 SELECT t…

【论文阅读】BiSeNet V2用于实时语义分割的双边网络

前言BiSeNet V2延续了v1版本的双边结构&#xff0c;分别处理空间细节信息、高层语义信息。同时设计更简洁高效的结构&#xff0c;进行特征提取&#xff0c;实现高精度和高速度。在训练模型时&#xff0c;使用了增强训练策略 &#xff0c;添加多个辅助训练分支来促进不同浅层网络…