python 线性回归实现
python linear regression implementation
我一直在尝试自己实现一个简单的线性回归算法,但我在梯度下降方面遇到了一些问题。
这是我的编码方式:
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 的广播之前,我尝试迭代每个值并得到相同的结果。
如果有人能阐明这里可能存在的问题,那就太好了。
很明显,参数偏离了最佳参数。一个可能的原因可能是您使用的学习率值太大 ("alpha")。尝试降低学习率。这是一个经验法则。总是从一个小值开始,比如 0.001。然后尝试通过采用比以前高三倍的学习率来提高学习率。如果它给出的 MSE 错误较少(或您使用的任何错误函数),那么它很好。如果不是,请尝试取 0.001 到 0.003 之间的值。接下来,如果后者成立,则递归尝试此操作,直到达到令人满意的 MSE。
我一直在尝试自己实现一个简单的线性回归算法,但我在梯度下降方面遇到了一些问题。
这是我的编码方式:
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 的广播之前,我尝试迭代每个值并得到相同的结果。
如果有人能阐明这里可能存在的问题,那就太好了。
很明显,参数偏离了最佳参数。一个可能的原因可能是您使用的学习率值太大 ("alpha")。尝试降低学习率。这是一个经验法则。总是从一个小值开始,比如 0.001。然后尝试通过采用比以前高三倍的学习率来提高学习率。如果它给出的 MSE 错误较少(或您使用的任何错误函数),那么它很好。如果不是,请尝试取 0.001 到 0.003 之间的值。接下来,如果后者成立,则递归尝试此操作,直到达到令人满意的 MSE。