使用梯度下降法计算线性回归模型的参数值

人工智能 机器学习 线性回归
2021-10-22 12:12:42

考虑以下具有一个输入 (x) 和一个输出 (y) 的数据:
(x=1, y=2)
(x=2, y=1)
(x=3, y=2)
对此数据应用线性回归, 使用假设hΘ(x)=Θ0+Θ1x, 在哪里Θ0Θ1表示要学习的参数。考虑初始值Θ0= 1.0,并且Θ1= 0.0,学习率 0.1,值是多少Θ0Θ1在梯度下降的前三次迭代之后

从最小二乘法我得到了关于的导数Θ0Θ1并代入初始值得到斜率/截距并乘以学习率0.1得到步长。步长用于计算新的Θ0Θ1价值观。

我正进入(状态Θ0遵循上述内容时为 1.7821。请让我知道该方法是否遵循并且解决方案是否正确或有更好的方法来解决

1个回答
X = np.array([1,2,3])
Y = np.array([2,1,2])

params = np.array([1, 0])

def loss(y, yhat):
    return ((y - yhat)**2).mean()

def model(x):
    return params[0] + params[1]*x

def loss_grad(y, yhat, x):
    return np.array([(2*(yhat-y)).mean(), (2*(yhat-y)*x).mean()])

lr = .1
for _ in range(3):
    yhat = model(X)
    l = loss(Y, yhat)
    g = loss_grad(Y, yhat, X)
    params = params - lr*g
    print(f'thetas are now {params} with new loss of {loss(Y, yhat)}')

输出

thetas are now [1.13333333 0.26666667] with new loss of 0.6666666666666666
thetas are now [1.13333333 0.23111111] with new loss of 0.2696296296296296
thetas are now [1.14755556 0.22874074] with new loss of 0.262887242798354

我也用 keras 仔细检查了这一点,但是在 numpy 中我明确写了渐变,我建议仔细检查你的渐变或算术