python应用Axes3D绘图(批量梯度下降算法)


Posted in Python onMarch 25, 2020

本文实例为大家分享了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() #显示

函数以及其极值点成像如下(红点为极值点):

python应用Axes3D绘图(批量梯度下降算法)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用装饰器和线程限制函数执行时间的方法
Apr 18 Python
简单讲解Python编程中namedtuple类的用法
Jun 21 Python
Django自定义插件实现网站登录验证码功能
Apr 19 Python
利用Anaconda完美解决Python 2与python 3的共存问题
May 25 Python
Numpy掩码式数组详解
Apr 17 Python
python实现贪吃蛇游戏
Mar 21 Python
python3.7实现云之讯、聚合短信平台的短信发送功能
Sep 26 Python
基于Python脚本实现邮件报警功能
May 20 Python
Django中F函数的使用示例代码详解
Jul 06 Python
Python selenium模块实现定位过程解析
Jul 09 Python
只需要100行Python代码就可以实现的贪吃蛇小游戏
May 27 Python
人工智能深度学习OpenAI baselines的使用方法
May 20 Python
2020新版本pycharm+anaconda+opencv+pyqt环境配置学习笔记,亲测可用
Mar 24 #Python
python实现梯度下降和逻辑回归
Mar 24 #Python
详解Python 实现 ZeroMQ 的三种基本工作模式
Mar 24 #Python
python使用梯度下降算法实现一个多线性回归
Mar 24 #Python
PyQt5+python3+pycharm开发环境配置教程
Mar 24 #Python
python实现最速下降法
Mar 24 #Python
python实现梯度法 python最速下降法
Mar 24 #Python
You might like
php简单计算页面加载时间的方法
2015/06/19 PHP
详解EventDispatcher事件分发组件
2016/12/25 PHP
thinkPHP5.0框架URL访问方法详解
2017/03/18 PHP
javascript基本语法分析说明
2008/06/15 Javascript
js将控件隐藏的方法及display属性介绍
2013/07/04 Javascript
使用JQUERY进行后台页面布局控制DIV实现左右式
2014/01/07 Javascript
在jQuery中处理XML数据的大致方法
2015/08/14 Javascript
BootStrap下jQuery自动完成的样式调整
2016/05/30 Javascript
完美解决jQuery符号$与其他javascript 库、框架冲突的问题
2016/08/09 Javascript
jQuery选择器实例应用
2017/01/05 Javascript
JavaScript瀑布流布局实现代码
2017/05/06 Javascript
详解webpack2+React 实例demo
2017/09/11 Javascript
基于JavaScript+HTML5 实现打地鼠小游戏逻辑流程图文详解(附完整代码)
2017/11/02 Javascript
微信小程序当前时间时段选择器插件使用方法详解
2018/12/28 Javascript
js中对象与对象创建方法的各种方法
2019/02/27 Javascript
关于element-ui的隐藏组件el-scrollbar的使用
2019/05/29 Javascript
vue获取form表单的值示例
2019/10/29 Javascript
Vue混入mixins滚动触底的方法
2019/11/22 Javascript
JS中==、===你分清楚了吗
2020/03/04 Javascript
python逆向入门教程
2018/01/15 Python
python3中zip()函数使用详解
2018/06/29 Python
解决win64 Python下安装PIL出错问题(图解)
2018/09/03 Python
Django使用redis缓存服务器的实现代码示例
2019/04/28 Python
python 对字典按照value进行排序的方法
2019/05/09 Python
Python 硬币兑换问题
2019/07/29 Python
Django框架创建mysql连接与使用示例
2019/07/29 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
2019/10/30 Python
Python+OpenCV图像处理—— 色彩空间转换
2020/10/22 Python
Django中如何用xlwt生成表格的方法步骤
2021/01/31 Python
瑜伽灵感珠宝:Satya Jewelry
2018/01/06 全球购物
中学生运动会入场词
2014/02/12 职场文书
幼儿园大班开学教师寄语
2014/04/03 职场文书
计算机专业自荐信范文
2014/05/28 职场文书
公共场所禁烟倡议书
2014/08/30 职场文书
信息技术远程培训心得体会
2016/01/09 职场文书
Go遍历struct,map,slice的实现
2021/06/13 Golang