Как стать автором
Обновить

Создание рекомендательных систем с использованием библиотеки Surprise

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров7.3K
Всего голосов 8: ↑7 и ↓1+8
Комментарии3

Комментарии 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)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий