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 相关文章推荐
Python3.x和Python2.x的区别介绍
Feb 12 Python
利用Python实现颜色色值转换的小工具
Oct 27 Python
使用PyV8在Python爬虫中执行js代码
Feb 16 Python
python爬虫_微信公众号推送信息爬取的实例
Oct 23 Python
python多进程中的内存复制(实例讲解)
Jan 05 Python
一份python入门应该看的学习资料
Apr 11 Python
Python面向对象之接口、抽象类与多态详解
Aug 27 Python
Python 字符串换行的多种方式
Sep 06 Python
python多线程抽象编程模型详解
Mar 20 Python
python 并发编程 多路复用IO模型详解
Aug 20 Python
selenium自动化测试入门实战
Dec 21 Python
pycharm 关闭search everywhere的解决操作
Jan 15 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获取url的函数代码
2011/08/02 PHP
php 修改、增加xml结点属性的实现代码
2013/10/22 PHP
php gd等比例缩放压缩图片函数
2016/06/12 PHP
详解Yii2 定制表单输入字段的标签和样式
2017/01/04 PHP
javascript 面向对象,实现namespace,class,继承,重载
2009/10/29 Javascript
js自定义方法通过隐藏iframe实现文件下载
2013/02/21 Javascript
js图片处理示例代码
2014/05/12 Javascript
js实现在网页上简单显示时间的方法
2015/03/02 Javascript
原生js实现移动开发轮播图、相册滑动特效
2015/04/17 Javascript
详解JS几种变量交换方式以及性能分析对比
2016/11/25 Javascript
javascript实现简单的ajax封装示例
2016/12/28 Javascript
php 修改密码实现代码
2017/05/24 Javascript
javascript实现电脑和手机版样式切换
2017/11/10 Javascript
jQuery实现所有验证通过方可提交的表单验证
2017/11/21 jQuery
微信小程序实现动态改变view标签宽度和高度的方法【附demo源码下载】
2017/12/05 Javascript
JavaScript中Object基础内部方法图
2018/02/05 Javascript
JavaScript中的一些实用小技巧总结
2019/04/07 Javascript
vue 移动端记录页面浏览位置的方法
2020/03/11 Javascript
Vue自动构建发布脚本的方法示例
2020/07/24 Javascript
[02:54]DOTA2亚洲邀请赛 VG战队出场宣传片
2015/02/07 DOTA
python使用Plotly绘图工具绘制气泡图
2019/04/01 Python
selenium处理元素定位点击无效问题
2019/06/12 Python
Python 调用 Windows API COM 新法
2019/08/22 Python
Python使用贪婪算法解决问题
2019/10/22 Python
Django xadmin开启搜索功能的实现
2019/11/15 Python
pandas中read_csv的缺失值处理方式
2019/12/19 Python
带你彻底搞懂python操作mysql数据库(cursor游标讲解)
2020/01/06 Python
浅谈cookie和localStorage那些事
2019/08/27 HTML / CSS
手工制作的男士奢华英国鞋和服装之家:Goodwin Smith
2019/06/21 全球购物
皮肤科医师岗位职责
2013/12/04 职场文书
全国税务系统先进集体事迹材料
2014/05/19 职场文书
教代会开幕词
2015/01/28 职场文书
法人代表资格证明书
2015/06/18 职场文书
八年级物理教学反思
2016/02/19 职场文书
java后台调用接口及处理跨域问题的解决
2022/03/24 Java/Android
DIY胆机必读:各国电子管评价
2022/04/06 无线电