【Python】使用Python实现小批量梯度下降算法的代码逻辑
CrazyPanda发表于:2024-01-22 20:03:43浏览:327次
让theta=模型参数和max_iters=时期数。对于itr=1,2,3,...,max_iters:对于mini_batch(X_mini,y_mini):
批量X_mini的前向传递:
1、对小批量进行预测
2、使用参数的当前值计算预测误差(J(theta))
后传:计算梯度(theta)=J(theta)wrt theta的偏导数
更新参数:theta=theta–learning_rate*gradient(theta)
Python实现梯度下降算法的代码流程
第一步:导入依赖项,为线性回归生成数据,并可视化生成的数据。以8000个数据示例,每个示例都有2个属性特征。这些数据样本进一步分为训练集(X_train,y_train)和测试集(X_test,y_test),分别有7200和800个样本。
import numpy as np import matplotlib.pyplot as plt mean=np.array([5.0,6.0]) cov=np.array([[1.0,0.95],[0.95,1.2]]) data=np.random.multivariate_normal(mean,cov,8000) plt.scatter(data[:500,0],data[:500,1],marker='.') plt.show() data=np.hstack((np.ones((data.shape[0],1)),data)) split_factor=0.90 split=int(split_factor*data.shape[0]) X_train=data[:split,:-1] y_train=data[:split,-1].reshape((-1,1)) X_test=data[split:,:-1] y_test=data[split:,-1].reshape((-1,1)) print(& quot Number of examples in training set= % d & quot % (X_train.shape[0])) print(& quot Number of examples in testing set= % d & quot % (X_test.shape[0]))

训练集中的示例数=7200测试集中的示例数=800
第二步:
使用小批量梯度下降实现线性回归的代码。gradientDescent()是主要的驱动函数,其他函数是辅助函数:
进行预测——hypothesis()
计算梯度——gradient()
计算误差——cost()
创建小批量——create_mini_batches()
驱动程序函数初始化参数,计算模型的最佳参数集,并返回这些参数以及一个列表,其中包含参数更新时的错误历史记录。
def hypothesis(X,theta): return np.dot(X,theta) def gradient(X,y,theta): h=hypothesis(X,theta) grad=np.dot(X.transpose(),(h-y)) return grad def cost(X,y,theta): h=hypothesis(X,theta) J=np.dot((h-y).transpose(),(h-y)) J/=2 return J[0] def create_mini_batches(X,y,batch_size): mini_batches=[] data=np.hstack((X,y)) np.random.shuffle(data) n_minibatches=data.shape[0]//batch_size i=0 for i in range(n_minibatches+1): mini_batch=data[i*batch_size:(i+1)*batch_size,:] X_mini=mini_batch[:,:-1] Y_mini=mini_batch[:,-1].reshape((-1,1)) mini_batches.append((X_mini,Y_mini)) if data.shape[0]%batch_size!=0: mini_batch=data[i*batch_size:data.shape[0]] X_mini=mini_batch[:,:-1] Y_mini=mini_batch[:,-1].reshape((-1,1)) mini_batches.append((X_mini,Y_mini)) return mini_batches def gradientDescent(X,y,learning_rate=0.001,batch_size=32): theta=np.zeros((X.shape[1],1)) error_list=[] max_iters=3 for itr in range(max_iters): mini_batches=create_mini_batches(X,y,batch_size) for mini_batch in mini_batches: X_mini,y_mini=mini_batch theta=theta-learning_rate*gradient(X_mini,y_mini,theta) error_list.append(cost(X_mini,y_mini,theta)) return theta,error_list
调用gradientDescent()函数来计算模型参数(theta)并可视化误差函数的变化。
theta,error_list=gradientDescent(X_train,y_train) print("Bias=",theta[0]) print("Coefficients=",theta[1:]) plt.plot(error_list) plt.xlabel("Number of iterations") plt.ylabel("Cost") plt.show()
偏差=[0.81830471]系数=[[1.04586595]]

