![]() |
![]() |
![]() |
![]() |
Рекомендательная система SVD: Funk MF (Matrix Factorization) |
|
МЕНЮ Главная страница Поиск Регистрация на сайте Помощь проекту Архив новостей ТЕМЫ Новости ИИ Голосовой помощник Разработка ИИГородские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Искусственный интеллект Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Психология ИИ Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Творчество ИИ Техническое зрение Чат-боты Авторизация |
2023-09-13 15:00 ![]() Данная статья является продолжением "Рекомендательная система SVD". Если вам не знакома терминология (user-item matrix, SVD-разложение, PCA, метод главных компонент и пр.), то рекомендую прежде прочитать первую часть. Netflix Prize - одно из самых известных соревнований в области машинного обучения. Целью было создание алгоритма, который улучшал бы рекомендации фильмов и телешоу на 10%. Один из наиболее успешных алгоритмов был алгоритм Саймона Фанка, основной идеей которого является матричная факторизация. Матричная факторизация - разложение матрицы на произведение двух или более матриц. Например, SVD-разложение. Пусть у нас имеется матрица рейтингов пользователей Обучение состоит в минимизации квадратичной ошибки: где Однако, при прогнозировании оценок необходимо учитывать предубеждения пользователей. Например, пользователь, вероятно, поставит более завышенную оценку фильму, который признан каким-то сообществом. В то время как менее популярный фильм получит более умеренную оценку. Или, можно разделить пользователей на более и менее критичных. Кто-то легко ставит высокие рейтинги, кто-то - наоборот. Эти смещения (предубеждения) необходимо учитывать при прогнозировании. Введем новые переменные:
Тогда, скорректированный прогноз (с учетом смещения) : В таком случае минимизируем следующий функционал: Оптимальное решение будем искать с помощью градиентного спуска. Ошибку обозначим как Градиенты по Тогда градиентный шаг выполняется по формулам: где Реализуем алгоритм. Данные возьмем из первой части статьи.
Созданим рейтинги R_train случайным образом
![]() Посмотрим как выглядит User-item matrix
![]() Найдем среднее по всем рейтингам: Инициализируем смещение, вносимое фильмами и "предвзятость" пользователей Инициализируем скрытые факторы пользователей и скрытые факторы фильмов Градиентный спуск Посчитаем предсказания для всех пользователей и фильмов:
![]() Можно воспользоваться библиотекой scikit-surprise.
![]() Бывает полезно использовать и другие модификации алгоритма: SVD++: где timeSVD++: Добавление зависимости от времени бывает полезно, если данные растянуты на несколько лет и более, когда вкусы пользователя могут поменяться (иначе моделька будет выдавать некоторое "среднее значение по вкусу"). Вектор пользователя В конце соревнования Netflix выплатил миллион долларов победителям. Позже, организаторы конкурса признались, что за такую ничтожную сумму они не смогли бы заставить работать столько ученых по всему миру целых три года. Однако, благодаря конкурсу, мы теперь знаем все о разложении user-item. Такие задачи принято называть 2D-задачи, потому что имеем данные о взаимодействии двух разных множеств. Но мы можем учитывать, например, ситуативный контекст (если планируется семейный просмотр фильма - это один вид рекомендаций, если с друзьями - другой, если наедине - третий и тд), тогда мы можем говорить о больших размерностях для данной задачи. Современные рекомендательные системы уходят именно туда: как рекомендовать в условиях когда у нас много разнообразной разнородной дополнительной информации. Источник: habr.com Комментарии: |
|