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中的__new__()方法的使用
Apr 09 Python
Python使用cookielib模块操作cookie的实例教程
Jul 12 Python
python实现神经网络感知器算法
Dec 20 Python
python进行两个表格对比的方法
Jun 27 Python
python 实现将字典dict、列表list中的中文正常显示方法
Jul 06 Python
三步实现Django Paginator分页的方法
Jun 11 Python
在Python中COM口的调用方法
Jul 03 Python
Python求两点之间的直线距离(2种实现方法)
Jul 07 Python
Python 读取用户指令和格式化打印实现解析
Sep 02 Python
使用浏览器访问python写的服务器程序
Oct 10 Python
Python描述符descriptor使用原理解析
Mar 21 Python
Python3自带工具2to3.py 转换 Python2.x 代码到Python3的操作
Mar 03 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中拷贝构造函数、赋值运算符重载
2012/07/25 PHP
smarty模板局部缓存方法使用示例
2014/06/17 PHP
php中使用base HTTP验证的方法
2015/04/20 PHP
CodeIgniter自定义控制器MY_Controller用法分析
2016/01/20 PHP
利用laravel+ajax实现文件上传功能方法示例
2017/08/13 PHP
PHP基于openssl实现非对称加密代码实例
2020/06/19 PHP
javascript 写类方式之十
2009/07/05 Javascript
Mootools 1.2教程 Fx.Morph、Fx选项和Fx事件
2009/09/15 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
JavaScript程序员应该知道的45个实用技巧
2014/03/04 Javascript
jquery如何判断表格同一列不同行input数据是否重复
2014/05/14 Javascript
JavaScript语言对Unicode字符集的支持详解
2014/12/30 Javascript
超级给力的JavaScript的React框架入门教程
2015/07/02 Javascript
Nodejs学习item【入门手上】
2016/05/05 NodeJs
jQuery Easyui DataGrid点击某个单元格即进入编辑状态焦点移开后保存数据
2016/08/15 Javascript
JavaScript中闭包之浅析解读(必看篇)
2016/08/25 Javascript
Vue header组件开发详解
2018/01/26 Javascript
vue给对象动态添加属性和值的实例
2019/09/09 Javascript
Element Input输入框的使用方法
2020/07/26 Javascript
用vite搭建vue3应用的实现方法
2021/02/22 Vue.js
python实现求最长回文子串长度
2018/01/22 Python
浅谈python编译pyc工程--导包问题解决
2019/03/20 Python
Python pexpect模块及shell脚本except原理解析
2020/08/03 Python
如何用python实现一个HTTP连接池
2021/01/14 Python
Hoka One One法国官网:美国专业跑鞋品牌
2018/12/29 全球购物
将"引用"作为函数参数有哪些特点
2013/04/05 面试题
如何开启linux的ssh服务
2013/06/03 面试题
任课老师推荐信范文
2013/11/24 职场文书
教师年度考核自我鉴定
2014/01/19 职场文书
乡镇交通安全实施方案
2014/03/29 职场文书
倡议书范文大全
2015/04/28 职场文书
大一新生军训新闻稿
2015/07/17 职场文书
2015年工商局个人工作总结
2015/07/23 职场文书
超市主管竞聘书
2015/09/15 职场文书
SQL Server2019数据库之简单子查询的具有方法
2021/04/27 SQL Server
PostgreSQL 插入INSERT、删除DELETE、更新UPDATE、事务transaction
2022/04/12 PostgreSQL