【发布时间】:2021-01-27 08:17:49
【问题描述】:
我想尝试自己实现梯度下降,我写了这个:
# Creating random sample dataset
import random as rnd
dataset = []
for i in range(0, 500):
d_dataset = [i, rnd.randint((i-4), (i+4))]
dataset.append(d_dataset)
def gradient_descent(t0, t1, lrate, ds):
length = len(ds)
c0, c1 = 0, 0
for element in ds:
elx = element[0]
ely = element[1]
c0 += ((t0 + (t1*elx) - ely))
c1 += ((t0 + (t1*elx) - ely)*elx)
t0 -= (lrate * c0 / length)
t1 -= (lrate * c1 / length)
return t0, t1
def train(t0, t1, lrate, trainlimit, trainingset):
k = 0
while k < trainlimit:
new_t0, new_t1 = gradient_descent(t0, t1, lrate, trainingset)
t0, t1 = new_t0, new_t1
k += 1
return t0, t1
print(gradient_descent(20, 1, 1, dataset))
print(train(0, 0, 1, 10000, dataset))
每当我运行它时,我都会从 gradient_descent() 得到一些正常的输出,但我会从 train() 函数得到 (nan, nan)。我尝试使用输入(0, 0, 1, 10, dataset) 运行train,我得到了这个值(-4.705770241957691e+46, -1.5670167612541557e+49),这似乎非常错误。
请告诉我我做错了什么以及如何解决这个错误。抱歉,如果之前有人问过这个问题,但我找不到任何关于如何修复 nan 错误的答案。
【问题讨论】:
-
在某些迭代中是否有可能
length = 0?因为那会导致除以零
标签: python python-3.x linear-regression nan gradient-descent