【机器学习】梯度下降原理

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),'*')

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/456129.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言的面向对象设计-对X264/FFMPEG架构探讨

本文贡献给ZSVC开源社区&#xff08;https://sourceforge.net/projects/zsvc/&#xff09;&#xff0c;他们是来自于中国各高校的年轻学子&#xff0c;是满怀激情与梦想的人&#xff0c;他们将用自己的勤劳与智慧在世界开源软件领域为中国留下脚步&#xff0c;该社区提供大量视…

linux gtest安装

1. 安装cmake, 具体步骤这里不详说。 2. 下载源码&#xff1a;https://codeload.github.com/google/googletest/zip/release-1.8.0 3. 解压源码&#xff1a;unzip googletest-release-1.8.0.zip 4. 进入源码目录&#xff1a;cd googletest-release-1.8.0 5. 创建并进入目录buil…

基于物联网的智能垃圾桶设计

前言 目前我国各城市包括首都正在深入开展争创国家卫生城市活动&#xff0c;这是全国爱国卫生运动委员会办公室评选命名的国家级卫生优秀城市的最高荣誉&#xff0c;是一个城市综合素质的重要标志。沈阳市正在深入开展创建国家卫生城市和建设国家健康城市(以下简称“双城双创”…

学习实践 - 收藏集 - 掘金

2道面试题&#xff1a;输入URL按回车&HTTP2 - 掘金通过几轮面试&#xff0c;我发现真正那种问答的技术面&#xff0c;写一堆项目真不如去刷技术文章作用大&#xff0c;因此刷了一段时间的博客和掘金&#xff0c;整理下曾经被问到的2道面试题 从浏览器输入URL按回车到页面显…

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

导包 import numpy as npimport matplotlib.pyplot as plt %matplotlib inlinefrom sklearn.linear_model import LinearRegression创建数据 X np.linspace(2,10,20).reshape(-1,1)# f(x) wx b y np.random.randint(1,6,size 1)*X np.random.randint(-5,5,size 1)# 噪…

跨站的艺术-XSS Fuzzing 的技巧

作者 | 张祖优(Fooying) 腾讯云 云鼎实验室 对于XSS的漏洞挖掘过程&#xff0c;其实就是一个使用Payload不断测试和调整再测试的过程&#xff0c;这个过程我们把它叫做Fuzzing&#xff1b;同样是Fuzzing&#xff0c;有些人挖洞比较高效&#xff0c;有些人却不那么容易挖出漏洞…

H.264/AVC视频压缩编码标准的新进展

H .264/AVC是由ISO/IEC与ITU-T组成的联合视频组(JVT)制定的新一代视频压缩编码标准&#xff0c;于2003年5月完成制订。相对于先前的标准&#xff0c;H.264/AVC无论在压缩效率、还是在网络适应性方面都有明显的提高&#xff0c;因此&#xff0c;业界普遍预测其将在未来的视频应用…

python注释及语句分类

注释 注释就是&#xff1a;注解&#xff0c;解释。 主要用于在代码中给代码标识出相关的文字提示(提高代码的可读性) 或 调试程序。Python中注释分为两类&#xff1a; 1.单行注释 &#xff1a; 单行注释以 # 号开头&#xff0c;在当前行内&#xff0c;# 号后面的内容就是注释…

【机器学习】回归误差:MSE、RMSE、MAE、R2、Adjusted R2 +方差、协方差、标准差(标准偏差/均方差)、均方误差、均方根误差(标准误差)、均方根解释

我们通常采用MSE、RMSE、MAE、R2来评价回归预测算法。 1、均方误差&#xff1a;MSE&#xff08;Mean Squared Error&#xff09; 其中&#xff0c;为测试集上真实值-预测值。 def rms(y_test, y): return sp.mean((y_test - y) ** 2) 2、均方根误差&#xff1a;RMSE&#xff…

大院大所合作对接会7天倒计时!亮点抢先看

