【机器学习 - 6】:梯度下降法(第一篇)

news2024/11/23 20:50:30

文章目录

  • 梯度下降法的理解
    • 图解
    • 极值点和最值点
  • 梯度下降法的求导运算
    • 公式推导
  • 梯度下降法的实现

梯度下降法的理解


梯度下降法不是一个机器学习算法,既不是在做监督学习,也不是在做非监督学习,是一种基于搜索的最优化方法。

作用:最小化一个损失函数
梯度上升法:最大化一个损失函数

图解

  1. 先给出一个损失函数J,在二维平面中画出的曲线如下图所示。蓝点处画的一条直线是在这一点上的导数,为负值,当theta增大,导数增大,在最低处导数为0,即为极值点,为极小值。
    在这里插入图片描述
  2. 由上图可看出,曲线向下凹陷,可将曲线比作一个山谷,蓝点为一个球,球滚落的速度为eta(学习率),在蓝点处,theta变化相同的值时,步长会逐渐变小,因为eta逐渐变小。
    在这里插入图片描述
  3. eta叫做学习率(learning rate),是梯度下降法的一个超参数。eta的取值影响我们求得最优解的速度,eta的取值过小,收留太慢,eta取值过大,可能甚至得不到最优解。
    在这里插入图片描述
    在这里插入图片描述

极值点和最值点

并不是所有的函数都有唯一的极值点,线性回归的损失函数具有唯一的最优解。
在这里插入图片描述

梯度下降法的求导运算


以上主要是以一个维度进行讲解,当在多维时求损失函数,其求法如下。在这里插入图片描述

公式推导

  1. 我们的主要目标是使损失函数达到最小,于是我们可以通过公式的推导,得出最终的公式。
    在这里插入图片描述
  2. 对损失函数进行求导,并列为矩阵形式。
    在这里插入图片描述
  3. 为什么要除以m?因为求和运算后本身会对数据做一个扩大的处理,有可能在我们特征数量增大的时候,求得的导数结果变得比较厉害,而求导后我们希望得到的数据跟原来的数据有很大的关系,所以要除以m。
    在这里插入图片描述

梯度下降法的实现

  1. 先创建一个损失函数
import numpy as np
import matplotlib.pyplot as plt

plt_x = np.linspace(-1,6,141)
plt_y = (plt_x-2.5)**2-1
plt.plot(plt_x, plt_y)
plt.show()

在这里插入图片描述

  1. 写出求导函数和求值函数
def dj(theta):
    return 2*(theta-2.5) # 传入theta,求theta点对应的导数

def j(theta):
    return (theta-2.5)**2-1 # 传入theta,求theta点对应的值
  1. 找到极值点,获得对应的theta值
eta = 0.1 # 设置学习率
theta = 0.0
epsilon = 1e-8
theta_history = [theta] # 存储移动步数
while True:
    gradient = dj(theta) # 求导数
    last_theta = theta
    theta = theta - gradient*eta # theta减去步长
    theta_history.append(theta)
    if np.abs(j(theta) - j(last_theta)) < epsilon: # 小于epsilon认为到达极值点
        break
print(theta)
print(dj(theta))
print(j(theta))
print(len(theta_history))

在这里插入图片描述

  1. 在损失函数的曲线上画出移动的轨迹
plt.plot(plt_x, plt_y)
plt.plot(theta_history, [(i-2.5)**2-1 for i in theta_history], color='r', marker='+')
plt.show()

在这里插入图片描述

  1. 对以上程序进行函数封装
def gradient_descent(eta, initial_theta, n_iters=1e3, epsilon=1e-8): # n_iters为最大迭代次数
    theta = initial_theta
    theta_history = [initial_theta]
    i_iter = 1
    def dj(theta):
        try:
            return 2*(theta-2.5) # 传入theta,求theta点对应的导数
        except:
            return float('inf') # 返回一个无穷大的值
    def j(theta):
        return (theta-2.5)**2-1 # 传入theta,求theta点对应的值
    
    while i_iter<n_iters:
        gradient = dj(theta)
        last_theta = theta
        theta = theta - gradient*eta
        theta_history.append(theta)
        if np.abs(j(theta) - j(last_theta)) < epsilon:
            break
        i_iter += 1
    return theta_history

