[英]Implementing stochastic gradient descent
我正在尝试使用多元线性回归和 L2 范数作为损失函数来实现随机梯度下降的基本方法。
结果可以在这张图片中看到:
它与理想的回归线相去甚远,但我真的不明白为什么会这样。 我仔细检查了所有数组维度,它们似乎都合适。
下面是我的源代码。 如果有人能看到我的错误或给我一个提示,我将不胜感激。
def SGD(x,y,learning_rate):
theta = np.array([[0],[0]])
for i in range(N):
xi = x[i].reshape(1,-1)
y_pre = xi@theta
theta = theta + learning_rate*(y[i]-y_pre[0][0])*xi.T
print(theta)
return theta
N = 100
x = np.array(np.linspace(-2,2,N))
y = 4*x + 5 + np.random.uniform(-1,1,N)
X = np.array([x**0,x**1]).T
plt.scatter(x,y,s=6)
th = SGD(X,y,0.1)
y_reg = np.matmul(X,th)
print(y_reg)
print(x)
plt.plot(x,y_reg)
plt.show()
编辑:另一种解决方案是使用x = np.random.permutation(x)
对测量值进行混洗
为了说明我的评论,
def SGD(x,y,n,learning_rate):
theta = np.array([[0],[0]])
# currently it does exactly one iteration. do more
for _ in range(n):
for i in range(len(x)):
xi = x[i].reshape(1,-1)
y_pre = xi@theta
theta = theta + learning_rate*(y[i]-y_pre[0][0])*xi.T
print(theta)
return theta
SGD(X,y,10,0.01)
产生正确的结果
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.