吴恩达machine-learning-specialization2022第1周的optional lab

news/2024/5/16 3:51:46/文章来源:https://blog.csdn.net/sdhdsf132452/article/details/127147043

1. 使用python和numpy实现一个线性回归

要求使用梯度下降法,可视化losslossloss随着迭代次数的变化曲线

2. 说明

2.1 拟合函数

fw,b(x(i))=wx(i)+bf_{w,b}(x^{(i)})=wx^{(i)}+bfw,b(x(i))=wx(i)+b

2.2 均方误差损失函数

J(w,b)=12m∑i=0m−1(fw,b(x(i))−y(i))2J(w,b)=\frac{1}{2m}\sum\limits_{i=0}^{m-1}(f_{w,b}(x^{(i)})-y^{(i)})^2J(w,b)=2m1i=0m1(fw,b(x(i))y(i))2
重复进行:

  • w=w−α∂J(w,b)∂ww=w-\alpha\frac{\partial J(w,b)}{\partial w}w=wαwJ(w,b)
  • b=b−α∂J(w,b)∂bb=b-\alpha\frac{\partial J(w,b)}{\partial b}b=bαbJ(w,b)

2.3 需要实现3个方法

  • 计算梯度
  • 计算损失
  • 梯度下降

3. 代码

3.1 gradient_descent_sln.py

from distutils.command.bdist_wininst import bdist_wininst
import numpy as np
import math
import copy
import matplotlib.pyplot as pltplt.style.use("deeplearning.mplstyle")
from lab_utils_uni import (plt_house_x,plt_contour_wgrad,
plt_divergence,plt_gradients)def compute_cost(x,y,w,b):"""function to calculate the cost"""m = x.shape[0]cost = 0for i in range(m):f_wb = w*x[i]+bcost = cost + (f_wb - y[i])**2total_cost = 1/(2*m)*cost # 根据公式return total_costdef compute_gradient(x,y,w,b):"""compute the gradient for linear regression\nx: (ndarray,(m,)): data,m examples\ny: (ndarray,(m,)): target values\nw,b (scalar)     : model parameters\nreturn:\ndj_dw (scalar)  : the gradient of the cost w.r.t the parameter w\ndj_db (scalar)  : the gradient of the cost w.r.t the parameter b\n"""# number of training examplesm = x.shape[0]dj_dw = 0dj_db = 0for i in range(m):f_wb = w * x[i] + bdj_dw_i = (f_wb-y[i])*x[i]dj_db_i = (f_wb-y[i])dj_db +=dj_db_idj_dw +=dj_dw_idj_dw = dj_dw/mdj_db = dj_db/mreturn dj_dw,dj_dbdef gradient_descent(x,y,w_in,b_in,alpha,num_iters,cost_function,gradient_function):w = copy.deepcopy(w_in)J_history = [] # 损失值p_history = [] # 参数值b = b_inw = w_infor i in range(num_iters):dj_dw,dj_db = gradient_function(x,y,w,b)# updateb = b - alpha * dj_dbw = w - alpha * dj_dw# 保存历史损失值if i<1e5:J_history.append(cost_function(x,y,w,b))p_history.append([w,b])# 每10个迭代输出一次历史信息if i%math.ceil(num_iters/10)==0:print(f'Iteration {i:4}: Cost {J_history[-1]:.2e} ',f'dj_dw: {dj_dw:.3e}, dj_db: {dj_db:.3e} ',f'w: {w:.3e}, b:{b:.5e}')return w,b,J_history,p_history        if __name__ == '__main__':print("program start".center(60,'='))# load datasetx_train = np.array([1.0,2.0])y_train = np.array([300,500])# 显示损失函数plt_gradients(x_train,y_train,compute_cost,compute_gradient)plt.show()# initialize parametersw_init = 0b_init = 0# hyper parametersiterations = int(1e5)tmp_alpha = 1e-2# run itw_final,b_final,J_hist,p_hist = gradient_descent(x_train,y_train,w_init,b_init,tmp_alpha,iterations,compute_cost,compute_gradient)print(f'(w,b) found by gradient descent: ({w_final:8.4f}, {b_final:8.4f})')# plot cost vs iterationsfig,(ax1,ax2) = plt.subplots(1,2,constrained_layout=True,figsize=(12,4))ax1.plot(J_hist[:100])ax2.plot(1000+np.arange(len(J_hist[1000:])),J_hist[1000:])ax1.set_title("cost vs. iterations(start)")ax2.set_title("cost vs. iterations(end)")ax1.set_ylabel("cost")ax2.set_ylabel("cost")ax1.set_xlabel("iteration step")ax2.set_xlabel("iteration step")plt.show()

3.2 结果

在这里插入图片描述

