梯度下降算法

这篇博客介绍了如何使用Python的matplotlib和numpy库绘制3D坐标系,并展示了一个基于随机初始值的优化算法过程。算法通过迭代更新三个参数Q0、Q1和Q2来拟合数据,目标是使误差小于给定阈值E。博客中的数据集包含房间平米数和房间数量,用于预测价格。最终,展示了3D图像来直观地表示价格与房间大小的关系。
摘要由CSDN通过智能技术生成
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D   #绘制3D坐标的函数  
import numpy as np
import random
Q0=random.random()
Q1=random.random()
Q2=random.random()
a=0.01

#e=2.718
#E=float(10*e^(-4))
E=float(0.18)

x=np.array([[2104,3],
           [1600,3],
           [2400,3],
           [1416,2],
           [3000,4]])
t=np.array([[400],
           [330],
           [269],
           [232],
           [540]])
e0=1
e1=1
e2=1
h=0

for i in range(0,5):
    if e0<=E and e1<=E and e2<=E:
        Q0=Q0-a*e0
        Q1=Q1-a*e1
        Q2=Q2-a*e2
    else:
        h=Q0+Q1*x[i,0]+Q2*x[i,1]
        e0=h-t[i]
        e1=((h-t[i])+e0)*x[i,0]
        ey=h-t[i]+e0
        e2=((h-t[i])+e0+ey)*x[i,1]

print(Q0,Q1,Q2)


fig1=plt.figure()#创建一个绘图对象  
ax=Axes3D(fig1)#用这个绘图对象创建一个Axes对象(有3D坐标)  

X1,X2=np.mgrid[0:10000:500j, 0:50:500j]  # 从0到10000生成500个房间平米数X1,从0到50生成500个房间数X2
h=Q0+(Q1*X1+Q2*X2)
plt.title("tu xiang") #图像标题
ax.plot_surface(X1, X2, h , rstride=1, cstride=1, cmap=plt.cm.coolwarm, alpha=0.5) #用取样点(x,y,z)去构建曲面
ax.set_xlabel('X1 da xiao', color='r')
ax.set_ylabel('X2 fang jian shu', color='g')
ax.set_zlabel('h jia ge', color='b')
plt.show()#显示模块中的所有绘图对象  

Q0,Q1,Q2运算结果:

0.4384509805264243 0.2597911172922398 0.8375446236391644

生成图像:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值