Вибір байесівської моделі в PyMC3


11

Я використовую PyMC3 для запуску моделей Bayesian на моїх даних.

Я новачок у байєсівському моделюванні, але, згідно з повідомленнями в деяких блогах , Вікіпедії та QA з цього сайту, здається, що це правильний підхід до використання коефіцієнта Байєса та критерію BIC, щоб можна було вибрати, яка модель найкраще представляє мої дані (та, яка генерує мої дані).

Для обчислення коефіцієнта Байєса мені потрібна відносна ймовірність моделей, які я хочу порівняти. Це, можливо, трохи заплутало мене, але я думаю, що існує два способи отримати ймовірність (виправте мене, якщо я помиляюся):

  • алгебраїчний спосіб, коли модель проста: див. сторінку Вікіпедії на прикладі фактора Баєса

  • числовий спосіб: це те, що робить PyMC3 з алгоритмами MCMC

Як я можу отримати доступ до ймовірності та так порівняти свої моделі в PyMC3? Я знайшов model.logpметод, який згідно з doc є "функцією щільності ймовірності журналу". Чи можу я використовувати це, щоб отримати ймовірність?

Питання про бонус: коли дві моделі порівнюються, обчислюється співвідношення між обома ймовірностями. Що станеться, якщо ви хочете порівняти кілька моделей?

Конкретний приклад PyMC3 був би дуже корисним!

Відповіді:


15

Ви можете обчислити ймовірність моделі, використовуючи model.logp (). Як вхід, він вимагає крапки. Наприклад, найкраща модель із каталогу прикладів, яку я можу зробити:

np.exp(model.logp({'group1_mean': 0.1, 
                   'group2_mean': 0.2, 
                   'group1_std_interval': 1., 
                   'group2_std_interval': 1.2, 
                   'nu_minus_one_log': 1}))

Зауважте, що ця модель використовує трансформовані змінні, тому мені доведеться їх подати. Потім ви можете взяти exp () цього і використовувати його всередині числового інтегратора, наприклад, як надає scipy.integrate. Проблема в тому, що навіть маючи лише 5 параметрів, це буде дуже повільно.

Фактори Байєса, як правило, дуже важко обчислити, оскільки вам доведеться інтегруватися через повний простір параметрів. Є кілька ідей щодо використання зразків MCMC для цього. Дивіться цей пост, а особливо розділ коментарів для отримання додаткової інформації: https://radfordneal.wordpress.com/2008/08/17/the-harmonic-mean-of-the-likelihood-worst-monte-carlo-method-ever / На жаль, випадок для BIC схожий.

Якщо ви дійсно хочете обчислити коефіцієнт Байєса, ви також можете переглянути тест Savage Dickey Ratio (див., Наприклад, http://drsmorey.org/bibtex/upload/Wagenmakers:etal:2010.pdf ), але його застосування обмежене.

Я припускаю, що ви намагаєтеся порівняти модель, яка є полем з багатьма думками та рішеннями (деякі важкі для реалізації, як, наприклад, BF). Одним із простих методів обчислення є критерій інформації про відхилення. Він має свої недоліки, хоча деякі з них можна виправити (див. Http://onlinelibrary.wiley.com/doi/10.1111/rssb.12062/ab Abstract ). На жаль, ми ще не перенесли код pymc3, але це було б досить просто (див. Тут для реалізації pymc2: https://github.com/pymc-devs/pymc/blob/895c24f62b9f5d786bce7ac4fe88edb4ad220364/pymc/MCMC.py# L410 ).

Kruschke віддає перевагу підходу просто побудувати повну модель і дозволить вам сказати, які параметри мають значення. Ви також можете створити змінний вибір у самій моделі (див., Наприклад, http://arxiv.org/pdf/math/0505633.pdf ).

Нарешті, про набагато більш повне лікування дивіться цей останній пост у блозі: http://jakevdp.github.io/blog/2015/08/07/frequentism-and-bayesianism-5-model-selection/


1
Відкрито випуск для додавання DIC до pymc3: github.com/pymc-devs/pymc3/isissue/797
twiecki
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.