Collaborative Filtering — наиболее реализованная и зрелая система рекомендаций. Мы собираемся построить рекомендательную систему на основе модели — матричной факторизации, используя модель ALS, предоставленную pyspark.
Ссылка на GitHub: https://github.com/chiang9/Recommendation_system_pyspark/blob/main/ALS_model/movielen%20ALS.ipynb
Разреженная матрица R может быть построена на основе данных об отношении пользователей к элементам и их оценок. Оценки могут быть получены от пользователей или поведения пользователей. Метод совместной фильтрации использует матрицу R для получения рекомендаций.
Цель метода матричной факторизации состоит в том, чтобы разделить матрицу полезности на скрытую матрицу пользователя и скрытую матрицу продукта таким образом, чтобы
Существует множество методов факторизации матрицы полезности, таких как разложение по единичным значениям, вероятностный латентно-семантический анализ. В альтернативном методе наименьших квадратов (ALS) это итеративный процесс оптимизации модели факторизации.
Альтернативный метод наименьших квадратов (ALS)
Модель ALS — один из самых популярных методов совместной фильтрации. Чтобы увидеть математику, лежащую в основе модели, мы сначала определяем целевую функцию, используяфункцию потерь — RMSE.
где real = R, предсказание равно U*P^T.
Предположим, что имеется m пользователей и nэлементов, R = m * n, U = m * k, P = n * k, где k — скрытые факторы.
Чтобы избежать переобучения, мы добавляем норму l2 к нашей целевой функции, так что
Далее возьмем частное дифференцирование по U и P.
Применяя аналогичный процесс, мы можем найти дифференциацию потерь по P.
Следовательно, у нас есть оба уравнения для U и P. Зафиксировав одно, мы можем оптимизировать другое. Итеративно чередуя скрытую матрицу U и P, мы можем оптимизировать факторизацию матрицы полезности.
Источник данных
В этом примере мы будем использовать набор данных movielens (ml-100k).
ссылка: https://grouplens.org/datasets/movielens/
Давайте начнем
В этом примере мы собираемся использовать pyspark и набор данных movielens.
[Row(userid=196.0, itemid=242.0, rating=3.0), Row(userid=186.0, itemid=302.0, rating=3.0)]
Мы кэшируем обучающий и тестовый набор данных для дальнейшего использования искры.
Затем мы используем CrossValidator для настройки гиперпараметров. В модели Spark ALS мы можем определять различные параметры, rank, maxIter, regParam и многое другое можно найти на https: //spark.apache.org/docs/latest/api/python/reference/api/pyspark.ml.recommendation.ALS.html#pyspark.ml.recommendation.ALS
где ранг – это скрытые факторы, k.
Мы можем извлечь лучшую модель и ее параметры из CrossValidator после обучения.
Rank = 100 MaxIter = 10 RegParam = 0.1
RMSE = 0.9293164895244701 +---+--------------------+ | id| features| +---+--------------------+ | 10|[0.3314802, -0.07...| | 20|[0.3870823, 0.024...| | 30|[0.3141748, -0.09...| | 40|[0.26709092, -0.2...| | 50|[0.35146096, -0.0...| | 60|[0.36123818, -0.1...| | 70|[0.44221446, -0.0...| | 80|[0.4122668, -0.07...| | 90|[0.070995346, -0....| |100|[0.45245463, 0.05...| +---+--------------------+ only showing top 10 rows +---+--------------------+ | id| features| +---+--------------------+ | 10|[0.24241637, -0.2...| | 20|[0.21774949, -0.0...| | 30|[0.2805123, -0.04...| | 40|[0.08548905, -0.0...| | 50|[0.47504237, -0.2...| | 60|[0.046063706, -0....| | 70|[0.21902403, -0.1...| | 80|[0.33022547, -0.1...| | 90|[0.42008877, -0.0...| |100|[0.28412965, -0.1...| +---+--------------------+ only showing top 10 rows
Мы можем найти рекомендации элементов для определенных пользователей или пользователей, которые могут быть заинтересованы в определенном элементе, используя следующие методы: recommendForAllUsers, recommendForAllItems,recommendForUserSubset, recommendForItemSubset. сильный>
Кроме того….
В Spark ML есть два модуля: ml и mllib.
Модуль spark.ml использует DataFrame, mllib использует RDD,который постепенно устаревает.
Вывод
Модель ALS — это мощный инструмент для построения рекомендательной системы. Apache Spark предоставляет удобный API для построения модели, однако в большинстве случаев модель недостаточно хороша для решения таких проблем, как разреженность данных, холодный запуск и т. д. Нам нужно сочетать с некоторыми стратегиями и анализом поведения пользователей.
Спасибо, что прочитали, и желаю вам прекрасного дня.