【问题标题】:python linear regression implementationpython线性回归实现
【发布时间】:2017-01-21 13:13:57
【问题描述】:

我一直在尝试自己实现一个简单的线性回归算法,但在梯度下降方面遇到了一些问题。

这是我的编码方式:

def gradientDescentVector(data, alpha, iterations):
    a = 0.0
    b = 0.0
    X = data[:,0]
    y = data[:,1]
    m = data.shape[0]
    it = np.ones(shape=(m,2))
    for i in range(iterations):
        predictions = X.dot(a).flatten() + b

        errors_b = (predictions - y)
        errors_a = (predictions - y) * X

        a = a - alpha * (1.0 / m) * errors_a.sum()
        b = b - alpha * (1.0 / m) * errors_b.sum()
    return a, b

现在,我知道这不会随着更多变量很好地扩展,但我只是先尝试​​使用简单版本,然后从那里跟进。

我正在学习 coursera 机器学习课程中的梯度下降算法:

但是在大​​约 90 次迭代后(在特定数据集上)我得到了无限的值,到目前为止我还无法理解这一点。

在了解 numpy 的广播之前,我已经尝试迭代每个值并得到相同的结果。

如果有人能阐明这里可能存在的问题,那就太好了。

【问题讨论】:

    标签: python numpy machine-learning linear-regression


    【解决方案1】:

    很明显,参数与最佳参数不同。一个可能的原因可能是您使用了太大的学习率值(“alpha”)。尝试降低学习率。这是一个经验法则。总是从一个小的值开始,比如 0.001。然后尝试通过采用比以前高三倍的学习率来提高学习率。如果它提供较少的 MSE 错误(或您正在使用的任何错误函数),那么它很好。如果不是,请尝试取 0.001 到 0.003 之间的值。接下来,如果后者成立,则递归地尝试此操作,直到达到令人满意的 MSE。

    【讨论】:

    • 我已经尝试了 0.001 但它不起作用,但我以更低的学习率 0.0000001 再次尝试,它开始正常工作,谢谢!虽然我没有使用任何类型的错误函数,但也许我会在之后尝试调查它。