基于梯度下降的线性回归求解问题

题目:建立线性回归模型。

求解方法:梯度下降法。

预处理:将living area缩小1000倍,price缩小100倍。

 

 大题思路:

1)使用np.array将样本存到矩阵中

2)定义函数hy用来求解每一次沿梯度方向下降后的th0,th1和th2。相比于每次训练一个样本,因为已知的样本数目有限,所以每次训练的时候,训练所有的样本,即训练5个样本。沿梯度方向下降的时候,求的是平均梯度。

3)最后在for循环中,定义循环的次数,来代表训练的次数,可以不断地增加训练的次数,直到th0,th1,th2收敛到我们想要的值。

import numpy as np
#h = th0+th1*x1+th2*x2
#J = 1/2*(h - y)**2
th0 = 0
th1 = 0
th2 = 1
alpha = 0.1
data = np.array([[2.104,3,4],
                [1.600,3,3.3],
                [2.400,3,3.69],
                [1.416,2,2.32],
                [3,4,5.4],
                 ])

def hy(th0,th1,th2,alpha,data):
    loss = 0
    bp0 = 0
    bp1 = 0
    bp2 = 0
    for i in data:
        loss += 1/2*(th0+th1*i[0]+th2*i[1]-i[2])**2
        bp0 += th0+th1*i[0]+th2*i[1]-i[2]
        bp1 +=(th0+th1*i[0]+th2*i[1]-i[2])*i[0]
        bp2 +=(th0+th1*i[0]+th2*i[1]-i[2])*i[1]
    N = len(data)
    loss = loss/N
    bp0 = bp0 / N
    bp1 = bp1 / N
    bp2 = bp2 / N
    th0 = th0 -alpha*bp0
    th1 = th1 -alpha*bp1
    th2 = th2 - alpha*bp2
    return loss,th0,th1,th2

for loop in range(2000):
    j,th0,th1,th2 = hy(th0,th1,th2,alpha,data)
#    print(f"j={j:.4f},th0={th0:.4f},th1={th1:.4f},th2={th2:.4f}")
    print(j,th0,th1,th2)


收敛结果如下:

 其中j为损失。

也可以使用while循环,当梯度达到我们的要求,比如梯度0.001的时候,结束循环。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值