梯度下降

概念

梯度是一个向量,表示函数在某一点处的方向导数,函数在这点沿着该方向变化最快。

由此可知,当函数是一维函数时,梯度就是导数。
一维梯度下降
程序:使用梯度下降求解方程 y=x2−2x+1y=x2−2x+1 的最小值。
观察学习率对梯度下降的影响。

import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams["font.family"] = "SimHei"
mpl.rcParams["axes.unicode_minus"] = False
import numpy as np
%matplotlib tk
# 给定一个初始值(是什么不重要),然后根据梯度来对该值(x)进行调整。使得
# x的值令y值最小。# 定义原函数
def f(x):return x ** 2 - 2 * x + 1# 定义导函数(梯度函数)
def gradient(x):return 2 * x - 2# 定义一个列表,来保存x的更新轨迹。
x_list = []
# 定义一个列表,来保存y的更新轨迹。
y_list = []
# 定义学习率。
eta = 0.1
# 定义x的初始值。
x = 10
# 进行循环迭代,在循环中,不管根据x的梯度值更新x,使得更新后的x值,令y值更小。
for i in range(10):# 将x与y值加入到轨迹列表中。x_list.append(x)y_list.append(f(x))# 对自变量x进行调整。(根据梯度)x = x - eta * gradient(x)
# display(x_list)
# display(y_list)# 绘制图像
x = np.arange(-9, 11, 0.1)
y = f(x)
plt.plot(x, y)
# 画出x,y点的移动轨迹。
plt.plot(x_list, y_list, "ro--")
# title等方法中,也同样支持latex语法。
plt.title("函数$y=x^{2} -2x + 1$")

二维梯度下降

程序:使用梯度下降求解方程 y=0.2(x1+x2)2−0.3x1x2+0.4y=0.2(x1+x2)2−0.3x1x2+0.4 的最小值。

from mpl_toolkits.mplot3d import Axes3D# 定义原函数
def f(x1, x2):return 0.2 * (x1 + x2) ** 2 - 0.3 * x1 * x2 + 0.4# 定义梯度函数(导函数)
def gradient_x1(x1, x2):return 0.4 * (x1 + x2) - 0.3 * x2def gradient_x2(x1, x2):return 0.4 * (x1 + x2) - 0.3 * x1# 定义学习率
eta = 1.5
# 定义x1,x2与y的轨迹列表。
x1_list = []
x2_list = []
y_list = []
# 定义初始位置
x1, x2 = 4.5, 4.5
for i in range(50):# 轨迹列表加入相应的轨迹x1_list.append(x1)x2_list.append(x2)y_list.append(f(x1, x2))x1 = x1 - eta * gradient_x1(x1, x2)x2 = x2 - eta * gradient_x2(x1, x2)
# display(x1_list)
# display(x2_list)
# display(y_list)X1 = np.arange(-5, 5, 0.1)
X2 = np.arange(-5, 5, 0.1)
# 网状结构。
# X1看做一个列向量,会沿着行进行扩展。扩展的行数与X2元素的个数相同。
# X2看做一个行向量,会沿着列进行扩展。扩展的列数与X1元素的个数相同。
# 返回扩展之后的X1与X2。(经过扩展之后,X1与X2的形状是相同的。)
# meshgrid扩展的目的:经过扩展之后,我们就可以获得任意X1与X2中元素的组合。(例如Ptyhon zip)
X1, X2 = np.meshgrid(X1, X2)
Y = f(X1, X2)
fig = plt.figure()
# 创建3D绘图对象,在参数(figure)上进行绘图。
ax = Axes3D(fig)
# 绘制曲面图。
ax.plot_surface(X1, X2, Y, rstride=5, cstride=5, cmap="rainbow")
ax.plot(x1_list, x2_list, y_list, "bo--")

