2017-02-26 7 views
1

私は現在、線形回帰分析を行っています。入力変数はSizeです。出力変数はPriceです。私は2D配列にデータのセットを格納します。私はNumPyを使って分析するのは簡単ですが、私の教授はforループを使って反復を実行するように指示しました。 Formula of interation is shown as the picture in the hyperlink。したがって、私は計算を実行するには、次のコードを決めた:forループを使用した単純な線形回帰

#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

あなたのケースでは、 'it'は' x'と 'y'、' array [0] 'と' arrary [1] 'に適用されるべきです。 – zsrkmyn

答えて

0

私がコメントで触れたように、sumは、各反復のすべての要素に適用する必要があります。これがBatch Gradient Descentと同じです。だから、コードは次のようになります。期待されている

4.999999614653767 1.0000001313279816 

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 

5テストデータと500回の反復の後、私は結果を得ることができます。

+0

あなたの答えをありがとう、しかし、配列が2D配列の場合、答えは正しくありません。私はちょうど参考のために配列のフォーマットを追加しました。私は以下のように答えを改善しようとしました: j [0]、k [0] in array この変更を加える理由は、この配列を使って "for a in array"を見つけるときに働いているようです。しかし、エラーメッセージにはインデントブロックが必要です。私の状況に合わせて答えを変える方法。 –

+0

そして、便宜上、 'numpy.array'を使うことができます。 – zsrkmyn

+0

私が言及したように、NumPyを可能な限り使用したくないので、私の配列に適用するforループを変更したいと思います。 –