机器学习 - 梯度下降在多参数线性回归模型的应用以及解析

我们通过一个具体的例子来演示多变量线性回归中的梯度下降算法。

示例数据集

假设我们有一个简单的数据集,包含两个特征和一个目标值:

(x_1)(x_2)(y)
125
238
3411
4514

我们要训练一个线性回归模型,模型的形式为:
f w , b ( x ) = w 1 ⋅ x 1 + w 2 ⋅ x 2 + b f_{w,b}(x) = w_1 \cdot x_1 + w_2 \cdot x_2 + b fw,b(x)=w1x1+w2x2+b

梯度下降步骤

我们从随机初始化的参数 w 1 w_1 w1 w 2 w_2 w2 b b b 开始,然后通过梯度下降算法迭代地更新这些参数。

初始化

假设:

  • 初始权重 w 1 = 0 w_1 = 0 w1=0 w 2 = 0 w_2 = 0 w2=0
  • 初始偏置 b = 0 b = 0 b=0
  • 学习率 α = 0.01 \alpha = 0.01 α=0.01
  • 迭代次数为 2 次(为了简洁)

计算梯度

我们需要计算每个参数的偏导数,并用这些偏导数来更新参数。

第一次迭代

计算偏导数
  1. 计算预测值和误差:
    预测值 f w , b ( x ( i ) ) = w 1 ⋅ x 1 ( i ) + w 2 ⋅ x 2 ( i ) + b \text{预测值} \quad f_{w,b}(x^{(i)}) = w_1 \cdot x_1^{(i)} + w_2 \cdot x_2^{(i)} + b 预测值fw,b(x(i))=w1x1(i)+w2x2(i)+b
    对于每个样本,我们计算预测值和误差:

    • 对于第一个样本 (1, 2, 5):
      f w , b ( x ( 1 ) ) = 0 ⋅ 1 + 0 ⋅ 2 + 0 = 0 误差 = 0 − 5 = − 5 f_{w,b}(x^{(1)}) = 0 \cdot 1 + 0 \cdot 2 + 0 = 0 \\ \text{误差} \quad = 0 - 5 = -5 fw,b(x(1))=01+02+0=0误差=05=5
    • 对于第二个样本 (2, 3, 8):
      f w , b ( x ( 2 ) ) = 0 ⋅ 2 + 0 ⋅ 3 + 0 = 0 误差 = 0 − 8 = − 8 f_{w,b}(x^{(2)}) = 0 \cdot 2 + 0 \cdot 3 + 0 = 0 \\ \text{误差} \quad = 0 - 8 = -8 fw,b(x(2))=02+03+0=0误差=08=8
    • 对于第三个样本 (3, 4, 11):
      f w , b ( x ( 3 ) ) = 0 ⋅ 3 + 0 ⋅ 4 + 0 = 0 误差 = 0 − 11 = − 11 f_{w,b}(x^{(3)}) = 0 \cdot 3 + 0 \cdot 4 + 0 = 0 \\ \text{误差} \quad = 0 - 11 = -11 fw,b(x(3))=03+04+0=0误差=011=11
    • 对于第四个样本 (4, 5, 14):
      f w , b ( x ( 4 ) ) = 0 ⋅ 4 + 0 ⋅ 5 + 0 = 0 误差 = 0 − 14 = − 14 f_{w,b}(x^{(4)}) = 0 \cdot 4 + 0 \cdot 5 + 0 = 0 \\ \text{误差} \quad = 0 - 14 = -14 fw,b(x(4))=04+05+0=0误差=014=14
  2. 计算梯度:
    ∂ J ∂ w 1 = 1 m ∑ i = 1 m ( f w , b ( x ( i ) ) − y ( i ) ) ⋅ x 1 ( i ) ∂ J ∂ w 2 = 1 m ∑ i = 1 m ( f w , b ( x ( i ) ) − y ( i ) ) ⋅ x 2 ( i ) ∂ J ∂ b = 1 m ∑ i = 1 m ( f w , b ( x ( i ) ) − y ( i ) ) \frac{\partial J}{\partial w_1} = \frac{1}{m} \sum_{i=1}^{m} (f_{w,b}(x^{(i)}) - y^{(i)}) \cdot x_1^{(i)} \\ \frac{\partial J}{\partial w_2} = \frac{1}{m} \sum_{i=1}^{m} (f_{w,b}(x^{(i)}) - y^{(i)}) \cdot x_2^{(i)} \\ \frac{\partial J}{\partial b} = \frac{1}{m} \sum_{i=1}^{m} (f_{w,b}(x^{(i)}) - y^{(i)}) w1J=m1i=1m(fw,b(x(i))y(i))x1(i)w2J=m1i=1m(fw,b(x(i))y(i))x2(i)bJ=m1i=1m(fw,b(x(i))y(i))

    我们计算每个参数的梯度:

    • 对于 w 1 w_1 w1:
      ∂ J ∂ w 1 = 1 4 [ ( − 5 ) ⋅ 1 + ( − 8 ) ⋅ 2 + ( − 11 ) ⋅ 3 + ( − 14 ) ⋅ 4 ] = 1 4 ( − 5 − 16 − 33 − 56 ) = 1 4 ( − 110 ) = − 27.5 \frac{\partial J}{\partial w_1} = \frac{1}{4} [(-5) \cdot 1 + (-8) \cdot 2 + (-11) \cdot 3 + (-14) \cdot 4] \\ = \frac{1}{4} (-5 - 16 - 33 - 56) \\ = \frac{1}{4} (-110) \\ = -27.5 w1J=41[(5)1+(8)2+(11)3+(14)4]=41(5163356)=41(110)=27.5
    • 对于 w 2 w_2 w2:
      ∂ J ∂ w 2 = 1 4 [ ( − 5 ) ⋅ 2 + ( − 8 ) ⋅ 3 + ( − 11 ) ⋅ 4 + ( − 14 ) ⋅ 5 ] = 1 4 ( − 10 − 24 − 44 − 70 ) = 1 4 ( − 148 ) = − 37 \frac{\partial J}{\partial w_2} = \frac{1}{4} [(-5) \cdot 2 + (-8) \cdot 3 + (-11) \cdot 4 + (-14) \cdot 5] \\ = \frac{1}{4} (-10 - 24 - 44 - 70) \\ = \frac{1}{4} (-148) \\ = -37 w2J=41[(5)2+(8)3+(11)4+(14)5]=41(10244470)=41(148)=37
    • 对于 b b b:
      ∂ J ∂ b = 1 4 ( − 5 − 8 − 11 − 14 ) = 1 4 ( − 38 ) = − 9.5 \frac{\partial J}{\partial b} = \frac{1}{4} (-5 - 8 - 11 - 14) \\ = \frac{1}{4} (-38) \\ = -9.5 bJ=41(581114)=41(38)=9.5
  3. 更新参数:
    w 1 = w 1 − α ∂ J ∂ w 1 = 0 − 0.01 ( − 27.5 ) = 0.275 w 2 = w 2 − α ∂ J ∂ w 2 = 0 − 0.01 ( − 37 ) = 0.37 b = b − α ∂ J ∂ b = 0 − 0.01 ( − 9.5 ) = 0.095 w_1 = w_1 - \alpha \frac{\partial J}{\partial w_1} = 0 - 0.01 (-27.5) = 0.275 \\ w_2 = w_2 - \alpha \frac{\partial J}{\partial w_2} = 0 - 0.01 (-37) = 0.37 \\ b = b - \alpha \frac{\partial J}{\partial b} = 0 - 0.01 (-9.5) = 0.095 w1=w1αw1J=00.01(27.5)=0.275w2=w2αw2J=00.01(37)=0.37b=bαbJ=00.01(9.5)=0.095

