我正在尝试从a previous question调整批量梯度下降算法来做随机梯度下降,我的成本似乎与最小值相差很远(在这个例子中,大约在1750年,当最小值出现时) 1450)。看起来,一旦达到该值,它就会在那里开始振荡。我还尝试每range(0, x.shape[0]-1)
次l
洗牌,但它没有任何区别。我预计振荡会在最佳值附近出现,但这似乎太过分了,所以我认为一定有错误。
import numpy as np
y = np.asfarray([[400], [330], [369], [232], [540]])
x = np.asfarray([[2104,3], [1600,3], [2400,3], [1416,2], [3000,4]])
x = np.concatenate((np.ones((5,1)), x), axis=1)
theta = np.asfarray([[0], [.5], [.5]])
fscale = np.sum(x, axis=0)
x /= fscale
alpha = .1
for l in range(1,100000):
for i in range(0, x.shape[0]-1):
h = np.dot(x, theta)
gradient = ((h[i:i+1] - y[i:i+1]) * x[i:i+1]).T
theta -= alpha * gradient
print ((h - y)**2).sum(), theta.squeeze() / fscale