Останні кілька днів я намагався зрозуміти, як працює Марківський ланцюг Монте-Карло (MCMC). Зокрема, я намагався зрозуміти і реалізувати алгоритм Metropolis-Hastings. Поки я думаю, що я цілком розумію алгоритм, але є кілька речей, які мені ще не зрозумілі. Я хочу використовувати MCMC для пристосування деяких моделей до даних. Через це я опишу своє розуміння алгоритму Метрополіса-Гастінгса для пристосування прямої до деяких спостережуваних даних D :
1) Складіть початкову здогадку для . Встановіть це a як наш поточний a ( a 0 ). Також додайте в кінці ланцюга Маркова ( С ).
2) Кілька разів повторіть кроки нижче.
3) оцінка поточне правдоподібність ( ) дан в 0 і D .
4) Запропонуйте новий ( a 1 ) шляхом вибірки з нормального розподілу з μ = a 0 і σ = s t e p s i z e . Поки що s t e p s i z e є постійним.
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.
9) Якщо більше , ніж різниця між цими двома можливостями ( L 1 - L 0 ), додайте в 0 в кінці C , продовжують з використанням тих же а , 0 , перейти до кроку 2.
10) Кінець Повторення.
11) Видаліть деякі елементи з початку (фаза згоряння).
12) Тепер візьміть середнє зі значень в . Це середнє значення є приблизним a .
Тепер у мене є кілька питань стосовно вищезазначених кроків:
- Як я будую функцію ймовірності для але і для будь-якої довільної функції?
- Це правильна реалізація алгоритму Metropolis-Hastings?
- Як вибір методу генерації випадкових чисел на етапі 7 може змінити результати?
- Як зміниться цей алгоритм, якщо у мене є кілька параметрів моделі? Наприклад, якби у мене була модель .
Примітки / кредити: Основна структура алгоритму, описаного вище, заснована на коді з MPIA Python Workshop.