Комментарии 3
Складывается ощущение, что библиотека создана для одного конкретного примера. Сама статья просто перевод странички Getting Started из документации. Как адаптировать библиотеку под свой пример не понятно. Конечно можно заглянуть в исходники на GitHub, но зачем тогда такая библиотека нужна?
Теперь мы можем получить персонализированные рекомендации для конкретного пользователя. Для этого выберем случайного пользователя и получим рекомендации.
# Получаем топ N рекомендаций для пользователя
top_n = model.get_top_n(predictions, n=10, user=user_id)
Вы если и копируете из официального мануала, то делайте это нормально. Впечатление о вашей "образовательной" организации портится после таких моментов.
Если воспользоваться вашим приведенным фрагментом кода, то можно сперва не понять откуда у вас вообще берется метод "get_top_n", а затем еще и обнаружить, что такого "метода" не существует у модели.
Ответ кроется в том, что это не метод, а дополнительно прописанная функция.
Вот верный вариант кода из того же мануала:
from collections import defaultdict
from surprise import Dataset, SVD
def get_top_n(predictions, n=10):
"""Return the top-N recommendation for each user from a set of predictions.
Args:
predictions(list of Prediction objects): The list of predictions, as
returned by the test method of an algorithm.
n(int): The number of recommendation to output for each user. Default
is 10.
Returns:
A dict where keys are user (raw) ids and values are lists of tuples:
[(raw item id, rating estimation), ...] of size n.
"""
# First map the predictions to each user.
top_n = defaultdict(list)
for uid, iid, true_r, est, _ in predictions:
top_n[uid].append((iid, est))
# Then sort the predictions for each user and retrieve the k highest ones.
for uid, user_ratings in top_n.items():
user_ratings.sort(key=lambda x: x[1], reverse=True)
top_n[uid] = user_ratings[:n]
return top_n
и только затем можно вызвать функцию:
top_n = get_top_n(predictions, n=10)
Создание рекомендательных систем с использованием библиотеки Surprise