Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2014-07-11

Recommender Systems


А потом начались нейросети — 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

Комментариев нет:

Отправить комментарий

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) humor (23) Java (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Klaipeda (15) Manager (15) web-browser (15) Никонов (15) functional programming (14) happiness (14) music (14) todo (14) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) Photo (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) Baltic (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) seaside (1) serialization (1) shore (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)