繁体   English   中英

线性回归\\ Gradient Descent python实现

[英]Linear Regression\Gradient Descent python implementation

我正试图从头开始使用梯度下降法进行线性回归以用于学习目的。 我的代码的一部分真的很烦我。 出于某种原因,在运行一行代码之后,变量x被改变了,我不知道为什么。

变量如下。 xy是numpy数组,我给它们这个例子的随机数。

x = np.array([1, 2, 3, 4, ...., n])
y = np.array([1, 2, 3, , ...., n])
theta = [0, 0]
alpha = .01
m = len(x)

代码是:

theta[0] = theta[0] - alpha*1/m*sum([((theta[0]+theta[1]*x) - y)**2 for (x,y) in zip(x,y)])

一旦我运行上面的代码x不再是一个列表。 它只变为列表中的变量n或最后一个元素。

是的, x正在列表理解中重新分配。 为什么不只是更改那里使用的变量名称,以便它不会被覆盖?

theta[0] = theta[0] - alpha*1/m*sum([((theta[0]+theta[1]*x_i) - y_i)**2 for x_i, y_i in zip(x,y)])

正在发生的事情是,Python是计算列表zip(x,y)那么你的for循环覆盖的每次迭代(x,y)与相应元素zip(x,y) 当你的for循环终止(x,y)包含zip(x,y)[-1]

尝试

theta[0] = theta[0] - alpha*1/m*sum([((theta[0]+theta[1]*xi) - yi)**2 for (xi,yi) in zip(x,y)])

暂无
暂无

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

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