def plot_gradient(theta_history):
    plt.plot(plt_x, plt_y)
    plt.plot(theta_history, [(i-2.5)**2-1 for i in theta_history], color='r', marker='+')
    plt.show()

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

【2319. 判断矩阵是否是一个 X 矩阵】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 如果一个正方形矩阵满足下述 全部 条件&#xff0c;则称之为一个 X 矩阵 &#xff1a; 矩阵对角线上的所有元素都 不是 0 矩阵中所有其他元素都是 0 给你一个大小为 n x n 的二维整数数组 grid &a…

JVM虚拟机知识总结

什么是虚拟机&#xff1f;从字面意思上来看&#xff0c;顾名思义即使一台虚拟的计算机&#xff0c;用来执行虚拟的计算机指令&#xff0c;从大体上来看&#xff0c;虚拟机一般分为两种。一种是系统虚拟机&#xff0c;另外一种是程序虚拟机。系统虚拟机&#xff1a;代表为VMware…

微信小程序 java中医知识库百科科普

中管理员的主要功能有&#xff1a; 1.管理员输入账户登陆后台 2.个人中心&#xff1a;管理员修改密码和账户信息 3.用户管理&#xff1a;对注册的用户信息进行删除&#xff0c;查询&#xff0c;添加&#xff0c;修改 4.中医知识管理&#xff1a;对中医的知识信息进行添加&#…

什么是地址解析协议 (ARP)?

最近不想更文章了&#xff0c;药吃完了&#xff0c; 本文目录地址解析协议 &#xff08;ARP&#xff09; 含义ARP 是做什么的&#xff0c;它是如何工作的&#xff1f;地址解析协议与 DHCP 和 DNS 的关系是什么&#xff1f;它们有何不同&#xff1f;ARP 有哪些类型&#xff1f;1…

应急救护培训报名-因疫情原因,暂停开班?

应急救护培训报名背景和急救证书区别2023年一定要被培训项目报名渠道状态上海市红十字应急救护培训上海市医疗急救中心公众课程专业课程背景和急救证书区别 关于背景和急救证书区别&#xff0c;请参考&#xff0c;程序员的生命与急救 文章 2023年一定要被培训项目 由于疫情原…

Springboot+vue冷冻仓储进销存管理系统 java

端技术&#xff1a;nodejsvueelementui 前端&#xff1a;HTML5,CSS3、JavaScript、VUE 系统分为不同的层次&#xff1a;视图层&#xff08;vue页面&#xff09;&#xff0c;表现层&#xff08;控制器类&#xff09;&#xff0c;业务层&#xff08;接口类&#xff09;和持久层&a…

php宝塔搭建部署实战易优游戏竞技公司网站源码

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。 本期给大家带来一套php开发的易优游戏竞技公司网站源码&#xff0c;感兴趣的朋友可以自行下载学习。 技术架构 PHP7.2 nginx mysql5.7 JS CSS HTMLcnetos7以上 宝塔面板 文字搭建教程 下载源码&#xff…

SpringBoot或SpringCloud集成Nacos

一、创建一个项目首先创建一个空项目&#xff0c;然后引入Nacos的依赖&#xff0c;并选择正确的SpringBoot和Nacos版本&#xff0c;如果版本选择不对的话可能会启动失败&#xff0c;带来很大的问题<!--SpringBoot的版本--><parent><groupId>org.springframew…

详解axios(快速入门)

axios这一篇就够啦~axios1、axios的理解和使用1.1 axios概述1.2 axios特点1.3 axios常用语法1.4 难点语法的理解和使用2、axios源码分析2.1 源码目录结构2.2 源码分析axios 1、axios的理解和使用 1.1 axios概述 前端最流行的ajax请求库 react/vue官方都推荐使用axios 发ajax…

推荐系统与深度学习关联