第二次迭代

重复上述步骤,以更新后的参数 w 1 w_1 w1 w 2 w_2 w2 b b b继续计算新的梯度,并更新参数。以下是简略的计算过程:

  1. 计算预测值和误差:

    • 对于第一个样本 (1, 2, 5):
      f w , b ( x ( 1 ) ) = 0.275 ⋅ 1 + 0.37 ⋅ 2 + 0.095 = 1.11 误差 = 1.11 − 5 = − 3.89 f_{w,b}(x^{(1)}) = 0.275 \cdot 1 + 0.37 \cdot 2 + 0.095 = 1.11 \\ \text{误差} = 1.11 - 5 = -3.89 fw,b(x(1))=0.2751+0.372+0.095=1.11误差=1.115=3.89
    • 其他样本类似计算。
  2. 计算梯度:

    • 对于 w 1 w_1 w1:
      ∂ J ∂ w 1 ≈ − 21.23 \frac{\partial J}{\partial w_1} \approx -21.23 w1J21.23
    • 对于 w 2 w_2 w2:
      ∂ J ∂ w 2 ≈ − 28.74 \frac{\partial J}{\partial w_2} \approx -28.74 w2J28.74
    • 对于 b b b:
      ∂ J ∂ b ≈ − 6.83 \frac{\partial J}{\partial b} \approx -6.83 bJ6.83
  3. 更新参数:
    w 1 = 0.275 − 0.01 ( − 21.23 ) = 0.4873 w 2 = 0.37 − 0.01 ( − 28.74 ) = 0.6574 b = 0.095 − 0.01 ( − 6.83 ) = 0.1633 w_1 = 0.275 - 0.01 (-21.23) = 0.4873 \\ w_2 = 0.37 - 0.01 (-28.74) = 0.6574 \\ b = 0.095 - 0.01 (-6.83) = 0.1633 w1=0.2750.01(21.23)=0.4873w2=0.370.01(28.74)=0.6574b=0.0950.01(6.83)=0.1633

