3

我試圖從頭開始使用漸變下降方法進行線性迴歸用於學習目的。我的代碼的一部分真的讓我煩惱。出於某種原因,變量x在我運行一行代碼後被改變,我不知道爲什麼。線性迴歸漸變下降python實現

變量如下。 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或列表中的最後一個元素。

回答

4

正在發生的事情是,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)]) 
+0

有道理,謝謝! – user1596466 2013-02-21 03:09:53

4

是的,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)])