第三步:对测试集进行预测并计算预测中的平均绝对误差。
y_pred=hypothesis(X_test,theta) plt.scatter(X_test[:,1],y_test[:,],marker='.') plt.plot(X_test[:,1],y_pred,color='orange') plt.show() error=np.sum(np.abs(y_test-y_pred)/y_test.shape[0]) print(& quot Mean absolute error=",error)

平均绝对误差=0.4366644295854125
橙色线代表最终假设函数:theta[0]+theta[1]*X_test[:,1]+theta[2]*X_test[:,2]=0
猜你喜欢
- 【Python】如何在Python中进行数据可视化
- 如何在Python中进行数据可视化——使用Matplotlib和Seaborn库实现数据图表展示随着数据分析和数据挖掘的迅速发展,数据可视化作为数据分析的重要环节,被广泛运用于各个领域。Python作为一种强大的数据分析工具,有着丰富的数据可视化库,其中最受欢迎的就是Matplotlib和Seaborn。本文将介绍如何使用这两个库来进行数据可视化,并给出具体的代码示例。使用Matplotlib进行数据可视化Matplotlib是Python中最常用的数据可视化库,它提供了各种绘图函数,可以绘制出
- 【Python】深入探究Python中len函数的工作原理和用法
- 解析Python中的len函数:探索其背后的原理和用法在Python编程语言中,len函数是一种常用的内置函数,用于获取序列对象的长度或元素个数。本文将深入探讨len函数背后的原理和用法,并提供具体的代码示例。一、len函数的原理len函数的原理非常简单,它会返回传入序列对象的元素个数。这里的序列对象可以是字符串、列表、元组、集合等。实际上,len函数是通过调用序列对象的__len__方法来实现的。__len__方法是Python内置类型(如str、list、tuple、set等)的一个特殊方法
- 【Python】了解Django框架:从入门到精通
- Django是一个流行的Python Web框架,它为开发Web应用程序提供了一种高效而强大的方式。本文将从入门到精通,介绍Django的基础知识,并提供具体代码示例。安装Django在使用Django之前,需要确保已在计算机上安装了Python。然后,可以使用以下命令安装Django:pip install Django创建Django项目要创建一个新的Django项目,可以使用以下命令:django-admin startproject <pro
- 【Python】如何使用Python中的字符串操作函数处理大规模文本数据
- 如何使用Python中的字符串操作函数处理大规模文本数据,需要具体代码示例随着互联网的快速发展和数据的不断增加,大规模文本数据处理成了现代科技中的一个重要课题。Python作为一门简单易学且功能强大的编程语言,提供了丰富的字符串操作函数,能够很好地处理大规模文本数据。本文将介绍一些常用的字符串操作函数,并给出具体的代码示例,以帮助读者更好地掌握如何处理大规模文本数据。切割字符串在处理大规模文本数据时,常常需要将长字符串切割成小段文字进行操作。Python提供了split()函数,可以通过指定分隔
- 【Python】快速上手pandas:使用该库读取Excel文件的快捷方法
- andas是Python中一款重要的数据分析库,能够简化数据的读取、清洗和处理过程,目前已成为数据分析工作的标配。在数据分析过程中,Excel往往是数据来源之一,因此本文将介绍使用pandas读取Excel文件的快捷方法。使用pandas读取Excel文件的几个优势:可以快速读取并处理大量的Excel文件。得益于pandas所提供的高效性和灵活性,支持各种类型的数据操作,包括,但不限于数据过滤,数据拼接,数据透视表,数据可视化等。通过使用pandas,我们可以很方便地将已经读取的Excel数据
- 【Python】如何使用Python操作路径名?
- 在本文中,我们将学习使用 Python 操作路径名。以下是下面提到的一些不同的示例 -从文件路径获取主文件名从文件路径获取目录名将路径组件连接在一起扩展用户的主目录从文件路径中分离文件扩展名算法(步骤)以下是执行所需任务所需遵循的算法/步骤。 -使用 import 关键字导入 os 模块。创建一个变量来存储输入文件路径。使用os模块的basename()函数(返回给定文件路径的基本名称)来获取输入文件路径的最后一个组成部分(主文件名)并打印出来。从文件路径获取主文件名示例以下程序使用 os.pa
- 【Python】使用清华源加速Python包下载,适用于Windows操作系统的Pip设置
- 在Windows系统下,使用Pip设置清华源,加速Python包的下载Python是一种广泛使用的高级编程语言,具有强大的功能和丰富的生态系统。在使用Python进行开发时,我们常常需要从Python Package Index(简称PyPI)上下载各种第三方库。然而,由于PyPI服务器位于国外,导致下载速度较慢,特别是在国内网络环境下。为了解决这个问题,我们可以使用清华大学的镜像源来加速Python包的下载。清华源是清华大学开放源代码软件镜像站提供的服务。它提供了包括PyPI在内的诸多开源软件
- 【Python】python开发exe桌面应用,用什么工具编写好?
- 使用Python开发exe桌面程序有许多工具可以选择,以下是一些常用的工具:PyInstaller:PyInstaller是一个流行的开源工具,可以将Python程序打包成可执行文件。它支持Windows、Linux和Mac OS X平台,并且可以将Python程序打包成单个可执行文件,方便用户使用。cx_Freeze:cx_Freeze是另一个常用的工具,可以将Python程序打包成可执行文件。它支持Windows和Linux平台,并且可以将Python程序打包成单个可执行文件或多个文件。Py
栏目分类全部>
推荐文章
- 【PHP】php解析大量数据json文件方式
- 【PHP】PHP 框架在大型项目中微服务的最佳实践
- 【UniApp】uniapp 中使用addEventListener
- 【网络】聊聊从输入URL到页面展示这中间发生了什么
- 【PHP】PHP8.1新特性大讲解之Fibers with a grain of salt
- 【Vue】前端框架 Vue3框架 使用总结(一) Vue框架的基础使用
- 【Python】学习matplotlib绘制折线图的基本步骤
- 【UniApp】uniapp的标题怎么动态修改
- 【Go】Golang标准库介绍(四)
- 【Javascript】localStorage和sessionStorage的使用