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 Django做网页
Nov 04 Python
python去除所有html标签的方法
May 05 Python
Python使用shelve模块实现简单数据存储的方法
May 20 Python
Python入门之三角函数tan()函数实例详解
Nov 08 Python
python使用pil进行图像处理(等比例压缩、裁剪)实例代码
Dec 11 Python
python获取服务器响应cookie的实例
Dec 28 Python
Python设计模式之享元模式原理与用法实例分析
Jan 11 Python
python实时获取外部程序输出结果的方法
Jan 12 Python
python生成每日报表数据(Excel)并邮件发送的实例
Feb 03 Python
flask框架单元测试原理与用法实例分析
Jul 23 Python
Keras SGD 随机梯度下降优化器参数设置方式
Jun 19 Python
pytorch常用数据类型所占字节数对照表一览
May 17 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的substr_replace将指定两位置之间的字符替换为*号
2011/05/04 PHP
一个PHP的ZIP压缩类分享
2014/05/04 PHP
什么情况下可以不写PHP的闭合标签“?&gt;”
2014/08/28 PHP
Ajax请求PHP后台接口返回信息的实例代码
2018/08/21 PHP
如何优雅的使用 laravel 的 validator验证方法
2018/11/11 PHP
php实现的PDO异常处理操作分析
2018/12/27 PHP
yii2.0框架多模型操作示例【添加/修改/删除】
2020/04/13 PHP
javascript Firefox与IE 替换节点的方法
2010/02/24 Javascript
js data日期初始化的5种方法
2013/12/29 Javascript
JavaScript中的比较操作符&gt;、=、
2014/12/31 Javascript
PHPExcel中的一些常用方法汇总
2015/01/23 Javascript
jQuery选择器源码解读(四):tokenize方法的Expr.preFilter
2015/03/31 Javascript
Bootstrap3使用typeahead插件实现自动补全功能
2016/07/07 Javascript
js捕捉键盘事件和按键键值的方法
2016/10/10 Javascript
原生js实现放大镜特效
2017/03/08 Javascript
vue使用stompjs实现mqtt消息推送通知
2017/06/22 Javascript
在 Node.js 中使用原生 ES 模块方法解析
2017/09/19 Javascript
关于vue的npm run dev和npm run build的区别介绍
2019/01/14 Javascript
小程序server请求微信服务器超时的解决方法
2019/05/21 Javascript
基于VSCode调试网页JavaScript代码过程详解
2020/07/20 Javascript
python中的函数用法入门教程
2014/09/02 Python
放弃 Python 转向 Go语言有人给出了 9 大理由
2017/10/20 Python
通过Python 接口使用OpenCV的方法
2018/04/02 Python
对python append 与浅拷贝的实例讲解
2018/05/04 Python
解决Python网页爬虫之中文乱码问题
2018/05/11 Python
浅谈Scrapy网络爬虫框架的工作原理和数据采集
2019/02/07 Python
python3中for循环踩过的坑记录
2020/12/14 Python
详解CSS3中@media的实际使用
2015/08/04 HTML / CSS
blueseventy官网:铁人三项和比赛泳衣
2021/02/06 全球购物
php优化查询foreach代码实例讲解
2021/03/24 PHP
毕业寄语大全
2014/04/09 职场文书
物理教育专业求职信
2014/06/25 职场文书
技术经济专业求职信
2014/09/03 职场文书
大学生撤销处分思想汇报
2014/09/12 职场文书
《我的长生果》教学反思
2016/02/20 职场文书
以MySQL5.7为例了解一下执行计划
2022/04/13 MySQL