线性回归\梯度下降python实现

线性回归\梯度下降python实现,python,list-comprehension,linear-regression,gradient-descent,Python,List Comprehension,Linear Regression,Gradient Descent,为了便于学习,我尝试从头开始使用梯度下降法实现线性回归。我的代码中有一部分真的让我头疼。由于某种原因,在我运行了一行代码之后,变量x被修改了,我不知道为什么 变量如下x和y是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] - alph

为了便于学习,我尝试从头开始使用梯度下降法实现线性回归。我的代码中有一部分真的让我头疼。由于某种原因,在我运行了一行代码之后,变量
x
被修改了,我不知道为什么

变量如下
x
y
是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循环的每次迭代都会用
zip(x,y)
的相应元素覆盖
(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)])