代码实现

def compute_gradient(X, y, w, b):
    m, n = X.shape
    dj_dw = np.zeros(n)
    dj_db = 0.0
    
    for i in range(m):
        error = (np.dot(X[i], w) + b) - y[i]
        for j in range(n):
            dj_dw[j] += error * X[i][j]
        dj_db += error
    
    dj_dw /= m
    dj_db /= m
    
    return dj_dw, dj_db

def gradient_descent(X, y, w, b, alpha, num_iters):
    for i in range(num_iters):
        dj_dw, dj_db = compute_gradient(X, y, w, b)
        w -= alpha * dj_dw
        b -= alpha * dj_db
    
    return w, b

总结

通过以上的迭代过程,我们逐步更新参数 w 1 w_1 w1 w 2 w_2 w2 b b b,使得模型的预测值更加接近目标值。实际中,这个过程通常会重复多次,直到参数收敛。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024 vue3入门教程:01vscode终端命令创建第一个vue项目

参考vue官网手册:https://cn.vuejs.org/guide/quick-start.html 一、找个盘符,新建文件夹存储以后得vue项目 我的是e盘下创建了vueproject 二、使用vscode打开存储vue项目的文件夹 因为我生成过项目,所以有文件,你们初次是没有…

【第五节】C/C++数据结构之图

目录 一、图的基本概念 1.1 图的定义 1.2 图的其他术语概念 二、图的存储结构 2.1 邻接矩阵 2.2 邻接表 三、图的遍历 3.1 广度优先遍历 3.2 深度优先遍历 四、最小生成树 4.1 最小生成树获取策略 4.2 Kruskal算法 4.3 Prim算法 五、最短路径问题 5.1 Dijkstra算…

WPF----自定义滚动条ScrollViewer

滚动条是项目当中经常用到的一个控件&#xff0c;大部分对外项目都有外观的需求&#xff0c;因此需要自定义&#xff0c;文中主要是针对一段动态的状态数据进行展示&#xff0c;并保证数据始终在最新一条&#xff0c;就是需要滚动条滚动到底部。 1&#xff0c;xaml中引入 <…

【大模型系列】Language-Vision Transformer(LaVIT, ICLR2024)

Title&#xff1a;Unified Language-Vision Pretraining in LLM with Dynamic Discrete Visual TokenizationPaper&#xff1a;https://arxiv.org/abs/2309.04669Github&#xff1a;https://github.com/jy0205/LaVITAuthor&#xff1a;Yang Jin&#xff0c; 北大&#xff0c;快…

Android Native 客户端属性配置系统使用说明

Android Native 客户端属性配置系统使用说明 背景和问题现代 android 开发基本都基于 gradle 属性设置来进行定制化编译,随着项目的迭代,工程结构越发复杂,配置属性越来越多,越来越多的配置使得上手难度越来越大。 解决方案设计一般而言,在 android 开发中,Gradle 属性系…

141个图表,完美展示数据分类别关系!

本文介绍使用Python工具seaborn详细实现分类关系图表&#xff0c;包含8类图141个代码模版。 分类关系图表用于展示数字变量和一个或多个分类变量之间的关系&#xff0c;可以进一步分为&#xff1a;箱形图&#xff08;box plot&#xff09;、增强箱形图&#xff08;enhanced bo…

阿里云物联网应用层开发:第二部分,云产品流转

文章目录 1、云产品流转概述2、我们需要创建多少个云产品流转&#xff1f;3、阿里云物联网平台产品云流转实现3-1 创建数据源3-2 创建数据目的3-2 创建解析器,并关联数据、编写脚本 1、云产品流转概述 云产品流转可以看成是一个转发的功能&#xff0c;阿里云官方的解释是&…

【操作与配置】Xshell安装使用

Xshell是一款功能强大的远程管理工具&#xff0c;主要用于通过SSH&#xff08;Secure Shell&#xff09;、TELNET等协议连接和管理远程服务器。它支持多种会话管理、脚本编写、端口转发等功能&#xff0c;适合系统管理员和开发者使用。 安装 官网下载&#xff1a;家庭/学校免费…

linux企业级CDN/100万并发架构设计/企业故障案例、网站优化架构原则

