题目描述:

自定义一个可微并且存在最小值的一元函数,用梯度下降法求其最小值。并绘制出学习率从0.1到0.9(步长0.1)时,达到最小值时所迭代的次数的关系曲线,根据该曲线给出简单的分析。

代码:

# -*- coding: utf-8 -*-
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import numpy as np
import matplotlib.pyplot as plt
plot_x=np.linspace(-1,6,150)   #在-1到6之间等距的生成150个数
plot_y=(plot_x-2.5)**2+3       # 同时根据plot_x来生成plot_y(y=(x-2.5)²+3)plt.plot(plot_x,plot_y)
plt.show()###定义一个求二次函数导数的函数dJ
def dJ(x):return 2*(x-2.5)###定义一个求函数值的函数J
def J(x):try:return (x-2.5)**2+3except:return float('inf')x=0.0                           #随机选取一个起始点
eta=0.1                         #eta是学习率,用来控制步长的大小
epsilon=1e-8                    #用来判断是否到达二次函数的最小值点的条件
history_x=[x]                   #用来记录使用梯度下降法走过的点的X坐标
count=0
min=0
while True:gradient=dJ(x)              #梯度(导数)last_x=xx=x-eta*gradienthistory_x.append(x)count=count+1if (abs(J(last_x)-J(x)) <epsilon):       #用来判断是否逼近最低点min=xbreakplt.plot(plot_x,plot_y)
plt.plot(np.array(history_x),J(np.array(history_x)),color='r',marker='*')   #绘制x的轨迹
plt.show()print'min_x =',(min)
print'min_y =',(J(min))         #打印到达最低点时y的值
print'count =',(count)sum_eta=[]
result=[]
for i in range(1,10,1):x=0.0                           #随机选取一个起始点eta=i*0.1sum_eta.append(eta)epsilon=1e-8                    #用来判断是否到达二次函数的最小值点的条件num=0min=0while True:gradient=dJ(x)              #梯度(导数)last_x=xx=x-eta*gradientnum=num+1if (abs(J(last_x)-J(x)) <epsilon):       #用来判断是否逼近最低点min=xbreakresult.append(num)#记录学习率从0.1到0.9(步长0.1)时,达到最小值时所迭代的次数plt.scatter(sum_eta,result,c='r')
plt.plot(sum_eta,result,c='r')
plt.title("relation")
plt.xlabel("eta")
plt.ylabel("count")
plt.show
print(result)

运行结果:


结果分析:
函数y=(x-2.5)²+3从学习率和迭代次数的关系图上我们可以知道当学习率较低时迭代次数较多,随着学习率的增大,迭代次数开始逐渐减少,当学习率为0.5时迭代次数最少,之后随着学习率的增加,迭代次数开始增加,当学习率为0.9时迭代次数和0.1时相等。关于0.5成对称分布。

Python 梯度下降法相关推荐

  1. Python梯度下降法实现二元逻辑回归

    Python梯度下降法实现二元逻辑回归 二元逻辑回归假设函数 定义当函数值大于等于0.5时,结果为1,当函数值小于0.5时,结果为0.函数的值域是(0, 1). 二元逻辑回归的损失函数 上图为二元逻辑 ...

  2. python梯度下降法实现线性回归_梯度下降法的python代码实现(多元线性回归)

    梯度下降法的python代码实现(多元线性回归最小化损失函数) 1.梯度下降法主要用来最小化损失函数,是一种比较常用的最优化方法,其具体包含了以下两种不同的方式:批量梯度下降法(沿着梯度变化最快的方向 ...

  3. 【梯度下降法】Python 梯度下降法拟合正弦曲线 多项式函数傅里叶函数

    问题: 梯度下降法拟合正弦曲线   此处以三次函数为例,其他的函数拟合同理     1.梯度下降法原理   梯度下降相关公式   拟 合 的 函 数 : h ( x ) = ∑ i = 0 n θ i ...

  4. 机器学习之用Python梯度下降法实现预测

    贷款额度预测 求解:当工资18000.年龄30时,额度是多少? 由于房价和这个贷款相同,而贷款是多个参数所以只写这贷款即可. 老师写的代码!使用批量式梯度下降. 梯度下降法: import numpy ...

  5. python 梯度下降法实现一元线性回归

    一.简单过一下算法流程 ''' 梯度下降法实现一元线性回归 一元线性函数: y = ax + b 实际数据服从: y = x + 2 初始模型: y = 0.1*x + 0.1 ''' import ...

  6. python梯度下降法实现线性回归_【机器学习】线性回归——多变量向量化梯度下降算法实现(Python版)...

    [向量化] 单一变量的线性回归函数,我们将其假设为:hθ(χ)=θ0+θ1χh_\theta(\chi)=\theta_0+\theta_1\chihθ​(χ)=θ0​+θ1​χ但是如果我们的变量个数 ...

  7. 最优化算法python实现篇(4)——无约束多维极值(梯度下降法)

    最优化算法python实现篇(4)--无约束多维极值(梯度下降法) 摘要 算法简介 注意事项 算法适用性 python实现 实例运行结果 算法过程可视化 摘要 本文介绍了多维无约束极值优化算法中的梯度 ...

  8. 【深度学习的数学】2-11 用Excel体验梯度下降法(用python实现)

    梯度下降法是神经网络计算的基础,下面我们用python编程来体验它! 代码 # -*- coding: utf-8 -*- """ @File : 梯度下降法求函数最小值 ...

  9. python sklearn 梯度下降法_(四)梯度下降法及其python实现

    梯度 梯度,什么是梯度?梯度的本意是一个向量,表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模). 在微积分里面,对多元函 ...

最新文章

  1. 一个6年的菜鸟,在4年之前做的一些功能(二)
  2. 【每日一算法】杨辉三角到底是什么?
  3. 量子计算机神器,量子计算技术再获神器 科学家开发出新的成像技术
  4. XCode 4.3 不使用新特性 适用低版本的的项目 不是初学者就可以跳过了(转)
  5. 东南亚跨境电商蓬勃发展,马来西亚市场分析及选品
  6. Uboot分析(三)
  7. 数据库备份还原顺序关系(环境:Microsoft SQL Server 2008 R2)
  8. 关于pragma pack的用法(一)
  9. 阿里云服务器发送邮件失败?连接超时?25端口被封?
  10. 计算机软件需求规格说明规范_太阳能(光伏)组件安全规范测试简介_丙观科技
  11. 在Sharepoint Designer 2007 中加入定制的工作流动作
  12. 前端关于html的面试题,关于java:前端面试HTML面试题汇总
  13. 自己的mySql用户
  14. 做一个完整的Java Web项目需要掌握的技能[转]
  15. Photoshop插件-黑白(二)-脚本开发-PS插件
  16. 推荐10款最好的Python开发编辑器
  17. ps html 优化,photoshop越用越卡的解决方法,ps性能优化教程
  18. 织梦木马 data.php,DedeCMS后门木马专杀工具V2.0
  19. 基于I2C协议的AHT20温湿度传感器的数据采集及OLED屏显示
  20. 如何投稿iMeta期刊?ScholarOne投审稿系统作者使用教程

热门文章

  1. 网友写的ELK安装步骤
  2. 第十一章 异常,日志,断言和调试
  3. 在ssh项目中的中配置数据源c3p0
  4. ecshop几个价格
  5. 关于Windows Phone 7开发工具离线安装包
  6. VMware View 5万点虚拟桌面项目案例详析
  7. 使用js实现时钟效果
  8. SVN无法commit解决办法
  9. 察看ABAP程序各项参数限制的情况
  10. 项目中用到的BAPI合集