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中的数据对象持久化存储模块pickle的使用示例
Mar 03 Python
Python Json序列化与反序列化的示例
Jan 31 Python
浅谈python正则的常用方法 覆盖范围70%以上
Mar 14 Python
pygame游戏之旅 载入小车图片、更新窗口
Nov 20 Python
python每天定时运行某程序代码
Aug 16 Python
python实现代码统计器
Sep 19 Python
Python中输入和输出(打印)数据实例方法
Oct 13 Python
python中文分词库jieba使用方法详解
Feb 11 Python
Python捕获异常堆栈信息的几种方法(小结)
May 18 Python
keras 模型参数,模型保存,中间结果输出操作
Jul 06 Python
Python安装Bs4的多种方法
Nov 28 Python
Python中itertools库的四个函数介绍
Apr 06 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
Terran剧情介绍
2020/03/14 星际争霸
针对初学PHP者的疑难问答(2)
2006/10/09 PHP
一步一步学习PHP(8) php 数组
2010/03/05 PHP
PHP学习之数组的定义和填充
2011/04/17 PHP
php中socket的用法详解
2014/10/24 PHP
PHP CURL或file_get_contents获取网页标题的代码及两者效率的稳定性问题
2015/11/30 PHP
php7函数,声明,返回值等新特性介绍
2018/05/25 PHP
PHP按一定比例压缩图片的方法
2018/10/12 PHP
在Ajax中使用Flash实现跨域数据读取的实现方法
2010/12/02 Javascript
yepnope.js 异步加载资源文件
2011/09/08 Javascript
关于JavaScript中原型继承中的一点思考
2012/07/25 Javascript
jQuery实现checkbox列表的全选、反选功能
2016/11/24 Javascript
ionic2 tabs 图标自定义实例
2017/03/08 Javascript
Angular.js中$resource高大上的数据交互详解
2017/07/30 Javascript
详解使用PM2管理nodejs进程
2017/10/24 NodeJs
react 兄弟组件如何调用对方的方法示例
2018/10/23 Javascript
基于jquery实现九宫格拼图小游戏
2018/11/30 jQuery
如何给element添加一个抽屉组件的方法步骤
2019/07/14 Javascript
python中使用序列的方法
2015/08/03 Python
对python中return和print的一些理解
2017/08/18 Python
详解python调用cmd命令三种方法
2019/07/08 Python
详解用python生成随机数的几种方法
2019/08/04 Python
python爬虫爬取笔趣网小说网站过程图解
2019/11/18 Python
Python运行DLL文件的方法
2020/01/17 Python
python数据分析工具之 matplotlib详解
2020/04/09 Python
python3获取控制台输入的数据的具体实例
2020/08/16 Python
详解html5 shiv.js和respond.min.js
2018/01/24 HTML / CSS
2014年两会学习心得体会
2014/03/10 职场文书
三爱活动实施方案
2014/03/19 职场文书
银行求职自荐书
2014/06/25 职场文书
2014年管理工作总结
2014/11/22 职场文书
2015年保育员个人工作总结
2015/05/13 职场文书
驳回起诉裁定书
2015/05/19 职场文书
2015年测量员工作总结
2015/05/23 职场文书
pytorch MSELoss计算平均的实现方法
2021/05/12 Python
MySQL中日期型单行函数代码详解
2021/06/21 MySQL