高薪思想&#xff1a;财富来源于信息差 什么是cdn&#xff1f; cdn全称是contenct delivery network内容分发网络 cdn是一套分布式&#xff0c;缓存&#xff0c;集群&#xff0c;范围可以是全球或全国&#xff0c;运行的实质是通过智能DNS获取用户的来源地域以及上网线路 为…

13_网络安全

目录 网络安全协议 网络安全协议 PGP协议 网络安全技术 防火墙技术 入侵检测系统 入侵防御系统 杀毒软件 蜜罐系统 计算机病毒与木马 网络安全协议 网络安全协议 物理层主要使用物理手段隔离、屏蔽物理设备等&#xff0c;其他层都是靠协议来保证传输的安全&#xff…

【C++】内存分区

目录 内存分区代码运行前后区别各分区详细解释C内存申请和释放 内存分区 不同的操作系统对程序内存的管理和划分会有所不同。 此处是C内存区域划分主要是针对通用的情况&#xff0c;并不限定在某个特定操作系统上 一般分为4个区&#xff08;有时把全局区拆分成数据区未初始化…

Go线程调度器

基本结构 字段gcwaiting、stopwait和stopnoted都是串行运行时任务执行前后的辅助协调手段 gcwaiting字段的值用于表示是否需要停止调度 在停止调度前&#xff0c;该值会被设置为1在恢复调度之前&#xff0c;该值会被设置为0这样做的作用是&#xff0c;一些调度任务在执行时只…

阿里云智能编程助手的安装使用

https://help.aliyun.com/document_detail/2590613.html 通义灵码&#xff0c;是阿里云出品的一款基于通义大模型的智能编码辅助工具&#xff0c;提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码优化、注释生成、代码解释、研发智能问答、异常报错排查等能力&a…

企业互联网建站源码系统 附带完整的安装代码包以及搭建部署教程

系统概述 企业互联网建站源码吸系统是一款集众多先进功能于一身的建站工具。它提供了丰富的模板和组件&#xff0c;允许企业根据自身需求和品牌形象进行个性化定制&#xff0c;快速搭建出具有独特风格的网站。 代码示例 系统特色功能一览 1.用户友好界面&#xff1a;系统采用…

24 年程序员各岗位薪资待遇汇总(最新)

大家好&#xff0c;我是程序员鱼皮。今天分享 24 年 6 月最新的程序员各岗位薪资待遇汇总。 数据是从哪儿来的呢&#xff1f;其实很简单&#xff0c;BOSS 直聘上有一个免费的薪酬查询工具&#xff0c;只要认证成为招聘者就能直接看&#xff0c;便于招聘者了解市场&#xff0c;…

网络安全 文件上传漏洞-20 第二十关 Pass-20

点击进入第二十关&#xff0c;并选择显示代码&#xff1a; $is_upload false; $msg null; if(!empty($_FILES[upload_file])){//检查MIME$allow_type array(image/jpeg,image/png,image/gif);if(!in_array($_FILES[upload_file][type],$allow_type)){$msg "禁止上传该…

Langchain-实战篇-搭建本地问答机器人-01

项目背景 在这个快节奏的职场世界里&#xff0c;我们每个人都可能在某个时刻&#xff0c;化身为一头辛勤的牛或一匹奔腾的马&#xff0c;面对入职签合同时的迷茫&#xff0c;或是离职时的纠纷&#xff0c;心中难免会涌现出各种疑问。比如&#xff1a; "这份合同里的条款…

Mongodb集群中的分布式读写

学习mongodb&#xff0c;体会mongodb的每一个使用细节&#xff0c;欢迎阅读威赞的文章。这是威赞发布的第81篇mongodb技术文章&#xff0c;欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题&#xff0c;欢迎在文章下面点个赞&#xff0c;或者关…

百元蓝牙耳机推荐2024,百元蓝牙耳机排行榜盘点

在2024年面对琳琅满目的蓝牙耳机选项&#xff0c;消费者往往难以抉择&#xff0c;特别是在预算有限的情况下&#xff0c;如何在众多产品中挑选出既满足质量又符合预算的耳机成为了一个不小的挑战。 为了帮助大家在繁多的选择中找到真正物有所值的百元蓝牙耳机&#xff0c;我们…

vue响应式原理细节分享

在讲解之前&#xff0c;我们先了解一下数据响应式是什么&#xff1f;所谓数据响应式就是建立响应式数据与依赖&#xff08;调用了响应式数据的操作&#xff09;之间的关系&#xff0c;当响应式数据发生变化时&#xff0c;可以通知那些使用了这些响应式数据的依赖操作进行相关更…