import numpy as np
import matplotlib.pyplot as plt
%matplotlib inlinef = lambda x :(x-3)**2+2.5*x-7.5
f2 = lambda x :-(x-3)**2+2.5*x-7.5

求解导数 导数为0 取最小值

x = np.linspace(-2,5,100)
y = f(x)
plt.plot(x,y)

梯度下降求最小值

#导数函数
d = lambda x:2*(x-3)*1+2.5#学习率 需调节 每次改变数值的时候,改变多少
learning_rate = 0.1min_value = np.random.randint(-3,5,size =1)[0]
print('-'*30,min_value)
#记录数据更新了,原来的值,上一步的值
min_value_last = min_value+0.1#tollerence容忍度,误差,在万分之一,任务结束
tol = 0.0001
count = 0
while True:if np.abs(min_value - min_value_last)<tol:break
#梯度下降min_value_last = min_value
#更新值min_value = min_value - learning_rate*d(min_value)print("++++++++++%d"%count,min_value)count+=1
print("*"*30,min_value)

------------------------------ -2
++++++++++0 -1.25
++++++++++1 -0.6499999999999999
++++++++++2 -0.16999999999999993
++++++++++3 0.21400000000000008
++++++++++4 0.5212000000000001
++++++++++5 0.7669600000000001
++++++++++6 0.9635680000000001
++++++++++7 1.1208544
++++++++++8 1.24668352
++++++++++9 1.347346816
++++++++++10 1.4278774528
++++++++++11 1.49230196224
++++++++++12 1.543841569792
++++++++++13 1.5850732558336
++++++++++14 1.6180586046668801
++++++++++15 1.644446883733504
++++++++++16 1.6655575069868032
++++++++++17 1.6824460055894426
++++++++++18 1.695956804471554
++++++++++19 1.7067654435772432
++++++++++20 1.7154123548617946
++++++++++21 1.7223298838894356
++++++++++22 1.7278639071115485
++++++++++23 1.7322911256892388
++++++++++24 1.735832900551391
++++++++++25 1.7386663204411128
++++++++++26 1.7409330563528902
++++++++++27 1.7427464450823122
++++++++++28 1.7441971560658498
++++++++++29 1.74535772485268
++++++++++30 1.7462861798821439
++++++++++31 1.7470289439057152
++++++++++32 1.7476231551245722
++++++++++33 1.7480985240996578
++++++++++34 1.7484788192797263
++++++++++35 1.748783055423781
++++++++++36 1.7490264443390249
++++++++++37 1.7492211554712198
++++++++++38 1.749376924376976
++++++++++39 1.7495015395015807
++++++++++40 1.7496012316012646
****************************** 1.7496012316012646

更新值learning_rate*d(max_value) 最大/最小值导数为0
就可能满足np.abs(max_value - max_value_last)<precision:
d2 = lambda x:-2*(x-3)*1+2.5
#学习率 需调节 每次改变数值的时候,改变多少
learning_rate = 0.1
max_value = np.random.randint(-3,5,size =1)[0]
print('-'*30,min_value)
#记录数据更新了,原来的值,上一步的值
max_value_last = max_value+0.1
result =[]
#tollerence容忍度,误差,在万分之一,任务结束
#precision精确度, 误差,在万分之一,任务结束
precision = 0.0001
count = 0
while True:if count>3000:
#         避免梯度消失 rate =1
#        避免梯度爆炸 导数更新值有问题时  或 rate =10breakif np.abs(max_value - max_value_last)<precision:break
#梯度下降max_value_last = max_value#更新值learning_rate*d(max_value) 最大/最小值导数为0
# 就可能满足np.abs(max_value - max_value_last)<precision:max_value = max_value + learning_rate*d2(max_value)result.append(max_value)print("++++++++++%d"%count,max_value)count+=1
print("*"*30,max_value)

------------------------------ 1.7496012316012646
++++++++++0 0.050000000000000044
++++++++++1 0.8900000000000001
++++++++++2 1.5620000000000003
++++++++++3 2.0996
++++++++++4 2.52968
++++++++++5 2.873744
++++++++++6 3.1489952
++++++++++7 3.36919616
++++++++++8 3.545356928
++++++++++9 3.6862855424
++++++++++10 3.79902843392
++++++++++11 3.889222747136
++++++++++12 3.9613781977088
++++++++++13 4.01910255816704
++++++++++14 4.065282046533632
++++++++++15 4.102225637226906
++++++++++16 4.131780509781525
++++++++++17 4.15542440782522
++++++++++18 4.174339526260176
++++++++++19 4.18947162100814
++++++++++20 4.201577296806512
++++++++++21 4.2112618374452095
++++++++++22 4.219009469956168
++++++++++23 4.225207575964935
++++++++++24 4.230166060771948
++++++++++25 4.234132848617558
++++++++++26 4.237306278894047
++++++++++27 4.239845023115238
++++++++++28 4.24187601849219
++++++++++29 4.2435008147937525
++++++++++30 4.244800651835002
++++++++++31 4.2458405214680015
++++++++++32 4.246672417174401
++++++++++33 4.247337933739521
++++++++++34 4.247870346991617
++++++++++35 4.248296277593293
++++++++++36 4.248637022074634
++++++++++37 4.248909617659708
++++++++++38 4.2491276941277665
++++++++++39 4.249302155302213
++++++++++40 4.249441724241771
++++++++++41 4.249553379393417
++++++++++42 4.249642703514733
****************************** 4.249642703514733

