У меня есть dataframe, как это:
user_id anime_id user_rating
0 1 20 7.808497
1 3 20 8.000000
2 5 20 6.000000
3 6 20 7.808497
4 10 20 7.808497
он выглядит как базовый фреймворк для игры с рекомендательной системой.
У меня было ~ 7 миллионных строк, я немного сократил данные:
df = df[df["user_id"] < 2000]
пусть печатают n_users, n_items, у меня, конечно же, были пользователи из 1999 года, и ~ 6000items
У меня 2 проблемы. если я хочу построить свой учебный набор данных следующим образом:
ratings = np.zeros((n_users, n_items))
for row in df.itertuples():
ratings[row[1]-1, row[2]-1] = row[3]
У меня есть "IndexError:
index 950 is out of bounds for axis 0 with size 949'
Я пробовал новые вещи с рядом [0] после комментария, что он не работает:
X = urm[["user_id", "anime_id"]].as_matrix()
y = urm["user_rating"].values
n_u = len(urm["user_id"].unique())
n_m = len(urm["anime_id"].unique())
R = np.zeros((n_u, n_m))
for idx, row in enumerate(X):
R[row[0]-1, row[1]-1] = y[idx]
все тот же IndexError.
если я передаю строку, если строка в R.index: возвращает код только np.zeros matrix
row[1]
представляет user_id
, а не ваш индекс user_id
. Как только вы достигнете строки с user_id
превышающей первое измерение ratings
, вы увидите IndexError
. Вместо этого используйте row[0]
или row.Index
для извлечения индекса строки, который затем можно использовать для индексации массива ratings
.
Кроме того, обратите внимание, что df[df["user_id"] < 2000]
сам по себе не гарантирует, что у вас есть пользователи из 1999 года. Например, некоторые user_id
целочисленных идентификаторов user_id
могут отсутствовать.