Чтобы продемонстрировать решение этой гиперприорной задачи, я реализовал иерархическую модель гамма-Дирихле-полиномиальная в PyMC3. Гамма для Dirichlet указывается и отбирается в блоге Теда Даннинга .
Модель, которую я реализовал, может быть найдена в этом Gist, но также описана ниже:
Это байесовская иерархическая (объединяющая) модель для рейтингов фильмов. Каждый фильм можно оценивать по шкале от нуля до пяти. Каждый фильм оценивается несколько раз. Мы хотим найти сглаженное распределение оценок для каждого фильма.
Мы собираемся изучить предварительное распределение (гиперприор) на основе рейтингов фильмов по данным. Каждый фильм будет иметь свой собственный априор, сглаженный этим априором верхнего уровня. Еще один способ думать об этом заключается в том, что априорные рейтинги для каждого фильма будут сокращены до группового или объединенного распределения.
Если фильм имеет нетипичное распределение рейтинга, такой подход приведет к уменьшению рейтинга до чего-то более соответствующего ожидаемому. Кроме того, этот извлеченный предыдущий может быть полезен для загрузки фильмов с небольшим количеством оценок, чтобы позволить им быть значимым по сравнению с фильмами со многими оценками.
Модель выглядит следующим образом:
γk=1...K∼Gamma(α,β)
θm=1...M∼DirichletM(cγ1,...,cγK)
zm=1...M,n=1...Nm∼CategoricalM(θm)
где:
- К = 6K количество уровней рейтинга фильмов (например, подразумевает рейтинги 0, ..., 5)K=6
- M количество фильмов оценивается
- мNm количество оценок для фильмаm
- α=1/K , чтобы коллекция гамма-лучей действовала как экспоненциальный коэффициент
- βПараметр для экспоненциального верхнего уровня
- c параметр концентрации, диктующий силу верхнего уровня до
- kγk верхнего уровня для уровня рейтингаk
- Кθm уровень фильма до уровня рейтинга (многомерный с размерностью = )K
- n mzmn оценка для фильмаnm