python简单批量梯度下降代码怎么写
发表于:2025-11-11 作者:千家信息网编辑
千家信息网最后更新 2025年11月11日,python简单批量梯度下降代码怎么写,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。简单批量梯度下降代码其中涉及到公式alpha表示超参
千家信息网最后更新 2025年11月11日python简单批量梯度下降代码怎么写
python简单批量梯度下降代码怎么写,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
简单批量梯度下降代码
其中涉及到公式
alpha表示超参数,由外部设定。过大则会出现震荡现象,过小则会出现学习速度变慢情况,因此alpha应该不断的调整改进。


注意1/m前正负号的改变
Xj的意义为j个维度的样本。
下面为代码部分
import numpy as np#该处数据和linear_model中数据相同x = np.array([4,8,5,10,12])y = np.array([20,50,30,70,60])#一元线性回归 即 h_theta(x)= y= theta0 +theta1*x#初始化系数,最开始要先初始化theta0 和theta1theta0,theta1 = 0,0#最开始梯度下降法中也有alpha 为超参数,提前初始化为0.01alpha = 0.01#样本的个数 ,在梯度下降公式中有xm = len(x)#设置停止条件,即梯度下降到满足实验要求时即可停止。# 方案1:设置迭代次数,如迭代5000次后停止。#(此处为2)方案2:设置epsilon,计算mse(均方误差,线性回归指标之一)的误差,如果mse的误差《= epsilon,即停止#在更改epsilon的次数后,越小,迭代次数会越多,结果更加准确。epsilon = 0.00000001#设置误差error0,error1 = 0,0#计算迭代次数cnt = 0def h_theta_x(x): return theta0+theta1*x#接下来开始各种迭代#"""用while 迭代"""while True: cnt+=1 diff=[0,0] #该处为梯度,设置了两个梯度后再进行迭代,梯度每次都会清零后再进行迭代 for i in range(m): diff[0]+=(y[i]-h_theta_x(x[i]))*1 diff[1]+=(y[i]-h_theta_x(x[i]))*x[i] theta0 = theta0 + alpha * diff[0] / m theta1 = theta1 + alpha * diff[1] / m #输出theta值 # "%s"表示输出的是输出字符串。格式化 print("theta0:%s,theta1:%s"%(theta0,theta1)) #计算mse for i in range(m): error1 +=(y[i]-h_theta_x(x[i]))**2 error1/=m if(abs(error1-error0)<=epsilon): break else: error0 = error1print("迭代次数:%s"%cnt)#线性回归结果:5.714285714285713 1.4285714285714448 87.14285714285714#批量梯度下降结果:theta0:1.4236238440026219,theta1:5.71483960227916 迭代次数:3988#在更改epsilon的次数后,越小,迭代次数会越多,结果更加准确。在线性模型的代码(代码可参见另一条文章)中,得到运算结果a,b的值,与梯度下降后得到的结果theta0和theta1相近。增加实验次数(如修改epsilon的次数)可以得到更为相近的结果。
运行完毕后发现其实该处理方式并不理想
因为梯度下降开始后,theta数量会增加,即变量也会增加。每次增加都需要重新编写其中的循环和函数。
因此可以将他们编写成向量的形式
import numpy as np#X_b = np.array([[1,4],[1,8],[1,5],[1,10],[1,12]])#y = np.array([20,50,30,70,60])#改写成向量形式#运用random随机生成100个样本np.random.seed(1)X = 2 * np.random.rand(100, 1)y = 4 + 3 * X + np.random.rand(100, 1)X_b = np.c_[np.ones((100, 1)), X]#print(X_b)#此处的learning_rate 就是alphalearning_rate = 0.01#设置最大迭代次数,避免学习时间过长n_iterations = 10000#样本格数m = 100#初始化thata, w0...wn,初始化两个2*1 的随机数theta = np.random.randn(2, 1)#不会设置阈值,直接设置超参数,迭代次数,迭代次数到了,我们就认为收敛了。先看结果,如果结果不好就去调参for _ in range(n_iterations): #接着求梯度gradient,这儿的梯度是n个梯度。即x* (h_theta - y) #会得到一次迭代的n个theta值 gradients = 1/m * X_b.T.dot(X_b.dot(theta)-y) #应用公式调整theta的值,theta_t + 1 = theta_t - grad * learning_rate , 是一个向量 theta = theta - learning_rate * gradientsprint(theta)
看完上述内容,你们掌握python简单批量梯度下降代码怎么写的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!
梯度
迭代
次数
结果
代码
样本
误差
公式
参数
向量
线性
输出
相近
两个
内容
形式
数据
方案
方法
更多
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
微信加好友软件开发
东莞鑫动网络技术
自建服务器可以吗
风豹互联网科技为什么扣款
南京品质软件开发销售公司
数据库生成流程图
北京邮件大学网络技术研究院
惠盈理财服务器上不去
法院有网络技术科吗
设备分类数据库表
2网络安全绘画文案
第三方软件开发哪家便宜
佳智软件开发有限责任公司
南京大学软件学院复试数据库
网络安全离我们有多远中国公开课
哈尔滨游戏软件开发公司排名
小蝌蚪互联网科技广州
jsp使用数据库的表格
珲春怡丰软件开发有限公司
安徽一对一网络技术服务哪家好
新疆网络安全电话
网络安全专业人才缺口
支付宝网络安全研发团队
中国网络安全的基本内容
南京网络安全常识学习
匿名登录ftp服务器
延庆区正规软件开发经历
数据库磁盘有多大怎么看
软件开发一等奖
烟台的网络安全公司排名