随机梯度下降法与梯度下降的概念区别及简单实现

经典梯度下降法的过程:
step1.确定目标函数在这里插入图片描述
目的是求出最优θ0、θ1、θ2,所以先赋初值。
step2.遍历训练样本,对模型进行训练。
分别将所以训练样本带入目标函数模型中,计算得到预测房价。将预测房价与真实房价求误差函数J(θ),再用▽定义误差度量标准。
在这里插入图片描述
我们知道曲面上方向导数的最大值的方向就代表了梯度的方向,因此我们在做梯度下降的时候,应该是沿着梯度的反方向进行权重的更新,可以有效的找到全局的最优解。根据每一个x的分量以及当时的偏差值进行θ的更新。这个θ的更新过程可以描述为:
在这里插入图片描述

梯度下降法中,每次权重的迭代过程都需要遍历所有的训练数据,在样本数量很大时,这就需要耗费更多的时间和资源。
为解决该问题,实际操作时会运用随机梯度下降法,它采用单个训练样本的损失函数在近似平均损失。

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=1e-04

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=1

while e0>=E or e1>=E or e2>=E:
    b=random.randint(0,4) #随机选取0到4中的一组数据
    i=b
    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]
else:
    Q0=Q0-a*e0
    Q1=Q1-a*e1
    Q2=Q2-a*e2
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', color='r')
ax.set_ylabel('X2', color='g')
ax.set_zlabel('h', color='b')
plt.show()
[2.58278175] [8448.67392082] [21.12753069]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值