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 相关文章推荐
zbar解码二维码和条形码示例
Feb 07 Python
简洁的十分钟Python入门教程
Apr 03 Python
Python OS模块常用函数说明
May 23 Python
python3中dict(字典)的使用方法示例
Mar 22 Python
Python实现的递归神经网络简单示例
Aug 11 Python
python读取csv和txt数据转换成向量的实例
Feb 12 Python
python钉钉机器人运维脚本监控实例
Feb 20 Python
Python字符串中删除特定字符的方法
Jan 15 Python
Django模板之基本的 for 循环 和 List内容的显示方式
Mar 31 Python
如何用python处理excel表格
Jun 09 Python
利用python汇总统计多张Excel
Sep 22 Python
Python基于Webhook实现github自动化部署
Nov 28 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 字符串操作入门教程
2006/12/06 PHP
php实现通过ftp上传文件
2015/06/19 PHP
Yii2表单事件之Ajax提交实现方法
2017/05/04 PHP
IE6/7/8中Option元素未设value时Select将获取空字符串
2011/04/07 Javascript
用js来刷新当前页面保留参数的具体实现
2013/12/23 Javascript
jquery实现弹出div,始终显示在屏幕正中间的简单实例
2014/03/08 Javascript
jquery mobile的触控点击事件会多次触发问题的解决方法
2014/05/08 Javascript
jQuery淡入淡出元素让其效果更为生动
2014/09/01 Javascript
JS+CSS实现的竖向简洁折叠菜单效果代码
2015/10/22 Javascript
JavaScript必看小技巧(必看)
2016/06/07 Javascript
jQuery Easyui加载表格出错时在表格中间显示自定义的提示内容
2016/12/08 Javascript
微信小程序实现动态设置placeholder提示文字及按钮选中/取消状态的方法
2017/12/14 Javascript
js实现控制文件拖拽并获取拖拽内容功能
2018/02/17 Javascript
Next.js实现react服务器端渲染的方法示例
2019/01/06 Javascript
js使用文件流下载csv文件的实现方法
2019/07/15 Javascript
JS数组方法reduce的用法实例分析
2020/03/03 Javascript
js+audio实现音乐播放器
2020/09/13 Javascript
jQuery实现可以计算进制转换的计算器
2020/10/19 jQuery
简单谈谈Python中的闭包
2016/11/30 Python
python matplotlib中文显示参数设置解析
2017/12/15 Python
python 每天如何定时启动爬虫任务(实现方法分享)
2018/05/21 Python
Django项目使用ckeditor详解(不使用admin)
2019/12/17 Python
通过python连接Linux命令行代码实例
2020/02/18 Python
让Django的BooleanField支持字符串形式的输入方式
2020/05/20 Python
解决HTML5中的audio在手机端和微信端的不能自动播放问题
2019/11/04 HTML / CSS
联想韩国官网:Lenovo Korea
2018/05/10 全球购物
英国婴儿及儿童产品商店:TigerParrot
2019/03/04 全球购物
NYX Professional Makeup俄罗斯官网:世界知名的化妆品品牌
2019/12/26 全球购物
电子信息科学专业自荐信
2014/01/30 职场文书
促销活动总结怎么写
2014/06/25 职场文书
反对邪教标语
2014/06/30 职场文书
2015年学生会个人工作总结
2015/04/09 职场文书
校园环境卫生倡议书
2015/04/29 职场文书
债务纠纷起诉书
2015/05/20 职场文书
医疗纠纷调解协议书
2015/08/06 职场文书