为什么80%的码农都做不了架构师&#xff1f;>>> 推动产业特色发展&#xff0c;提升企业自主创新能力&#xff0c;加快成果转化落地&#xff0c;继江苏发展大会之后&#xff0c;围绕“聚力创新”&#xff0c;7月5日-6日&#xff0c;中国江苏大院大所合作对接会暨第六…

通过取父级for循环的i来理解闭包,iife,匿名函数

在使用for循环的时候&#xff0c;假如需要在循环体中添加一个匿名函数处理其他的事情&#xff0c;那么&#xff0c;在这个匿名函数内&#xff0c;如果需要用到对应的i&#xff0c;因为闭包的缘故&#xff0c;循环体循环结束后才返回i&#xff0c;所以i最终为最后一次的数值。闭…

H.264将普及 视频编码讲坛之H.264前世今生

随着HDTV等高清资源的兴起&#xff0c;H.264这个规范频频出现在我们眼前&#xff0c;HD-DVD和蓝光DVD均计划采用这一标准进行节目制作。而且自2005年下半年以来&#xff0c;无论是NVIDIA还是ATI都把支持H.264硬件解码加速作为自己最值得夸耀的视频技术。而数码播放器领域也吹来…

python命令方式和关键字

常用命名方式 不管是文件&#xff0c;变量&#xff0c;函数或类名等等&#xff0c;命名都要遵守一个基本规范&#xff0c;就是&#xff0c;命名要有意义&#xff0c;易读易懂。因此&#xff0c;两种主流的命名方式出现了&#xff0c;他们分别是驼峰命名方法 和 使用下划线分隔…

【机器学习】岭回归

import numpy as npimport matplotlib.pyplot as plt %matplotlib inlinefrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import mean_squared_error,r2_score from sklearn import datasets# CV crosss validation &#xff1a;交叉验证 from skl…

P1057 传球游戏

题目描述 上体育课的时候&#xff0c;小蛮的老师经常带着同学们一起做游戏。这次&#xff0c;老师带着同学们一起做传球游戏。 游戏规则是这样的&#xff1a;n个同学站成一个圆圈&#xff0c;其中的一个同学手里拿着一个球&#xff0c;当老师吹哨子时开始传球&#xff0c;每个同…

Keepalived 添加脚本配置监控haproxy方案

作者&#xff1a;风过无痕-唐出处&#xff1a;http://www.cnblogs.com/tangyanbo/ 上一篇文章已经讲到了keepalived实现双机热备&#xff0c;且遗留了一个问题 master的网络不通的时候&#xff0c;可以立即切换到slave&#xff0c;但是如果只是master上的应用出现问题的时候&am…

H.264编解码标准的核心技术(提供相关流程图)

最近在学习H.264编解码知识&#xff0c;上网搜了不少资料看&#xff0c;发现大多数中文资料中都缺少相应的图片&#xff0c;例如编解码流程图、编码模板等&#xff0c;这对加深理解是很有帮助 的。木有办法&#xff0c;只好回去潜心阅读《H.264_MPEG-4_Part_10_White_Paper》&a…

【机器学习】总结:线性回归求解中梯度下降法与最小二乘法的比较

在线性回归算法求解中&#xff0c;常用的是最小二乘法与梯度下降法&#xff0c;其中梯度下降法是最小二乘法求解方法的优化&#xff0c;但这并不说明梯度下降法好于最小二乘法&#xff0c;实际应用过程中&#xff0c;二者各有特点&#xff0c;需结合实际案例具体分析。 最后有…

struts2学习(3)struts2核心知识II

一、struts.xml配置&#xff1a;                                                   1.分模块配置方法&#xff1a; 比如某个系统多个模块&#xff0c;我们把资产管理模块和车辆管理模块&#xff0c;分开&#xff0c;在总…

【机器学习】逻辑斯蒂回归概率计算和手动计算对比

二分类&#xff0c;逻辑斯蒂回归概率计算 import numpy as np from sklearn import datasets from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_splitX,y datasets.load_iris(True)cond y!2X X[cond] y y[cond]resul…