ret = ret= ret*stepx = np.linspace(0,6,100)
y = f2(x)
plt.plot(x,y)result = np.asanyarray(result)
plt.plot(result,f2(result),'*')

【机器学习】梯度下降原理相关推荐

  1. 机器学习 | 梯度下降原理及Python实现

    文章目录 1. 梯度下降 1.1 批量梯度下降(BGD) 1.1.1 学习率的设置 1.1.2 Python 实现 BGD 1.2 随机梯度下降(SGD) 1.2.1 Python 实现 SGD 1. ...

  2. 基于机器学习梯度下降优化算法来寻找最佳的线性回归模型

    https://www.toutiao.com/a6638782437587419652/ 幻风的AI之路 2018-12-25 18:12:27 线性回归模型 线性回归模型是一个非常简单的算法模型, ...

  3. 【机器学习】自己手写实现线性回归,梯度下降 原理

    导包 import numpy as npimport matplotlib.pyplot as plt %matplotlib inlinefrom sklearn.linear_model imp ...

  4. 梯度下降原理(SGD,Adam,BGD,momentum,Adagrad,NAG)

    近年来,AI大潮汹涌澎湃,包括机器学习,深度学习,计算机视觉,自然语言处理在内的许多领域都在迅速发展,并取得了显著的成果.每年都会有很多优秀经典的算法提出来,适用于不同的场景.However,现在网络 ...

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

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

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

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

  7. 梯度下降原理及在线性回归、逻辑回归中的应用

    1 基本概念 1)定义 梯度下降法,就是利用负梯度方向来决定每次迭代的新的搜索方向,使得每次迭代能使待优化的目标函数逐步减小. 梯度下降法是2范数下的最速下降法. 最速下降法的一种简单形式是:x(k+ ...

  8. 机器学习-梯度下降算法原理及公式推导

    目录 1.梯度下降直观理解解释 2.算法上的解释 3.常用的梯度下降法 4.梯度下降算法调优 5.其他优化算法对比 在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降算法(Gradient D ...

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

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

最新文章

  1. 程序设计原则——优化程序
  2. ASP.NET面试题 (转)
  3. Pandas基础(一)——Pandas基础
  4. 推荐一款弹出窗口插件 lhgdialog 4.2.0 正式版
  5. android 设置ios 字体大小设置,iPhone11字体大小怎么调?苹果手机调节字体大小的三种方法...
  6. 2022-03-09:我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字。 你来猜我选了哪个数字。 如果你猜到正确的数字,就会 赢得游戏 。 如果你猜错了,那么我会告诉你,我选
  7. 华为AC6605二层组网,配置无线漫游
  8. 华为服务器控制口地址修改,服务器修改管理口地址
  9. 钟汉良日记:百善孝为先,其它都靠边
  10. Guide to Elliptic Curve Cryptography (ECC椭圆曲线算法1)
  11. 基于LM324四运放的复合信号发生器(17年电赛国赛题)
  12. 从事python需要掌握哪些知识和技能_转行从事Python,需要掌握什么技能?
  13. Infor 15亿美元融资,CEO终于回应了
  14. 黑客教父龚蔚:是谁打开了潘多拉的魔盒
  15. 【iOS与EV3混合机器人编程系列之7】通过蓝牙控制EV3
  16. 免费分享Redis从入门到精通的优秀图书
  17. app定位、地图、坐标系的那些坑
  18. python - 元组,字典,集合
  19. 士林变频器面板如何调速度_变频器怎么调节速度?
  20. 全国省市,4个直辖市geoCoord数据,用于echart gl 3d地图

热门文章

  1. FreeBSD 10 将使用 Clang 编译器替换 GCC
  2. 无法转化为项目财富的技术或功能就是垃圾
  3. 技术这东西,不可不看,不可全看.
  4. IntelliJ 创建main函数、for循环、输出语句快捷键
  5. Python-21-socket编程
  6. python字符编码与转码
  7. 2进制 , 8进制 , 10进制 , 16进制 , 介绍 及 相互转换 及 快速转换
  8. webrtc 源码结构
  9. Spring Boot结合thymeleaf
  10. 前端工具--less篇