python应用Axes3D绘图(批量梯度下降算法)
作者:老手er 发布时间:2023-04-19 11:41:45
标签:python,梯度下降算法
本文实例为大家分享了python批量梯度下降算法的具体代码,供大家参考,具体内容如下
问题:
将拥有两个自变量的二阶函数绘制到空间坐标系中,并通过批量梯度下降算法找到并绘制其极值点
大体思路:
首先,根据题意确定目标函数:f(w1,w2) = w1^2 + w2^2 + 2 w1 w2 + 500
然后,针对w1,w2分别求偏导,编写主方法求极值点
而后,创建三维坐标系绘制函数图像以及其极值点即可
具体代码实现以及成像结果如下:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.axes3d import Axes3D
#f(w1,w2) = w1^2 + w2^2 + 2*w1*w2 + 500
def targetFunction(W): #目标函数
w1,w2 = W
return w1 ** 2 + w2**2 + 2*w1*w2+500
def gradientFunction(W): #梯度函数:分别对w1,w2求偏导
w1,w2 = W
w1_grad = 2*w1+2*w2
w2_grad = 2*w2 + 2*w1
return np.array([w1_grad,w2_grad])
def batch_gradient_distance(targetFunc,gradientFunc,init_W,learning_rate = 0.01,tolerance = 0.0000001): #核心算法
W = init_W
target_value = targetFunc(W)
counts = 0 #用于计算次数
while counts<5000:
gradient = gradientFunc(W)
next_W = W-gradient*learning_rate
next_target_value = targetFunc(next_W)
if abs(next_target_value-target_value) <tolerance:
print("此结果经过了", counts, "次循环")
return next_W
else:
W,target_value = next_W,next_target_value
counts += 1
else:
print("没有取到极值点")
if __name__ == '__main__':
np.random.seed(0) #保证每次运行随机出来的结果一致
init_W = np.array([np.random.random(),np.random.random()]) #随机初始的w1,w2
w1,w2 = batch_gradient_distance(targetFunction,gradientFunction,init_W)
print(w1,w2)
#画图
x1=np.arange(-10,11,1) #为了绘制函数的原图像
x2=np.arange(-10,11,1)
x1, x2 = np.meshgrid(x1, x2) # meshgrid :3D坐标系
z=x1**2 + x2**2 + 2*x1*x2+500
fig = plt.figure()
ax = Axes3D(fig)
ax.plot_surface(x1, x2, z) #绘制3D坐标系中的函数图像
ax.scatter(w1,w2, targetFunction([w1,w2]), s=50, c='red') #绘制已经找到的极值点
ax.legend() #使坐标系为网格状
plt.show() #显示
函数以及其极值点成像如下(红点为极值点):
来源:https://blog.csdn.net/qq_43608549/article/details/100565419


猜你喜欢
- 海量数据库的查询优化及分页算法方案 原出处不详 摘自:www.21php.com 随着“ * ”建设的逐步深入和 * 信息化的高
- atom(一款开源的代码编辑器)是github专门为程序员推出的一个跨平台文本编辑器。具有简洁和直观的图形用户界面,并有很多有趣的特点:支持
- 主机环境:(Python2.7.9 / Win8_64 / bs4)利用BeautifulSoup4来抓取 www.pm25.com 上的P
- 本文介绍基于Python语言中gdal模块,对遥感影像数据进行栅格读取与计算,同时基于QA波段对像元加以筛选、掩膜的操作。本文所要实现的需求
- 一。存储过程的创建和使用 1.创建程序包,并在程序中创建存储过程 create or replace PACKAGE NCS_ICP_TJ
- bool是Boolean的缩写,只有真(True)和假(False)两种取值bool函数只有一个参数,并根据这个参数的值返回真或者假。1.当
- 目录搭建Vuex环境总结搭建Vuex环境在src目录下创建一个文件夹store,在store文件夹内创建一个index.js文件index.
- 最简单的关闭一个窗口的方法是点击标题栏上的 x 标志。但是,在下面的例子中,我们将展示如何通过编程来控制关闭窗口。我们将使用PyQt5的信号
- 一、引用计数基础知识每个php变量存在一个叫 zval 的变量容器中。一个 zval 变量容器,除了包含变量的类型和值,还包括两个字节的额外
- 在做js测试的时候用到了startsWith函数,但是他并不是每个浏览器都有的,所以我们一般要重写一下这个函数,具体的用法可以稍微总结一下在
- 获取输入的五个点画五边形def pentagonUpdate(): p = {} win = GraphWin(&q
- 今天因为给BeauBeau提供的抽奖号码做SQL文件,一开始收到ZIP文件解开压缩之后被吓到了——29个CSV文件,每个文件保存了1000个
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&
- create proc p_sword_getblcolumn ( @tblName varchar(200), @fromIndex in
- 本文实例讲述了Python 操作 PostgreSQL 数据库。分享给大家供大家参考,具体如下:我使用的是 Python 3.7.0Post
- 错误信息: RuntimeError: in-place operations can be only used on variables
- Python是一门非常酷的语言,因为很少的Python代码可以在短时间内做很多事情,并且,Python很容易就能支持多任务和多重处理。py&
- 本文实例为大家分享了JS实现canvas简单小画板的具体代码,供大家参考,具体内容如下Html部分:<!DOCTYPE html>
- 实际工作中可能会有这样的场景:两个结构体(可能类型一样), 字段名和类型都一样, 想复制一个结构体的全部或者其中某几个字段的值到另一个(即m
- 在使用列表、数组和矩阵的过程中,经常需要相互转换。特此总结相互间转换的过程及结果,供大家参考。第三方包:numpy