=======================program start========================Iteration    0: Cost 7.93e+04  dj_dw: -6.500e+02, dj_db: -4.000e+02  w: 6.500e+00, b:4.00000e+00
Iteration 10000: Cost 6.74e-06  dj_dw: -5.215e-04, dj_db: 8.439e-04  w: 2.000e+02, b:1.00012e+02
Iteration 20000: Cost 3.09e-12  dj_dw: -3.532e-07, dj_db: 5.714e-07  w: 2.000e+02, b:1.00000e+02
Iteration 30000: Cost 1.42e-18  dj_dw: -2.393e-10, dj_db: 3.869e-10  w: 2.000e+02, b:1.00000e+02
Iteration 40000: Cost 1.26e-23  dj_dw: -1.421e-12, dj_db: 7.105e-13  w: 2.000e+02, b:1.00000e+02
Iteration 50000: Cost 1.26e-23  dj_dw: -1.421e-12, dj_db: 7.105e-13  w: 2.000e+02, b:1.00000e+02
Iteration 60000: Cost 1.26e-23  dj_dw: -1.421e-12, dj_db: 7.105e-13  w: 2.000e+02, b:1.00000e+02
Iteration 70000: Cost 1.26e-23  dj_dw: -1.421e-12, dj_db: 7.105e-13  w: 2.000e+02, b:1.00000e+02
Iteration 80000: Cost 1.26e-23  dj_dw: -1.421e-12, dj_db: 7.105e-13  w: 2.000e+02, b:1.00000e+02
Iteration 90000: Cost 1.26e-23  dj_dw: -1.421e-12, dj_db: 7.105e-13  w: 2.000e+02, b:1.00000e+02
(w,b) found by gradient descent: (200.0000, 100.0000)

在这里插入图片描述

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

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

相关文章

【云原生丨Kubernetes系列15】创建 ConfigMap 资源对象

前言 前⾯我们深入学习了 Servie 的使⽤&#xff0c; Service 是 Kubernetes 系统中⾮常重要的⼀个核⼼概念&#xff0c;这节课我们来学习另外⼀个⾮常重要的资源对象&#xff1a; ConfigMap 文章目录前言引入创建引入 应用部署的一个最佳实践是将应用所需的配置信息与程序进行…

【ML13】overfitting and underfitting 过拟合与欠拟合

过拟合与欠拟合过拟合与欠拟合概念过拟合解决办法解决办法一&#xff1a;在训练集中加入更多数据解决办法二&#xff1a;优化数据集 feature selection解决方法三&#xff1a;正则化 Regularization正则化线性回归Recape of Cost Function of Linear RegressionAdd the regular…

算法刷题:可交换的连续最大和

目录前言1. 题目描述2. 题目分析3. 代码实现4. 运行测试后记前言 好久没有做题了&#xff0c;前两天做了一道题&#xff0c;感觉还比较有意思&#xff0c;来分享一下。想学习&#xff0c;但是自己实在是懒&#xff0c;懒癌怎么治&#xff1f;期待着自己彻底奋发图强那一天。 …

【Ubuntu】常用软件下载与安装汇总

前言 发现很多诸如Detectron2的开源项目官方仅提供Liunx系统的安装方式&#xff0c;于是愤而将工作机系统换成了Ubuntu20.04&#xff0c;下面记录一些常用软件的安装方式&#xff0c;以便再次换机时能快速迁移&#xff0c;后续装新的软件会持续更新。 安装yum 直接安装会报错…

潜伏在ISP网络中数月的新黑客组织“Metador”

研究人员称之为“Metador”的一个以前未知的威胁因素已经入侵电信、互联网服务提供商(ISP)和大学大约两年了。 Metador的目标是中东和非洲的组织&#xff0c;他们的目的似乎是长期坚持间谍活动。该组织使用了两种基于Windows的恶意软件&#xff0c;它们被描述为“极其复杂”&a…

JavaScript:BOM

目录 一、BOM介绍 1、BOM的构成 二、window对象常用方法 1、窗口加载事件 2、window.onresize 3、confirm()方法 4、open()方法 5、setTimeout()定时器 6、this的使用 7、JS是单线程 8、JS执行机制 9、URL 10、location对象的属性 11、document对象 12、Date对象…

(附源码)计算机毕业设计ssm办公自动化系统

毕设帮助&#xff0c;指导&#xff0c;本源码分享&#xff0c;调试部署(见文末) 3.3系统流程和逻辑 系统业务流程图&#xff0c;如图所示&#xff1a; 图3-1登录流程图 图3-2添加信息流程图 图3-3注册信息流程图 4.1 概述 办公自动化系统基于Web服务模式&#xff0c;是一个适…

实训十七:交换机单端口环路检测配置

