python实现梯度法 python最速下降法


Posted in Python onMarch 24, 2020

假设我们已经知道梯度法——最速下降法的原理。

现给出一个算例:

python实现梯度法 python最速下降法

如果人工直接求解:

python实现梯度法 python最速下降法

python实现梯度法 python最速下降法

现给出Python求解过程:

import numpy as np
from sympy import *
import math
import matplotlib.pyplot as plt
import mpl_toolkits.axisartist as axisartist

# 定义符号
x1, x2, t = symbols('x1, x2, t')

def func():
 # 自定义一个函数
 return pow(x1, 2) + 2 * pow(x2, 2) - 2 * x1 * x2 - 2 * x2

def grad(data):
 # 求梯度向量,data=[data1, data2]
 f = func()
 grad_vec = [diff(f, x1), diff(f, x2)] # 求偏导数,梯度向量
 grad = []
 for item in grad_vec:
  grad.append(item.subs(x1, data[0]).subs(x2, data[1]))
 return grad

def grad_len(grad):
 # 梯度向量的模长
 vec_len = math.sqrt(pow(grad[0], 2) + pow(grad[1], 2))
 return vec_len

def zhudian(f):
 # 求得min(t)的驻点
 t_diff = diff(f)
 t_min = solve(t_diff)
 return t_min

def main(X0, theta):
 f = func()
 grad_vec = grad(X0)
 grad_length = grad_len(grad_vec) # 梯度向量的模长
 k = 0
 data_x = [0]
 data_y = [0]
 while grad_length > theta: # 迭代的终止条件
  k += 1
  p = -np.array(grad_vec)
  # 迭代
  X = np.array(X0) + t*p
  t_func = f.subs(x1, X[0]).subs(x2, X[1])
  t_min = zhudian(t_func)
  X0 = np.array(X0) + t_min*p
  grad_vec = grad(X0)
  grad_length = grad_len(grad_vec)
  print('grad_length', grad_length)
  print('坐标', X0[0], X0[1])
  data_x.append(X0[0])
  data_y.append(X0[1])

 print(k)

 # 绘图
 fig = plt.figure()
 ax = axisartist.Subplot(fig, 111)
 fig.add_axes(ax)
 ax.axis["bottom"].set_axisline_style("-|>", size=1.5)
 ax.axis["left"].set_axisline_style("->", size=1.5)
 ax.axis["top"].set_visible(False)
 ax.axis["right"].set_visible(False)
 plt.title(r'$Gradient \ method - steepest \ descent \ method$')
 plt.plot(data_x, data_y, label=r'$f(x_1,x_2)=x_1^2+2 \cdot x_2^2-2 \cdot x_1 \cdot x_2-2 \cdot x_2$')
 plt.legend()
 plt.scatter(1, 1, marker=(5, 1), c=5, s=1000)
 plt.grid()
 plt.xlabel(r'$x_1$', fontsize=20)
 plt.ylabel(r'$x_2$', fontsize=20)
 plt.show()

if __name__ == '__main__':
 # 给定初始迭代点和阈值
 main([0, 0], 0.00001)

最终结果图如下所示:

python实现梯度法 python最速下降法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现猜数字游戏(无重复数字)示例分享
Mar 29 Python
从零学Python之入门(四)运算
May 27 Python
简单介绍Python中的decode()方法的使用
May 18 Python
asyncio 的 coroutine对象 与 Future对象使用指南
Sep 11 Python
Python的多维空数组赋值方法
Apr 13 Python
利用Pyhton中的requests包进行网页访问测试的方法
Dec 26 Python
Python设计模式之组合模式原理与用法实例分析
Jan 11 Python
浅析pip安装第三方库及pycharm中导入第三方库的问题
Mar 10 Python
python实现单机五子棋
Aug 28 Python
python 如何利用argparse解析命令行参数
Sep 11 Python
python中用Scrapy实现定时爬虫的实例讲解
Jan 18 Python
方法汇总:Python 安装第三方库常用
Apr 26 Python
PyQt5+Pycharm安装和配置图文教程详解
Mar 24 #Python
python实现梯度下降法
Mar 24 #Python
pycharm下配置pyqt5的教程(anaconda虚拟环境下+tensorflow)
Mar 25 #Python
pycharm通过anaconda安装pyqt5的教程
Mar 24 #Python
详解PyQt5信号与槽的几种高级玩法
Mar 24 #Python
Windows10+anacond+GPU+pytorch安装详细过程
Mar 24 #Python
Python多进程multiprocessing、进程池用法实例分析
Mar 24 #Python
You might like
PHP基础知识介绍
2013/09/17 PHP
codeigniter中view通过循环显示数组数据的方法
2015/03/20 PHP
php获取字符串前几位的实例(substr返回字符串的子串用法)
2017/03/08 PHP
js 图片等比例缩放代码
2010/05/13 Javascript
JS清除选择内容的方法
2015/01/29 Javascript
玩转NODE.JS(四)-搭建简单的聊天室的代码
2016/11/11 Javascript
JS实现滑动门效果的方法详解
2016/12/19 Javascript
AngularJs定时器$interval 和 $timeout详解
2017/05/25 Javascript
echart简介_动力节点Java学院整理
2017/08/11 Javascript
webpack 4.0.0-beta.0版本新特性介绍
2018/02/10 Javascript
jQuery实现输入框的放大和缩小功能示例
2018/07/21 jQuery
详解Angular6学习笔记之主从组件
2018/09/05 Javascript
node.js实现微信开发之获取用户授权
2019/03/18 Javascript
优化Vue项目编译文件大小的方法步骤
2019/05/27 Javascript
Vue+Django项目部署详解
2019/05/30 Javascript
JavaScript 预解析的4种实现方法解析
2019/09/03 Javascript
javascript+Canvas实现画板功能
2020/06/23 Javascript
Kettle中使用JavaScrip调用jar包对文件内容进行MD5加密的操作方法
2020/09/04 Javascript
python使用wxPython打开并播放wav文件的方法
2015/04/24 Python
让python 3支持mysqldb的解决方法
2017/02/14 Python
tensorflow更改变量的值实例
2018/07/30 Python
一文了解Python并发编程的工程实现方法
2019/05/31 Python
Python 使用多属性来进行排序
2019/09/01 Python
pandas将多个dataframe以多个sheet的形式保存到一个excel文件中
2019/10/10 Python
jupyter notebook 调用环境中的Keras或者pytorch教程
2020/04/14 Python
您的时尚,您的生活方式:DTLR Villa
2019/12/25 全球购物
房产公证书范本
2014/04/10 职场文书
销售行政专员岗位职责
2014/06/10 职场文书
收银员岗位职责
2015/02/03 职场文书
经典搞笑版检讨书
2015/02/19 职场文书
家长对学校的意见和建议
2015/06/03 职场文书
职场中的你,辞职信写对了吗?
2019/06/26 职场文书
导游词之峨眉乐山/兵马俑/北京故宫御花园
2019/09/03 职场文书
搞笑Gif:这么白这么长的腿像极了一楼的女朋友
2022/03/21 杂记
Python实现Matplotlib,Seaborn动态数据图
2022/05/06 Python
华为HarmonyOS3.0强在哪? 看看鸿蒙3.0这7个小功能
2023/01/09 数码科技