2016-11-27 4 views
-1

私は推奨システムを作成するためのトレーニングを受けています。私はサイトからデータを取るhttp://grouplens.org/datasets/movielens/インデックス5688は、軸3706の外にあります

import numpy as np 
import pandas as pd 
header = ['user_id', 'item_id', 'rating', 'timestamp'] 
df = pd.read_csv('ml-1m/ratings.dat', sep='::', names=header) 
n_users = df.user_id.unique().shape[0] 
n_items = df.item_id.unique().shape[0] 
print ('Number of users = ' + str(n_users) + ' | Number of movies = ' + str(n_items)) 

ユーザーの数= 6040 |映画の数= 3706

from sklearn import cross_validation as cv 
train_data, test_data = cv.train_test_split(df, test_size=0.25) 

と私は2つのユーザアイテム行列、テスト

train_data_matrix = np.zeros((n_users, n_items)) 
for line in train_data.itertuples(): 
    train_data_matrix[line[1]-1, line[2]-1] = line[3] 

test_data_matrix = np.zeros((n_users, n_items)) 
for line in test_data.itertuples(): 
    test_data_matrix[line[1]-1, line[2]-1] = line[3] 

のための訓練用と別のものを作成しようと私は(完全なトレースバック)

IndexError        Traceback (most recent call last) 
<ipython-input-39-180dea01cdf8> in <module>() 
     2 train_data_matrix = np.zeros((n_users, n_items)) 
     3 for line in train_data.itertuples(): 
----> 4  train_data_matrix[line[1]-1, line[2]-1] = line[3] 
     5 
     6 test_data_matrix = np.zeros((n_users, n_items)) 

IndexError: index 5688 is out of bounds for axis 0 with size 3706 
を取得します

何が問題なのですか?

P.S.

train_data.head() 
     user_id item_id rating  timestamp 
483019 2968 2268 5  971107926 
943582 5689 3615 3  963719230 
116153 752  1147 5  975458000 
103250 686  1704 5  975601762 
235333 1425 3752 4  1023560349 

PSS

for line in train_data.itertuples(): 
    print (line) 
Pandas(Index=483019, user_id=2968, item_id=2268, rating=5, timestamp=971107926) 
Pandas(Index=943582, user_id=5689, item_id=3615, rating=3, timestamp=963719230) 
Pandas(Index=116153, user_id=752, item_id=1147, rating=5, timestamp=975458000) 
Pandas(Index=103250, user_id=686, item_id=1704, rating=5, timestamp=975601762) 

答えて

0

line[1]-1は5688.

IndexError: index 5688 is out of bounds for axis 0 with size 3706 
train_data_matrix[line[1]-1, line[2]-1] = line[3] 

中にエラーメッセージがそこで質問があり、train_data_matrixは形状(3706、n)を持っていることを告げている - である理由line[1]は5689に等しいか?または、より大きな文脈では、train_data.itertuples()はなぜこの値が大きい行を生成するのですか?

あなたの代わりに

train_data_matrix[line[0]-1, line[1]-1] 

を使用する必要がある場合、私は私がitertuplesに慣れていないんだのだろうか。 lineの要素は何ですか? train_dataの完全な形は何ですか?

+0

train_data_matrix - ユニークな値のユーザーと映画のIDのマトリックス。 5689 - これはユーザーのIDです train_data.head() – Edward

+0

私の質問に答えました – Edward

+0

しかし、行列の行はユーザーIDではなく行数で索引付けされます。 – hpaulj

関連する問題