Это попытка дать некоторое представление об использовании 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 и другие алгоритмы для рекомендательных систем. Вот простой учебник, с которого можно начать.
Отказ от ответственности: я ни в коем случае не являюсь профессионалом в области математики или экспертом по системам рекомендаций. Я работаю над этими темами из чисто личного интереса. Так что могут быть некоторые ошибки, и любые исправления более чем приветствуются. Это принесет пользу мне и всем читателям :)