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爬虫常用的模块分析
Aug 29 Python
Python下rrdtool模块的基本使用方法
Nov 13 Python
Python字典及字典基本操作方法详解
Jan 30 Python
python学生信息管理系统
Mar 13 Python
python基于http下载视频或音频
Jun 20 Python
Python基于sklearn库的分类算法简单应用示例
Jul 09 Python
Django用户认证系统 组与权限解析
Aug 02 Python
详解用python计算阶乘的几种方法
Aug 14 Python
通过实例了解Python str()和repr()的区别
Jan 17 Python
Pycharm快捷键配置详细整理
Oct 13 Python
Python绘制数码晶体管日期
Feb 19 Python
python获取对象信息的实例详解
Jul 07 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
深入extjs与php参数交互的详解
2013/06/25 PHP
PHP易混淆函数的区别及用法汇总
2014/11/22 PHP
Laravel 5 框架入门(二)构建 Pages 的管理功能
2015/04/09 PHP
浅析Yii2缓存的使用
2016/05/10 PHP
Smarty简单生成表单元素的方法示例
2016/05/23 PHP
PDO的安全处理与事物处理方法
2016/10/31 PHP
使用PHP反射机制来构造&quot;CREATE TABLE&quot;的sql语句
2019/03/21 PHP
Laravel框架之解决前端显示图片问题
2019/10/24 PHP
关于取不到由location.href提交而来的上级页面地址的解决办法
2009/07/30 Javascript
将string解析为json的几种方式小结
2010/11/11 Javascript
利用JS实现浏览器的title闪烁
2013/07/08 Javascript
JQuery页面图片切换和新闻列表滚动效果的具体实现
2013/09/26 Javascript
JavaScript实现url地址自动检测并添加URL链接示例代码
2013/11/12 Javascript
javascript去掉代码里面的注释
2015/07/24 Javascript
jQuery实现响应鼠标滚动的动感菜单效果
2015/09/21 Javascript
BootStrap selectpicker
2016/06/20 Javascript
Vue的elementUI实现自定义主题方法
2018/02/23 Javascript
javascript中join方法实例讲解
2019/02/21 Javascript
详解VUE Element-UI多级菜单动态渲染的组件
2019/04/25 Javascript
利用Vue实现一个markdown编辑器实例代码
2019/05/19 Javascript
js类的继承定义与用法分析
2019/06/21 Javascript
小程序实现悬浮搜索框
2019/07/12 Javascript
解决vue-router路由拦截造成死循环问题
2020/08/05 Javascript
vue实现登录、注册、退出、跳转等功能
2020/12/23 Vue.js
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
2015/04/16 Python
Python使用defaultdict读取文件各列的方法
2017/05/11 Python
Python制作微信好友背景墙教程(附完整代码)
2019/07/17 Python
Python3中的f-Strings增强版字符串格式化方法
2020/03/04 Python
Pycharm及python安装详细教程(图解)
2020/07/31 Python
button在IE6/7下的黑边去除方案
2012/12/24 HTML / CSS
个性与发展自我评价
2014/02/11 职场文书
少先队学雷锋活动总结范文
2014/03/09 职场文书
团队队名口号大全
2014/06/06 职场文书
寝室长工作失责检讨书
2014/10/06 职场文书
公司开除员工通知
2015/04/22 职场文书
2019年新郎保证书3篇
2019/10/17 职场文书