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 для построения модели, однако в большинстве случаев модель недостаточно хороша для решения таких проблем, как разреженность данных, холодный запуск и т. д. Нам нужно сочетать с некоторыми стратегиями и анализом поведения пользователей.

Спасибо, что прочитали, и желаю вам прекрасного дня.