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

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;该社区提供大量视…

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

导包 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硬件解码加速作为自己最值得夸耀的视频技术。而数码播放器领域也吹来…

【机器学习】岭回归

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…

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…

【机器学习】六种算法在人脸补全中的应用比较(K紧邻,线性,决策树,岭回归,套索回归,ElasticNet)

需求&#xff1a; 根据人的上半边脸预测下半边脸&#xff0c;用各种算法取得的结果与原图比较 思考&#xff1a; 这是一个回归问题&#xff0c;不是分类问题&#xff08;人脸数据不固定&#xff09; 数据集一共包含40个人&#xff0c;每一个人10张照片&#xff0c;分布规律 每…

QuickTime文件格式解析

QuickTime文件格式解析Peter Lee 2008-06-14 一、简介 QuickTime是Apple公司开发的一套完整的多媒体平台架构&#xff0c;可以用来进行多种媒体的创建&#xff0c;生产&#xff0c;和分发&#xff0c;并为这一过程提供端到端的支持&#xff1a;包括媒体的实时捕捉&#xff0c;…

python的数据类型转换

数据类型转换 将数据由当前类型变化为其他类型的操作就是数据类型转换。数据类型转换分为两类&#xff0c;分别是自动数据类型转换 和 强制数据类型转换。 自动转换(隐式转换) 自动转换时程序根据运算要求进行的转换&#xff0c;不许要人工干预。 1.自动类型转换不需要人工干…

Linux文件属性及如何修改文件属性

ls -al:显示文件的文件名与相关属性并列出所有文件详细的权限与属性 dr-xr-x---. 7 root root 4096 Apr3 12:31 . 权限 连接 所有者 用户组 文件容量 修改日期 文件名 第一个字符代表这个文件是“目录&#xff0c;文件&#x…

SyntaxError:identifier starts immediately after numeric literal

1、错误描写叙述2、错误原因因为在改动方法传參的过程&#xff0c;须要传个id&#xff0c;可是这个id是字符串类型&#xff0c;传入的是数值型3、解决的方法在传參时&#xff0c;须要加入“”&#xff0c;变成字符串类型User.modify("id");