梯度下降的实现python

import numpy as np
from matplotlib import pyplot as plt
# 创建列表,用于保存采集得到的样本
data = []
for i in range(100):
    x = np.random.uniform(-10., 10.)  # 随机采样输入x

    # 采样高四噪声
    eps = np.random.normal(0., 0.01)

    y = 1.477 * x + 0.089 + eps

    data.append([x, y])

data = np.array(data) # 转为2D Numpy数组
print(data)
x=data[:,0]
print(x)
y=data[:,1]
print(y)
plt.plot(x,y)
plt.show()

M=len(data)
lr = 0.001#学习率
w = 0
b = 0
totalloss = 0
b_grad=0
w_grad=0
iterations=30000#迭代次数

for step in range(iterations):
            b_grad = 0
            w_grad = 0
            totalloss=0
            #重点totalloss和b_grad,w_grad一定要清0因为是要从第一个算的数开始累加
            for i in range(0,len(data)):
                x = data[i, 0]
                y = data[i, 1]
                b_grad+=(2/M)*((w*x+b)-y)
                w_grad+= (2 / M) * ((w * x + b)-y)*x
                # print(x,y)
            b= b - lr * b_grad
            w= w - lr * w_grad
            #梯度记得清0很重要
            b_grad = 0
            w_grad = 0
            for i in range(0, len(data)):
                x = data[i, 0]
                y = data[i, 1]
                totalloss += ((w* x + b) - y) ** 2
            loss = totalloss / float(len(data))

            if step % 50 == 0:
                print(f"iteration:{step}, loss:{loss}, w:{w}, b:{b}")

x1=data[:,0]
y1=w*x1+b
plt.plot(x1,y1,'r')
plt.show()
# 10的-4次方

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值