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
0
投稿
猜你喜欢
- 最近在研究WEB布局,遇到<H1>标签了,<H1>标签很重要。在一般教程中都这么说,<H1>标签在同一页
- 在 JavaScript 中,可以用 instanceof 来判断一个对象是不是某个类或其子类的实例。比如:// 代码
- 其实我这样做的本意是为了防止盗链!大家帮忙看一下通过代码能够根治盗链!只要不是HTTP_REFERER来源于(google.com goog
- 已有Django项目,在其中设置以redis为缓存。1、 安装django-redis:pip install django-redis2、
- 首先我很不喜欢验证码这东西。但现在越来越多的网站使用验证码来抵御spam的冲击。太揪心了。背景介绍验证码的技术叫CAPTCHA验证,CAPT
- 如何使整个页面内容居中,如何使高度适应内容自动伸缩。这是学习CSS布局最常见的问题。下面就给出一个实际的例子,并详细解释。(本文的经验和是蓝
- LRU缓存算法,指的是近期最少使用算法,大体逻辑就是淘汰最长时间没有用的那个缓存,这里我们使用有序字典,来实现自己的LRU缓存算法,并将其包
- 1 re.match 说明re.match() 从开始位置开始往后查找,返回第一个符合规则的对象,如果开始位置不符合匹配队形则返
- PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的
- 如何限制重复订阅邮件或投票?一、准备子程序和函数。1、初始化数据,在Session对象中保存两个变量:Sub InitializeFID()
- 在利用Python进行系统管理的时候,特别是同时操作多个文件目录,或者远程控制多台主机,并行操作可以节约大量的时间。当 * 作对象数目不大时,
- 本文实例讲述了Python求导数的方法。分享给大家供大家参考。具体实现方法如下:def func(coeff): sum=
- 如果用到数据筛选功能,可以使用x if condition else y的逻辑实现。如果使用的是纯Python,可以使用不断迭代的方式对每一
- 互联网上的资源多不胜数,无论我们搜索资料还是查阅新闻,或者是在网上淘物等等,肯定没少见分页!分页模式和表现方法也是各有千秋。我们来看看下面这
- 今天我们来学习用 Web 标准的方法来制作 Google 首页(中文)。Google 首页一直是用 table 布局的。我们把 Google
- python版本: 3.6pandas版本: 0.23.4行索引索引行有三种方法,分别是 loc iloc iximport pandas
- Eric A. Meyer 对基于 Web 标准的 CSS 与 HTML 绝非一知半解,他是这个领域杰出的专家,曾写过不少 CSS 方面的书
- 目录Python里的dict和set的效率有多高?字典中的散列表1.散列值和相等性散列表算法dict的实现及其导致的结果1.键必须死可散列的
- 这里使用FSO对象来删除指定文件夹 代码和说明如下:<% set fs=createobject(&qu
- 最近要做一个图像生成的课题,在网上找了一个混合的数据集。这个数据集中一共有360个文件夹,然后文件夹中有6-9张不等的照片,我的目标就是编写