После линейной
регрессии была логистическая
регрессия.
А потом начались
нейросети — Neural
Networks.
Потом нас учили
правильно применять изученные алгоритмы
(Advice
for Applying Machine Learning).
А потом нам
рассказали про Support
Vector Machines (SVMs) и Kernels.
А потом была
неделя посвященная темам Clustering
(K-Means) и Dimensionality
Reduction (PCA).
А после были
рассмотрены алгоритмы систем Anomaly
Detection и, отдельно, Recommender Systems.
Что мы знаем
про Recommender Systems.
Как обычно,
начинать лучше с примера. Вот у нас есть
пузомерка, которая собирает у пользовавтелей
мнения о фильмах в виде рейтинга от
одной звезды * до пяти *****.
Задача —
предсказать, какой фильм из еще
неотсмотренных/неоцененных мог бы
понравится тому или иному пользователю.
Здравый смысл подсказывает, что для
угадывания предпочтений пользователя,
нам надо, чтобы он рассказал нам о своих
любимых/нелюбимых фильмах. То есть, если
он еще ни одного фильма не отрейтинговал,
рекомендовать мы ему сможем только те
фильмы, которые нравятся всем без
исключения.
К такой проблеме
есть два подхода. Один называется
Content-based recommender systems. Другой – Collaborative
filtering.
Content-based
reccomender systems так называются потому, что
у нас есть информация о фильмах — фичи,
свойства фильмов. Например — жанровая
направленность.
Итак, у нас
есть данные — фичи фильмов, имеющиеся
рейтинговые оценки пользователей. Надо
уметь предсказывать рейтинг фильмы i
для пользователя j.
Задача похожа
на линейную регрессию, поэтому задачей
оптимизации является минимизация
среднеквадратичной ошибки предсказания.
Другой подход
называется Collaborative filtering. Это потому,
что у нас есть только значения рейтингов,
проставленных разными пользователями
для разных фильмов. Алгоритм самостоятельно
определит фичи фильмов, наиболее точно
отвечающие показаниям рейтингов.
То есть, имея
значения рейтингов и матрицу Тета, мы
можем посчитать значения фич для фильмов
— задача обратная расчету матрицы Тета
по значениям фич и рейтингов. Пока
понятно.
Поняв про
прямое и обратное вычисление мы переходим
к сути — у нас есть только рейтинги.
Чтобы хоть с чего-то начать, мы произвольно
выбираем Тета, находим фичи Х и считаем
рейтинг. Потом, минимизируя ошибку
считаем новую Тета и считаем рейтинг.
И опять, минимизируя ошибку считаем
фичи Х, … до схождения. Это и есть алгоритм
Collaborative Filtering.
Итак, у нас
есть проблема курицы и яйца
Но мы можем
решить ее в один заход
Такая Cost
Function позволяет нам одновременно найти
оптимальные параметры Тета и фичи Х.
Так, алгоритм
Collaborative Filtering в целом следующий
Предварительная
инициализация Х и Тета произвольными
малыми значениями; минимизация Cost
Function; вычисление рейтинга перемножением
Тета и Х.
Мы теперь умеем
предсказывать, какой рейтинг поставил
бы пользователь данному фильму.
Другой вопрос
— какие фильмы понравились бы данному
пользователю?
Поскольку мы
умеем вычислять характеристики фильмов,
достаточно найти фильмы с характеристиками
близкими к тем, для которых пользователь
поставил высокий рейтинг — очень просто
А что же делать,
если пользователь не поставил еще ни
одной оценки? В таком случае мы считаем
его среднестатистическим пользователем
и нормализуем оценки по среднему значению
Если же у фильма нет еще ни одной оценки, лучше убрать этот фильм из расчетов.
В практическом
задании по этой теме мы реализовали на
практике показанные алгоритмы и сделали
систему рейтингов для фильмов. После
чего нашли фильмы, которые могли бы
заинтересовать Васю Пупкина.
original post http://vasnake.blogspot.com/2014/07/recommender-systems.html
Комментариев нет:
Отправить комментарий