Как дела, дамы и господа, как дела? Добро пожаловать обратно в наш блог :)

На этой неделе мы прошли долгий путь в этом проекте. Это была очень насыщенная неделя. Мы рассмотрели несколько различных подходов к решению проблемы. А в конце статьи у нас для вас сюрприз :) Без лишних слов, приступим.

Кстати, если вы хотите вспомнить, что мы сделали до сих пор, проверьте эти две ссылки (Неделя 2 — Рекомендация МООК, Неделя 3 — Рекомендация МООК)

— Рекомендация курса с использованием kNN —

На прошлой неделе мы провели некоторую предварительную обработку, например отфильтровали нежелательных пользователей и развернули матрицу полезности. И, наконец, мы предоставляем нашу программу, чтобы рекомендовать некоторые курсы. Но пока это не часть машинного обучения. Так что с прогрессом на этой неделе мы вышли на поле больше. Первый подход — как вы можете догадаться из названия — использует алгоритм kNN.

Все, кто интересуется машинным обучением, знают kNN, верно? Просто понять, что за этим стоит, и реализовать это. Он в основном запоминает данные поезда и делает прогноз для тестовых данных, учитывая расстояния между каждым тестовым образцом и образцами поезда. Поэтому он медленный на тестовом наборе, а также быстрый на тренировочном наборе. Наш подход заключается в превращении матрицы полезности в реальную матрицу. Хотя мы называем это так, это не настоящая матрица. На данном этапе это сводная таблица.

После того, как мы преобразовали ее в реальную матрицу, она готова для подгонки с помощью kNN. При развертывании kNN мы устанавливаем значение аргумента метрики как «косинус». При этом он должен вычислить сходство векторов оценок. Итак, давайте рассмотрим некоторые рекомендации для случайно выбранного курса.

Пользователь примера прошел курс Node.Js. Так что же мы ожидаем, что нас порекомендуют? Конечно, вполне возможно порекомендовать курс веб-разработки, поскольку Node.Js используется в основном для внутренней разработки. Наш алгоритм рекомендовал этот тип курса, который ведет тот же преподаватель. Это еще одна деталь, которую нам нужно оценить. Выглядит неплохо.

— Матричная факторизация—

Другая идея — матричная факторизация. Согласно Википедии: «Матричная факторизация — это класс алгоритмов совместной фильтрации, используемых в рекомендательных системах. Алгоритмы матричной факторизации работают путем разложения матрицы взаимодействия пользователя и элемента на произведение двух прямоугольных матриц меньшей размерности». Методы матричной факторизации обычно менее эффективны, поскольку обнаруживают скрытые отношения между пользователями и курсами. Мы использовали модель разложения по одному значению (SVD) для матричной факторизации. Поскольку как для пользователя, так и для курса всего 12 значимых переменных, количество компонентов равно 12. После подгонки модели мы рассчитали коэффициент корреляции для каждой пары курсов. Этот шаг направлен на получение наивысших коэффициентов. Самые высокие баллы соответствуют лучшим рекомендациям.

Опять же, у нас есть тот же курс для сравнения с kNN. Когда мы смотрим на верхнюю рекомендацию, есть заметная разница. Похоже, этот алгоритм нашел скрытую связь между Node.Js и AWS. Мы говорим скрыто, потому что алгоритм kNN не смог дать такую ​​рекомендацию. В этом разница. Может быть, это могло бы сделать это, но, как мы уже говорили, мы говорим о верхней рекомендации. Это означает, что наиболее близкий курс рекомендуется вверху. SVD считает курс AWS более близким, чем курс React.

— 🥳🎉Сюрприз🎉 🥳—

Как мы и обещали, наш сюрприз готов :) Итак, вы готовы? Мы слышим, как вы говорите «да». Вот оно!

  • Название SurPRISE (примерно :)) означаетSimple Python RecommendatIна системнойсистеме Engine.

«Но… Это не был ожидаемый результат😕». Не унывайте, это новый подход, который мы можем рассмотреть для решения проблемы.

Последний подход заключается в использовании модуля scikit-surprise. Этот инструментарий позволяет нам попробовать различные методы совместной фильтрации и сравнить их друг с другом. Он также имеет встроенный метод перекрестной проверки для выбора лучших вариантов. Мы решили попробовать, так как это предлагает практичность для создания рекомендательных систем. Вот значения RMSE и MAE для алгоритмов SVD и KNN, протестированных на наборе, состоящем из более чем двухсот тысяч скоростей.

Этот модуль стал сюрпризом и для нас. Мы все еще пытаемся понять это и как лучше использовать его в ближайшие недели. Также с этого момента мы начнем делать несколько разных приложений, которые приобретут уникальность нашего проекта.

Так что да, это все на этой неделе. Пока мы не встретимся снова, оставайся крутым, береги себя и пока.

Авторы

  • Ариф Энес Айдын (@Arif Enes Aydın)
  • Мухаммет Али Шентюрк

Ссылки

https://en.wikipedia.org/wiki/Matrix_factorization_(recommender_system)

https://surpriselib.com/