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正常时间和unix时间戳相互转换的方法
Apr 23 Python
python判断windows系统是32位还是64位的方法
May 11 Python
python使用in操作符时元组和数组的区别分析
May 19 Python
Python聚类算法之DBSACN实例分析
Nov 20 Python
Python安装Numpy和matplotlib的方法(推荐)
Nov 02 Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
Jul 30 Python
Python基于Tkinter模块实现的弹球小游戏
Dec 27 Python
Python 进程操作之进程间通过队列共享数据,队列Queue简单示例
Oct 11 Python
Python高级编程之继承问题详解(super与mro)
Nov 19 Python
Mysql数据库反向生成Django里面的models指令方式
May 18 Python
Pandas的Apply函数具体使用
Jul 21 Python
Python大批量搜索引擎图像爬虫工具详解
Nov 16 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
DOTA2【瓜皮时刻】Vol.91 RTZ山史最惨“矿难”
2021/03/05 DOTA
PHP控制网页过期时间的代码
2008/09/28 PHP
PHP命令行脚本接收传入参数的三种方式
2014/08/20 PHP
PHP开发实现微信退款功能示例
2017/11/25 PHP
js随机颜色代码的多种实现方式
2013/04/23 Javascript
jquery中get和post的简单实例
2014/02/04 Javascript
父节点获取子节点的字符串示例代码
2014/02/26 Javascript
node.js中的url.resolve方法使用说明
2014/12/10 Javascript
深入探密Javascript数组方法
2015/01/08 Javascript
JavaScript生成随机数的4种自定义函数分享
2015/02/28 Javascript
让浏览器崩溃的12行JS代码(DoS攻击分析及防御)
2016/10/10 Javascript
jQuery实现鼠标悬停3d菜单展开动画效果
2017/01/19 Javascript
js实现图片360度旋转
2017/01/22 Javascript
原生js实现日期计算器功能
2017/02/17 Javascript
解决在vue项目中,发版之后,背景图片报错,路径不对的问题
2018/03/06 Javascript
使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
2018/03/22 Javascript
React 实现拖拽功能的示例代码
2019/01/06 Javascript
jquery的$().each和$.each的区别
2019/01/18 jQuery
highcharts.js数据绑定方式代码实例
2019/11/13 Javascript
vue 获取url里参数的两种方法小结
2020/11/12 Javascript
Python装饰器入门学习教程(九步学习)
2016/01/28 Python
Python代码缩进和测试模块示例详解
2018/05/07 Python
django 解决manage.py migrate无效的问题
2018/05/27 Python
Python爬虫实现的根据分类爬取豆瓣电影信息功能示例
2019/09/15 Python
25个CSS3动画按钮和菜单教程分享
2012/10/03 HTML / CSS
HTML5各种头部meta标签的功能(推荐)
2017/03/13 HTML / CSS
日本最大的药妆连锁店:Matsukiyo松本清药妆店
2017/11/23 全球购物
美国男士和女士奢侈品折扣手表购物网站:Certified Watch Store
2018/06/13 全球购物
澳大利亚波希米亚风时尚品牌:Tree of Life
2019/09/15 全球购物
中海讯通笔试题
2015/09/15 面试题
大学生求职中的自我评价
2013/10/01 职场文书
七年级地理教学反思
2014/01/26 职场文书
教师个人剖析材料
2014/02/05 职场文书
感恩教师节演讲稿
2014/09/03 职场文书
教师远程研修感悟
2015/11/18 职场文书
好段摘抄大全(48句)
2019/08/08 职场文书