2016-09-13 141 views
2

我一直在试图做我自己的一个简单的线性回归算法的实现,但我有一些梯度下降的麻烦。python线性回归实现

这里是我如何编码它:

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学习课程的梯度下降算法:

enter image description here

但经过〜90次迭代我得到无限值(在特定的数据集),并且没有现在已经能够把我的头包裹起来了。

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

如果任何人都可以对这里可能存在的问题有所了解,那就太好了。

回答

1

很明显,参数与最优参数不一致。一种可能的原因可能是您对学习率(“alpha”)使用的值太大。尝试降低学习率。这是一条经验法则。始终从0.001这样的小数值开始。然后尝试提高学习率,学习率比以前提高三倍。如果它给出更少的MSE错误(或者你正在使用的任何错误函数),那么它很好。如果不尝试取0.001和0.003之间的值。接下来,如果后者成立,那么递归地尝试,直到达到令人满意的MSE。

+0

我已经试过0.001,它不工作,但我再次尝试以更低的学习率,0.0000001,它开始正常工作,谢谢你! 我没有使用任何类型的错误函数,也许我会试着看看它后。 – msk