随机梯度下降法

标准梯度下降是在权值更新前对所有样例汇总误差,
而随机梯度下降的权值是通过考查某个训练样例来更新的。

在原来梯度下降的基础上,只需要在循环体内做一些改动,从五组数据中任取一组进行不断训练迭代

x=random.randint(0,4)  

随机梯度下降训练速度很快,而批量梯度下降法在样本量很大的时候,训练速度不能让人满意。

完整代码:

import numpy as np
from mpl_toolkits.mplot3d import Axes3D 
import random
import matplotlib.pyplot as plt

x = np.array([[2104,3], [1600,3], [2400,3], [1416,2],[3000,4]])
t = np.array([400,330,369,232,540])
alpha = 0.1
theta0 = np.random.random()
theta1 = np.random.random()
theta2 = np.random.random()
theta=np.array([theta1,theta2])

eps = 10e-4
for i in range(0,2):
    e0 = 0.5 * (np.sum((x[:, i] * theta[i])) + theta0 - t[i])
    e1 = e0 * x[1, i]
    e2 = e0 * x[2, i]
while e0 >= eps or e1 >= eps or e2 >= eps:
    x=random.randint(0,4)                   #从5组数据中随机选取一组进行迭代
    i=0
    theta0 = theta0 - alpha * e0
    theta1 = theta1 - alpha * e1
    theta2 = theta2 - alpha * e2
    i+=1
print(theta0, theta1, theta2)


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=theta0+(theta1*X1+theta2*X2)
plt.title("Graph") #图像标题
ax.plot_surface(X1, X2, h , rstride=1, cstride=1, cmap=plt.cm.coolwarm, alpha=0.5) #用取样点(x,y,z)去构建曲面
ax.set_xlabel('X1 Room Size', color='b')
ax.set_ylabel('X2 Number of Room', color='g')
ax.set_zlabel('h Price of House', color='b')
plt.show()#显示模块中的所有绘图对象

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值