Алгоритм совместной фильтрации на основе моделей Python (10)

искусственный интеллект Python

«Это 10-й день моего участия в ноябрьском испытании обновлений, ознакомьтесь с подробностями события:Вызов последнего обновления 2021 г."

С постепенным развитием и совершенствованием технологии машинного обучения рекомендательные системы постепенно используют идеи машинного обучения для выработки рекомендаций. Список вариантов применения машинного обучения к рекомендательным системам бесконечен. Ниже приводится грубая классификация алгоритма Model-Based CF:

  • На основе алгоритма классификации, алгоритма регрессии, алгоритма кластеризации
  • Рекомендация на основе матричной факторизации
  • На основе алгоритма нейронной сети
  • Алгоритмы на основе графовых моделей

Рекомендации по совместной фильтрации на основе K ближайших соседей

Рекомендация по совместной фильтрации на основе K ближайших соседей на самом деле является MemoryBased CF, но при выборе ближайших соседей добавляется ограничение K ближайших соседей.

Здесь мы напрямую реализуем код на основе MemoryBased CF

Измените следующие места

class CollaborativeFiltering(object):

    based = None

    def __init__(self, k=40, rules=None, use_cache=False, standard=None):
        '''
        :param k: 取K个最近邻来进行预测
        :param rules: 过滤规则,四选一,否则将抛异常:"unhot", "rated", ["unhot","rated"], None
        :param use_cache: 相似度计算结果是否开启缓存
        :param standard: 评分标准化方法,None表示不使用、mean表示均值中心化、zscore表示Z-Score标准化
        '''
        self.k = 40
        self.rules = rules
        self.use_cache = use_cache
        self.standard = standard

Измените коды всех мест, где выбраны ближайшие соседи, и выберите K ближайших соседей по сходству

similar_users = self.similar[uid].drop([uid]).dropna().sort_values(ascending=False)[:self.k]

similar_items = self.similar[iid].drop([iid]).dropna().sort_values(ascending=False)[:self.k]

Но так как сырых данных у нас меньше, эффект от нашего метода KNN здесь будет хуже, чем чистый MemoryBasedCF

Рекомендации по совместной фильтрации на основе регрессионной модели

Если мы будем рассматривать рейтинг как непрерывное значение, а не как дискретное значение, то мы можем использовать идею линейной регрессии, чтобы предсказать рейтинг целевого пользователя для элемента. Одна из стратегий реализации называется Baseline.

Базовый уровень: базовый прогноз

Идея базового дизайна основана на следующих предположениях:

  • Некоторые пользователи обычно оцениваются выше, чем другие, а некоторые пользователи обычно оцениваются ниже, чем другие. Например, некоторые пользователи от природы склонны хвалить других, они мягкосердечны и легки в общении, а некоторые более суровы и всегда ставят не более 3 баллов (из 5 баллов).
  • Некоторые элементы обычно оцениваются выше, чем другие, а некоторые, как правило, оцениваются ниже, чем другие. Например, некоторые предметы определяют свой статус сразу после их производства, некоторые пользуются большей популярностью у людей, а другие не нравятся.

Этот пользователь или элемент, как правило, выше или ниже средней разницы, мы называем смещение (bias)

Базовые цели:

  • Найдите значение смещения, которое каждый пользователь обычно выше или ниже, чем другиеbuб_у​
  • Найдите значение смещения каждого элемента, как правило, выше или ниже, чем у других элементовbib_i
  • Наша цель - найти лучшееbub_uиbib_i

Шаги по использованию идей алгоритма Baseline для прогнозирования результатов следующие:

  • Вычислить средний рейтинг всех фильмовμ\mu(т.е. средний мировой рейтинг)

  • Рассчитать рейтинг каждого пользователя и средний рейтингμ\muзначение смещенияbub_u

  • Рассчитать принятый рейтинг и средний рейтинг для каждого фильмаμ\muзначение смещенияbib_i

  • Предсказать рейтинг пользователей для фильмов:

\hat{r}_{ui} = b_{ui} = \mu + b_u + b_i