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

То, что я объясню, основано на моем понимании этой статьи и моей работе с библиотекой Python Surprise, которая реализует SVD.

Описание проблемы:

SVD в контексте рекомендательных систем используется как алгоритм совместной фильтрации (CF). Для тех из вас, кто не знает, совместная фильтрация - это метод прогнозирования оценки для пары элементов пользователя на основе истории оценок, данных пользователем и присвоенных элементу. Большинство алгоритмов CF основаны на матрице рейтингов пользовательских элементов, где каждая строка представляет пользователя, а каждый столбец - элемент. Записи в этой матрице представляют собой рейтинги, присваиваемые элементам пользователями.

Факторизация SVD и матрицы

SVD - это метод матричной факторизации, который обычно используется для уменьшения количества характеристик набора данных путем уменьшения размерности пространства с N до K, где K ‹N. Однако для целей рекомендательных систем нас интересует только матричная факторизация. деталь сохраняет ту же размерность. Факторизация матрицы выполняется на основе матрицы рейтингов пользовательских элементов. С высокого уровня факторизацию матриц можно рассматривать как нахождение двух матриц, произведение которых является исходной матрицей.

Каждый элемент может быть представлен вектором `qi`. Точно так же каждый пользователь может быть представлен вектором `pu`, так что скалярное произведение этих двух векторов является ожидаемым рейтингом.

`qi` и `pu` могут быть найдены таким образом, чтобы разница в квадрате ошибки между их скалярным произведением и известным рейтингом в матрице пользовательских элементов была минимальной.

Регуляризация

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

Чтобы проиллюстрировать полезность этого фактора, представьте, что у нас есть крайний случай, когда пользователь дает низкую оценку фильму без какой-либо другой оценки этого пользователя. Алгоритм минимизирует ошибку, задавая `qi` большое значение. Это приведет к очень низкой оценке этого пользователя другим фильмам. Это интуитивно неверно. Добавляя величину векторов к уравнению, давая векторам большое значение, мы минимизируем уравнение и, таким образом, таких ситуаций можно избежать (подробнее здесь).

Условия предвзятости

Чтобы уменьшить ошибку между прогнозируемым и фактическим значением, алгоритм использует некоторые характеристики набора данных. В частности, для каждой пары пользователь-элемент (u, i) мы можем извлечь 3 параметра. µ - средний рейтинг всех элементов, `bi` - средний рейтинг элемента i минус µ и ` bu. ` - средняя оценка пользователя u минус µ, что составляет ожидаемую оценку:

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

Минимизация со стохастическим градиентным спуском (SGD)

Приведенное выше уравнение минимизируется с помощью алгоритма стохастического градиентного спуска. С точки зрения высокого уровня SGD начинается с предоставления параметров уравнения, которые мы пытаемся минимизировать начальные значения, а затем итерации, чтобы уменьшить ошибку между прогнозируемым и фактическим значением, каждый раз корректируя предыдущее значение с небольшим коэффициентом. В этом алгоритме используется коэффициент, называемый скоростью обучения γ, который определяет соотношение старого значения и нового вычисленного значения после каждой итерации. Практически, при использовании высокого γ можно пропустить оптимальное решение, тогда как при использовании низких значений γ требуется много итераций для достижения оптимального значения (подробнее здесь)

Использование

Теперь, когда у вас есть достаточно информации о СВД, пришло время ее использовать. Surprise - отличная библиотека Python, которая хорошо документирована и проста в использовании. Он реализует SVD и другие алгоритмы для рекомендательных систем. Вот простой учебник, с которого можно начать.

Отказ от ответственности: я ни в коем случае не являюсь профессионалом в области математики или экспертом по системам рекомендаций. Я работаю над этими темами из чисто личного интереса. Так что могут быть некоторые ошибки, и любые исправления более чем приветствуются. Это принесет пользу мне и всем читателям :)