一、实验目的 1、了解单端口环路检测的作用 2、熟悉单端口环路检测的配置 二、 应用环境 1、针对网络中存在用户自行架设的 HUB 设备可能导致的环路&#xff0c;在交换机设备上运行单端 口环路检测以防止由于 HUB 连线失误导致的网络环路。 三、 实验设备 1、 DCN-CS6200 …

【CH559L单片机】串口下载程序说明

【CH559L单片机】串口下载程序说明&#x1f4cc;关篇《【硬件开源电路】CH559L开发板和CH55x_DAP-Link二合一开发板分享》 &#x1f4e2;CH559L单片机想通过串口来实现程序的烧录&#xff0c;折腾了我2天了&#xff0c;一直是失败&#xff0c;没有成功过一次&#xff0c;昨天跑…

【CSS3】 平面转换 空间转换 动画

目录平面转换平移缩放倾斜旋转transform复合属性空间转换空间位移空间旋转呈现立体图形空间缩放动画动画属性steps逐帧动画多组动画平面转换 CSS3中动画效果包括3个部分&#xff1a;过渡&#xff08;transition&#xff09;、变形&#xff08;transform&#xff09;、动画&…

如何使用 SAP UI5 V2 ODataModel 模型 API 实现 deepCreate 的场景以及局限性

如果开发人员期望在持久化时请求已创建条目的导航属性(navigation property)&#xff0c;请使用可选的 expand 参数在与实体创建的 POST 请求相同的批处理请求中有效地执行此操作。 可选的 inactive 参数确定是否创建非活动 transient 上下文。 这样的上下文只会在属性更新时成…

Jaca集合(四)Vector集合底层源码分析

Vector的基本介绍&#xff1a; &#xff08;1&#xff09;Vector类的定义说明&#xff1a;我们进入源码界面进行查看&#xff1a; public class Vector<E>extends AbstractList<E>implements List<E>, RandomAccess, Cloneable, java.io.Serializable &#…

Qt之事件处理机制

目录 一、事件简介 二、事件的处理 1.重写notify处理函数 2.事件过滤器 3.重写event处理函数 4.重写特定事件处理函数 三、事件的发送 一、事件简介 Qt 是一个基于 C 的框架&#xff0c;主要用来开发带窗口的应用程序。使用的基于窗口的应用程序都是基于事件&#xff0c…

网课查题公众号题库接口

网课查题公众号题库接口 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 题库&#xff1a;题库后台&#xff08;点击跳转&#xf…

05-Elasticsearch-DSL高级检索[分页, 分词, 权重, 多条件, 过滤, 排序, 关键词高亮, 深度分页, 滚动搜索, 批量Mget]

DSL搜索 词库准备骚年 帅气 新闻网 新闻 闻网 新 闻 网索引准备PUT /shop {"settings": {"number_of_shards": 5,"number_of_replicas": 0} } POST /shop/_mapping {"properties": {"id": {"type": "long&qu…

JavaSE_第8章 异常(尚)

JavaSE_【异常】 主要内容 异常的体系结构常见异常throw关键字&#xff08;手动创建并抛出异常&#xff09;异常处理机制一&#xff1a;try&#xff08;掌握&#xff09;异常处理机制二&#xff1a;throws&#xff08;掌握&#xff09;自定义异常 学习目标 能够辨别程序中异…

03-Elasticsearch-基本语法

查询[ES] 查询ES信息GET /查询集群健康状态GET /_cluster/health增删改索引 创建索引并指定主分片和副本数PUT /my_doc {"settings": {"number_of_shards": 1,"number_of_replicas": 0} }创建索引并指定映射PUT /index_mappings {"mappings…

Redis详解

Redis介绍1.Redis 是一个基于内存的高性能 key-value 数据库。是完全开源免费的,用C语言编写的,遵守BSD协议2.Redis 特点:1)Redis 是基于内存操作的,吞吐量非常高,可以在 1s内完成十万次读写操作      2)Redis 的读写模块是单线程,每个操作都具原子性      …

图的遍历 —— 广度优先遍历

与树的遍历类似&#xff0c;图的遍历指从图的某一节点出发&#xff0c;按照某种搜索方式对图中的所有节点都仅访问一次。图的遍历可以解决很多搜索问题&#xff0c;实际应用非常广泛。图的遍历根据搜索方式的不同&#xff0c;分为广度优先遍历和深度优先遍历。 图的遍历 —— 广…

PATHWAYS: ASYNCHRONOUS DISTRIBUTED DATAFLOW FOR ML论文阅读笔记

PATHWAYS: ASYNCHRONOUS DISTRIBUTED DATAFLOW FOR ML 针对机器学习的异步分布式数据流阅读笔记 B站李沐视频讲解&#xff1a;Pathways-论文精读-李沐 摘要 ​ 本篇论文介绍了用于加速器的新的大规模的编排层orchestration layer的设计——Pathways。论文新型异步分布式数据…