В последние несколько дней я пытался понять, как работает Марковская цепь Монте-Карло (MCMC). В частности, я пытался понять и реализовать алгоритм Метрополис-Гастингс. Пока я думаю, что у меня есть общее представление об алгоритме, но есть пара вещей, которые мне еще не ясны. Я хочу использовать MCMC для подгонки некоторых моделей к данным. Поэтому я опишу свое понимание алгоритма Метрополиса-Гастингса для подгонки прямой линии к некоторым наблюдаемым данным :
1) Сделать начальное предположение для . Установите этот , как текущую ( ). Кроме того, добавьте в конце цепи Маркова ( ).
2) Повторите шаги ниже несколько раз.
3) оценка текущее правдоподобие ( ) дан в 0 и D .
4) Предложите новый ( a 1 ) путем выборки из нормального распределения с µ = a 0 и σ = s t e p s i z e . В настоящее время, ев T е р в сек я г е постоянна.
5) оценка новое правдоподобие ( ) приведен в 1 и D .
6) Если больше , чем L 0 , принимают на 1 , как новый A 0 , добавить его в конце C и перейти к шагу 2.
7) Если меньше, чем L 0, генерируют число ( U ) в диапазоне [0,1] из равномерного распределения
8) Если является меньшим , чем разница между этими двумя вероятностями ( L 1 - L 0 ), принимают на 1 , как новый A 0 , добавить его в конце C и перейти к шагу 2.
10) Конец повтора.
Теперь у меня есть несколько вопросов относительно вышеуказанных шагов:
- Это правильная реализация алгоритма Метрополиса-Гастингса?
- Как выбор метода генерации случайных чисел на шаге 7 может изменить результаты?
Примечания / Авторы: Основная структура алгоритма, описанного выше, основана на коде из MPIA Python Workshop.