2017-02-26 158 views
1

我现在正在做线性回归分析。输入变量是Size。输出变量是Price。我将这组数据存储在二维数组中。我知道使用NumPy很容易进行分析,但我的教授告诉我只用循环来执行迭代。 Formula of interation is shown as the picture in the hyperlink。因此,我决定下面的代码来执行计算:简单线性回归使用for循环只能用于Python

#Structure of array (Stored in float), with structure like this [Room, Price] 
array = [[4.0, 399.9], [5.0, 329.9], [6.0, 369.0]] 

#Set initial value 
theta_price = 0 
theta_room = 0 
stepsize = 0.01 
item = 3 

#Perform iterations 
for looping in range(0, 50): #Loop 50 times 
    for j in array[0]: #Call the value stored in array[0] 
     for k in array[1]: #Call the value stored in array[1] 
      theta_price_1 = theta_price - stepsize * (1/item) * (sum((theta_price + theta_room * int(j) - int(k)))#Perform iterations of theta 0 
      theta_room_1 = theta_room - stepsize * (1/item) * (sum((theta_price + t + theta_room * int(j) - int(k))*int(j)))#Perform iterations of theta 1 
      #Bring the new theta value to the next loop 
      theta_price = theta_price_1 
      theta_room = theta_room_1 
      print(theta_price,theta_room)#Print the result for every loop 

上面的代码,错误消息在线路10没有起作用的是:

'int' object is not iterable 

但是如果删除的总和函数,它的工作原理计算结果不正确。因此,我知道它的sum函数和数组有一些问题,但我不知道如何解决它?

+0

在每次迭代中,'sum'应该应用于所有'x'和'y','array [0]'和'arrary [1]',但不是其中的一个。 – zsrkmyn

回答

0

正如我在评论中提到的,sum应该适用于每次迭代中的所有元素,这就是批处理梯度下降的作用。因此,代码应该是:

theta_price = 0 
theta_room = 0 
stepsize = 0.1 
item = 5 
#Perform iterations 
array = [ 
      [0,1,2,3,4], 
      [5,6,7,8,9], 
     ] 

for looping in range(0, 500): #Loop 50 times 
     theta_price = theta_price - stepsize * (1/item) * (sum([theta_price + theta_room * int(j) - int(k) for j, k in zip(array[0], array[1])]))#Perform iterations of theta 0 
     theta_room = theta_room - stepsize * (1/item) * (sum([(theta_price + theta_room * int(j) - int(k)) * int(j) for j, k in zip(array[0], array[1])]))#Perform iterations of theta 1 
     print(theta_price,theta_room)#Print the result for every loop 

经过500次迭代的5个测试数据,我可以得到结果:

4.999999614653767 1.0000001313279816 

这也在意料之中。

+0

谢谢您的回答,但是,如果数组是二维数组,则答案不正确。我刚刚添加了数组的格式以供参考。我试图通过以下方式改进答案: 对于j [0],k [0]在数组 进行此更改的原因是,使用此格式查找“for a in array”时的意思似乎很有用。然而,错误信息与预期的缩进块一起出现。如何更改答案以适应我的情况。 –

+0

然后你可以使用'numpy.array'来方便。 – zsrkmyn

+0

正如我所提到的,我不想尽可能多地使用NumPy,我想修改for循环来申请我的数组。 –