梯度下降及python实现相关推荐

  1. 梯度下降的线性回归用python_一元线性回归和梯度下降的python代码实现

    一元线性回归和梯度下降的python代码实现 2020-08-05 23:49 阅读数 9 import numpy as np import matplotlib.pyplot as plt imp ...

  2. 线形回归和梯度下降的Python实例。

    线形回归和梯度下降的Python实例. 内容模仿学习于:https://www.cnblogs.com/focusonepoint/p/6394339.html 本文只是做为一个自我梳理 线形回归的特 ...

  3. 【机器学习】梯度下降的Python实现

    作者 | Vagif Aliyev 编译 | VK 来源 | Towards Data Science 梯度下降是数据科学的基础,无论是深度学习还是机器学习.对梯度下降原理的深入了解一定会对你今后的工 ...

  4. 03机器学习--梯度下降及python实现

    目录 ①概述 ②梯度下降法简单模拟 ③多元线性回归中使用梯度下降 ④优化(梯度下降法的向量化) ⑤数据的归一化 ⑥随机梯度下降法 ⑦scikit-learn中的随机梯度下降 ⑧关于梯度的调试 ⑨总结 ...

  5. 机器学习线性回归实践,波士顿房价预测,手写梯度下降

    波士顿房价预测,手写梯度下降,python实现 数据集介绍 每条数据包含房屋以及房屋周围的详细信息.其中包含城镇犯罪率,一氧化氮浓度,住宅平均房间数,到中心区域的加权距离以及自住房平均房价等等. CR ...

  6. python二元函数求导_用Excel和python实现二元函数梯度下降的人工智能,之用,excel,一元...

    梯度下降法和牛顿法的总结与比较 机器学习的本质是建立优化模型,通过优化方法,不断迭代参数向量,找到使目标函数最优的参数向量.最终建立模型 通常用到的优化方法:梯度下降方法.牛顿法.拟牛顿法等.这些优化 ...

  7. 梯度下降原理及线性回归代码实现(python/java/c++)

    "梯度下降"顾名思义通过一步一步迭代逼近理想结果,当达到一定的精度或者超过迭代次数才退出,所以所获得的结果是一个近似值.在其他博客上面基本都有一个通俗的比喻:从山顶一步步下山.下面 ...

  8. 机器学习基础:理解梯度下降本质「附Python代码」

    https://www.toutiao.com/a6646958932096975373/ 2019-01-16 13:15:26 今天我们尝试用最简单的方式来理解梯度下降,在之后我们会尝试理解更复杂 ...

  9. 梯度下降原理及Python实现

    梯度下降算法是一个很基本的算法,在机器学习和优化中有着非常重要的作用,本文首先介绍了梯度下降的基本概念,然后使用python实现了一个基本的梯度下降算法.梯度下降有很多的变种,本文只介绍最基础的梯度下 ...

最新文章

  1. java 对比两个表的字段的差异_Joolun小程序商城 2.2.2版本上线了——Java微信快速开发平台...
  2. SpringBoot:与MyBatis合作
  3. springcloud问题
  4. FLEX:DataGrid分页.
  5. 瑞典抢发区块链数字货币 E-Krona!
  6. 二、oracle sql*plus常用命令
  7. 相关系数法程序设计 opencv C++ CSU
  8. 电磁波中的波段划分:L波段、S波段、C波段、X波段、Ku波段、K波段、Ka波段 等等旧的无线电波段划分中L、S、C、X、Ku、Ka、W波段频率分为分别是多少? 这种划
  9. 浅谈微信小程序开发工具
  10. python爬虫笔记-weikipedia数据爬取
  11. 神舟笔记本键盘键位互换
  12. css设置全局内边距为0,重置CSS - 将填充和边距设置为0?
  13. HTML5课程心得学生,HTML5培训心得体会
  14. OrCAD Capture CIS 16.6 - 为元器件添加属性
  15. 一句话木马、中国菜刀、图片一句话制作、过狗一句话
  16. 商务智能-第六章 数据挖掘
  17. 真假4K视频内容评价之我见
  18. 国企招聘:中航证券有限公司2023届校招火热进行中
  19. 【蓝桥软件学院】泛型类、泛型方法及泛型应用
  20. 一段MySQL的小总结

热门文章

  1. Gauss quadrature approximation by Lanczos algorithm
  2. 常用eclipse快捷键
  3. google adsence 盛情
  4. ibm服务器三个硬盘一般raid,ibmx335/ibmx336服务器做RAID阵列的图文方法(包括删除RAID阵列)...
  5. @Validated和@Valid使用
  6. final、finalize 和 finally
  7. SEO中长尾关键字的挖掘与布局思路
  8. Could not connect to SMTP host: smtp.163.com, port: 465, response: -1
  9. 【CSS】CSS实现三角形(一)
  10. 精通spring4.x 非扫描_巫师财经退出b站的争议,怎样评论才能显得比较精通合同法...