繁体   English   中英

实现随机梯度下降

[英]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)产生正确的结果

10 次迭代

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM