Представьте, что вы ходите по магазинам в Интернете и искали различные зимние куртки, которые собираетесь приобрести, чтобы выдержать холодную погоду с ветрами в этом году (в этом году будет немного ветрено). Вам понравилась куртка, принадлежащая определенной торговой марке под названием: 1. Вы просмотрели куртку в течение нескольких минут, прочитали все описание материала куртки, размера и т. Д., А затем вы захотели изучить некоторые другие бренды, чтобы узнать, есть ли у них похожие предметы, похожие на тот, который вы просматривали так долго. И БУМ! Вам рекомендуют несколько товаров, которые полностью совпадают с товаром, который вы просматривали ранее. В этом посте мы собираемся разработать систему рекомендаций с использованием API альтернативных наименьших квадратов PySpark ML-Lib. У вас есть набор данных, который состоит из следующего:

Здесь мы рассмотрим 4 важные переменные для моделирования набора данных:

Создание системы рекомендаций сопряжено со своими проблемами; Неявные данные и явные данные - первая проблема, которую нужно преодолеть. Неявные данные означают данные, которые создаются пользователем в режиме реального времени; и Пользователь об этом не подозревает. Примеры неявных данных: количество просмотров продукта пользователем, время, потраченное пользователем на изучение продукта, недавние клики пользователя на веб-сайте и т. Д. Эти типы данных не уточняются, и перед специалистами по данным стоит огромная задача. руки для уточнения набора данных, чтобы они могли включить его в модель. Если мы, как специалист по данным; могут включать эти наборы данных в Модель, тогда наша Модель будет обучаться на таких данных в реальном времени и давать нам точные прогнозы относительно потенциальных продуктов, которые Клиент может приобрести. Одной из неявных данных, используемых в этом построении модели, является количество товаров, приобретенных одним пользователем. Эти товары действительно принадлежат определенному бренду, и, следовательно, каждому бренду присваивается номер; чтобы система рекомендаций могла рекомендовать пользователю продукты, принадлежащие его / ее любимому бренду.

Кроме того, я занимаюсь исследованием набора данных моделирования, чтобы получить лучшее представление о различных метриках, которые приходят мне в голову.

После более подробного изучения данных, мы должны приступить к решению задачи по созданию системы рекомендаций. Мы будем использовать технику совместной фильтрации; где мы будем использовать технику матричной факторизации таким образом, чтобы большое число было разложено на два меньших простых числа. В итоге мы получаем две или более матрицы меньшей размерности, и их произведение равно исходной матрице.

Мы хотим решить матрицу, состоящую из миллионов измерений, но у пользователя не будет такого количества измерений на свой вкус. Даже если пользователь видел много элементов на веб-сайте, это просто показывает, что у пользователя разные интересы. Использование ALS дает нам возможность растворить большую матрицу на 2 части, а именно: все пользователи по своему вкусу и предметы по матрице вкуса. Эти параметры известны как скрытые функции, которые мы узнаем о пользователе из наблюдаемых данных. Рекомендовать элементы становится проще, потому что ALS представляет каждого пользователя как вектор его вкуса, а элементы - как вектор типов вкуса, частью которого они являются.

Если я вернусь к работе ALS и их предсказанию стоимости:

Rkj = Uk * T (Pj), где R - это матрица рангов, а k - это пользователь в пользовательской матрице U , в то время как P - это матрица продуктов, а Pj относится к продукту J. Если нам нужно спрогнозировать, как пользователь Uk оценит продукт Pj, мы умножим эти два вектора. Это называется методом наименьших квадратов, потому что мы генерируем две матрицы U и P, сначала исправляя U и оптимизируя P. а затем исправляем P и оптимизируем U. Оптимизация здесь обычно означает, что мы минимизируем ошибку наименьших квадратов для тех записанных значений, которые у нас уже есть в матрице рангов.

Теперь, поскольку Данные являются неявными, у нас нет рейтинга для Элементов, которые нравятся пользователю, и Пользователь дает оценку явно, чтобы мы могли сделать вывод, нравится ему это или нет. Но представьте, что у нас есть неявные данные, которые показывают общее количество покупок, сделанных у одного бренда, где Пользователь 1 покупает 2 продукта бренда 5, а Пользователь 2 покупает 1 продукт того же бренда. Это приходит к идее предпочтений пользователя; понравится ли пользователю какой-либо другой товар этой марки. Мы можем обозначить это как:

Предпочтение, P = (0,1); где 0 означает отсутствие предпочтений, а 1 означает, что пользователю это нравится.

Следующая модель - R; запись, обозначающая количество покупок у бренда: Rui.

Если мы объединим два вышеуказанных метода, мы получим следующее:

Pui = 1, если Rui ›0, и Pui = 0, если Rui = 0

Это означает, что если вы покупаете продукт определенной марки, например Pui = 1, вам нравится эта марка или не нравится, если она равна 0.

Теперь, если мы добавим понятие уверенности к модели, Cui;, мы сможем смоделировать ее следующим образом:

Цуй = 1 + а * руи

что помогает иметь некоторую уверенность в меньших записях, в то же время больше уверенность в больших записях.

Альфа, а - это параметр настройки, который измеряет разницу весов между записью 0 и записью 1.

Если мы объединим все вышеперечисленные модели вместе, мы реализуем ALS, чтобы минимизировать следующее уравнение:

Цуй (Pui - Uu * X-Ti).

Итак, приступим к реализации Модели в PySpark.

Я включил одну модель, потому что реализую ее на своем локальном компьютере и, следовательно, получаю ошибку Out.Of.memory из-за ограничений памяти. Но если у вас есть Azure Databricks для работы, вы можете реализовать 4 модели вместе.

Здесь бренд 107 является основным любимым брендом для пользователя 1591, поскольку он получает рекомендации от этого бренда, в то время как он покупал продукты этого бренда, а также некоторых соседних брендов.

Весь Код этой Модели находится на GitHub. Пожалуйста, не стесняйтесь обращаться ко мне, если вам понадобится помощь.

Пожалуйста, свяжитесь со мной на других платформах социальных сетей, и вы также можете проверить некоторые из моих проектов на GitHub.

  1. LinkedIn
  2. GitHub
  3. Твиттер
  4. Reddit
  5. Quora

Я с нетерпением жду возможности помочь научиться чему-то, кто заинтересован в совместной работе над новыми алгоритмами машинного обучения.