算法实现——多元梯度

y = 2 + 3✖️size - 4✖️years + 2✖️floors

#y = theta_0 + theta_1 * size - theta_2 * years + theta_3 * floors
import numpy as np
m = 10
size = np.random.randint(80,120,10)
years = np.random.randint(1,10,10)
floors = np.random.randint(1,20,10)
labels = 2 + 3*size - 4*years + 2*floors
def sgd (lr, m):
    theta0, theta1, theta2, theta3 = 0, 0, 0, 0
    grad_theta0, grad_theta1, grad_theta2, grad_theta3 = 0, 0, 0, 0
    for a in range(1000):
        for i in range(m):
            grad_theta0 += theta0 + theta1*size[i] + theta2*years[i] + theta3*floors[i] - labels[i]
            grad_theta1 += (theta0 + theta1*size[i] + theta2*years[i] + theta3*floors[i] - labels[i]) * size[i]
            grad_theta2 += (theta0 + theta1*size[i] + theta2*years[i] + theta3*floors[i] - labels[i]) * years[i]
            grad_theta3 += (theta0 + theta1*size[i] + theta2*years[i] + theta3*floors[i] - labels[i]) * floors[i]
            #print(grad_theta0)
        theta0 -= lr * grad_theta0 / m
        theta1 -= lr * grad_theta1 / m
        theta2 -= lr * grad_theta2 / m
        theta3 -= lr * grad_theta3 / m
        grad_theta0, grad_theta1, grad_theta2, grad_theta3 = 0, 0, 0, 0
    print (theta0)
lr = 0.001
sgd (lr, m)

问题1:1/2=0
在这里插入图片描述

import numpy as np
size = nd.random.randint(80,120,20)

这里使用的numpy结果用mxnet的ndarray去获取随机数去了。
正确改法:
size = nd.random.randint(80,120,20)
问题2:不收敛。还未解决。
//20201020晚解决
需要对数据集进行归一化。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值