PyMC3

(validating required)Bayesian sampling方法用於估計模型解析形已知,模型中含有已經分佈,但參數未知的多個隨機變數,且已觀測到相對應的多個隨機結果,希望估計出多個隨機參數分佈的參數值。(點估計(MAP)或是區間估計(MCMC))

範例:非公正的硬幣

  • 例如我們要測試一枚有偏的硬幣,出現 head 的概率為 0.7。先把這個硬幣拋上 100 遍。
from scipy import stats
import matplotlib.pyplot as plt
flips = stats.bernoulli.rvs(p=0.7, size=100)
plt.hist(flips, bins=2)
plt.show()
正面出現機率為70%的不公正硬幣
  • 假設我們對這個硬幣一無所知,則先驗機率(priori probability)為均勻分佈。定義模型如下:
with pm.Model() as model:
    # 先驗機率分佈
    p = pm.Uniform('p', 0.1, 0.9)
    # 觀察到的資料
    obv = pm.Bernoulli('flips', p, observed=flips)
  • 然後定義取樣的演算法和初始點,就可以進行取樣:
with model:
    start = pm.find_MAP(vars=[p])
    step = pm.NUTS() 
    trace = pm.sample(2000, start=start, step=step, progressbar=False)
  • p 的後驗分佈:
burnin = 1000
thin = 10

pm.traceplot(trace[burnin::thin], ['p'])

參考文獻

中文

results matching ""

    No results matching ""