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 logging模块学习笔记
May 24 Python
Python中bisect的用法
Sep 23 Python
Python实现Linux命令xxd -i功能
Mar 06 Python
python机器学习案例教程——K最近邻算法的实现
Dec 28 Python
Python安装图文教程 Pycharm安装教程
Mar 27 Python
numpy实现合并多维矩阵、list的扩展方法
May 08 Python
python DataFrame 取差集实例
Jan 30 Python
一文了解Python并发编程的工程实现方法
May 31 Python
Python 实现毫秒级淘宝抢购脚本的示例代码
Sep 16 Python
python实现12306登录并保存cookie的方法示例
Dec 17 Python
python函数调用,循环,列表复制实例
May 03 Python
如何使用PyCharm及常用配置详解
Jun 03 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生成自己的LOG文件
2006/10/09 PHP
JS 网站性能优化笔记
2011/05/24 PHP
JS异常处理try..catch语句的作用和实例
2014/05/05 PHP
PHP采用get获取url汉字出现乱码的解决方法
2014/11/13 PHP
php使用ereg验证文件上传的方法
2014/12/16 PHP
PHP PDOStatement::fetch讲解
2019/01/31 PHP
PHPExcel实现的读取多工作表操作示例
2020/04/14 PHP
推荐10个超棒的jQuery工具提示插件
2011/10/11 Javascript
js实现在文本框光标处添加字符的方法介绍
2012/11/24 Javascript
JS对img进行操作(换图片/切图/轮换/停止)
2013/04/17 Javascript
JS随机漂浮广告代码具体实例
2013/11/19 Javascript
JS案例分享之金额小写转大写
2014/05/15 Javascript
PHP配置文件php.ini中打开错误报告的设置方法
2015/01/09 PHP
学习JavaScript设计模式之代理模式
2016/01/12 Javascript
jQuery组件easyui基本布局实现代码
2016/08/25 Javascript
Angularjs 依赖压缩及自定义过滤器写法
2017/02/04 Javascript
js按条件生成随机json:randomjson实现方法
2017/04/07 Javascript
AngularJS中使用three.js的实例详解
2017/07/21 Javascript
node文件批量重命名的方法示例
2017/10/23 Javascript
javascript实现最长公共子序列实例代码
2018/02/05 Javascript
vue中使用heatmapjs的示例代码(结合百度地图)
2018/09/05 Javascript
JavaScript 截取字符串代码实例
2019/09/05 Javascript
Nuxt配置Element-UI按需引入的操作方法
2020/07/06 Javascript
Javascript异步流程控制之串行执行详解
2020/09/27 Javascript
vue项目配置同一局域网可使用ip访问的操作
2020/10/23 Javascript
pandas 转换成行列表进行读取与Nan处理的方法
2018/10/30 Python
python向字符串中添加元素的实例方法
2019/06/28 Python
python 一维二维插值实例
2020/04/22 Python
PyTorch 导数应用的使用教程
2020/08/31 Python
澳大利亚领先的在线葡萄酒零售商:Get Wines Direct
2018/03/27 全球购物
使用useBean标志初始化BEAN时如何接受初始化参数
2012/02/11 面试题
2014年五一促销活动方案
2014/03/09 职场文书
初中优秀教师事迹材料
2014/08/18 职场文书
2016国庆节活动宣传语
2015/11/25 职场文书
《暗黑破坏神2:重制版》本周进行第一轮A测 目前可官网进行申请报名
2021/04/07 其他游戏
java实现自定义时钟并实现走时功能
2022/06/21 Java/Android