6.1 推荐系统与深度学习关联 学习目标 目标 无应用 无 6.1.1 深度学习到推荐系统 深度学习发展成功与局限 最近几年深度学习的流行&#xff0c;大家一般认为是从2012年 AlexNet 在图像识别领域的成功作为一个里程碑。AlexNet 提升了整个业界对机器学习的接受程度&#xff1…

如果把小程序业务和研发管理都放到一个平台

伴随着互联网在中国进程的发展&#xff0c;线上研发效能及业务应用软件也不落后于时代进步的脚步&#xff0c;中国软件行业从未停止过持续的创新。 2022年&#xff0c;业务应用开发正在简化&#xff0c;研发效能也在提升&#xff0c;其中不得不提软件在协同促进、研发一体化管…

MyBatis 一级二级缓存【学习记录】

一级缓存 1&#xff09;首先做个测试&#xff0c;创建一个mapper配置文件和mapper接口&#xff0c;我这里用了最简单的查询来演示。 <mapper namespace"cn.elinzhou.mybatisTest.mapper.UserMapper"><select id"findUsers" resultType"cn.…

Linux关于执行文件路径的变量:$PATH

目录 前言 环境变量PATH 问题思考 总结 前言 Linux目录的配置都是依据FHS&#xff0c;FHS的标准文件指出&#xff0c;它们的主要目的是希望让用户可以了解到已安装软件通常放置于哪个目录下。也就是说&#xff0c;FHS的重点在于规范每个特定的目录下应该要放置什么样子的数…

Docker搭建私有仓库

搭建私有仓库 参考地址&#xff1a;搭建私有仓库 安装运行 docker-registry 查看docker存储路径与对应路径下的大小 docker info | grep Dir查看对应路径下的大小 du -sh /var/lib/docker如果大小没有问题的话就可以直接安装了 拉取registry镜像并运行 docker run -d \-…

数据库常用语句练习总结

show databases; 显示数据库 use student; 使用该数据库 3.show full columns from student; 展示数据库所有的字段 show columns from student; 展示数据库添加的字段 alter table student change column Sname Snames char(200); 添加 student表中的字段 alter tabl…

手写智能识别:SmartZoneOCR/SmartZoneICR Crack

Accusoft.SmartZoneOCR/Accusoft.SmartZoneICR 智能区 OCR/ICR 在您的应用程序中使用自动区域数据捕获技术消除手动数据输入。 概述 使用我们强大的 ICR 和 OCR SDK 改进字符识别。 SmartZone 先进的区域字符识别技术允许您从文档图像中的指定字段捕获打字 (OCR) 或手写 (ICR)…

24种设计模式之单例模式(饿汉式、懒汉式)

一、单例模式单例模式( Singleton Pattern &#xff09;是指确保一个类在任何情况下都绝对只有一个实例&#xff0c;并提供一个全局访问点。单例模式是创建型模式。单例模式在现实生活中应用也非常广泛&#xff0c;例如,总统&#xff0c;班主任等。J2EE标准中的ServletContext …

反对称矩阵乘任意矩阵满足交换性?

看论文的时候有疑惑 R˙R[ω]\dot{\mathbf{R}}\mathbf{R}[\omega]_{\times}R˙R[ω]​ R˙[ω]R\dot{\mathbf{R}}[\omega]_{\times}\mathbf{R}R˙[ω]​R 难道反对称矩阵乘任意矩阵满足交换性&#xff1f; 在maple里面验证一下吧&#xff1a; 很明显是不一样的&#xff0c;一…

字节二面:100Wqps短链系统,如何设计?

前段时间&#xff0c;社群小伙伴&#xff0c;在交流一个字节的二面真题&#xff1a; 100Wqps短链系统&#xff0c;怎么设计&#xff1f; 这道题&#xff0c;看上去业务简单&#xff0c;其实&#xff0c;覆盖的知识点非常多&#xff1a; 高并发、高性能分布式 IDRedis Bloom …

考虑电动汽车灵活性的微网多时间尺度协调调度研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…