Python用PyMC貝葉斯GLM廣義線性模型、NUTS采樣器擬合、后驗分布可視化
全文鏈接:https://tecdat.cn/?p=33436
原文出處:拓端數(shù)據(jù)部落公眾號
盡管貝葉斯方法相對于頻率主義方法的理論優(yōu)勢已經(jīng)在其他地方進行了詳細討論,但其更廣泛采用的主要障礙是“可用性”。而使用貝葉斯方法,客戶可以按照自己認為合適的方式定義模型。
線性回歸
在此示例中,我們將幫助客戶從最簡單的 GLM – 線性回歸開始。 一般來說,頻率論者對線性回歸的看法如下:

然后,我們可以使用普通最小二乘法(OLS)或最大似然法來找到最佳擬合。
概率重構
貝葉斯主義者對世界采取概率觀,并用概率分布來表達這個模型。我們上面的線性回歸可以重新表述為:

換句話說,我們將Y其視為一個隨機變量(或隨機向量),其中每個元素(數(shù)據(jù)點)都根據(jù)正態(tài)分布分布。此正態(tài)分布的均值由具有方差sigma的線性預測變量提供。
PyMC 中的貝葉斯 GLM
要開始在 PyMC 中構建 GLM,讓我們首先導入所需的模塊。
print(f"Running on PyMC v{pm.__version__}")

az.style.use("arviz-darkgrid")
數(shù)據(jù)
本質上,我們正在創(chuàng)建一條由截距和斜率定義的回歸線,并通過從均值設置為回歸線的正態(tài)采樣來添加數(shù)據(jù)點。
y = true_regression_line + rng.normal(scale=0.5, size=size)data = pd.DataFrame(dict(x=x, y=y))
plt.legend(loc=0);

估計模型
讓我們將貝葉斯線性回歸模型擬合到此數(shù)據(jù)。
? ?# 定義似然函數(shù) ? ?likelihood = Normal("y", mu=intercept + slope * x, sigma=sigma, observed=y) ? ?# 使用NUTS采樣推斷 ? ?idata = sample(3000)


對于了解概率編程的人來說,這應該是相當可讀的。
? ?import bambi as bmb


idata = model.fit(draws=3000)

要短得多,但這段代碼與之前的規(guī)范完全相同(如果我們愿意,您也可以更改先驗和其他所有內容)。
分析模型
貝葉斯推理不僅給了我們一條最佳擬合線(就像最大似然那樣),而是給出了合理參數(shù)的整個后驗分布。讓我們繪制參數(shù)的后驗分布和我們繪制的單個樣本。
az.plot_trace(idata, figsize=(10, 7));

左側顯示了我們的邊緣后驗 – 對于 x 軸上的每個參數(shù)值,我們在 y 軸上得到一個概率,告訴我們該參數(shù)值的可能性。
首先,各個參數(shù)(左側)的采樣鏈看起來均勻且平穩(wěn)(沒有大的漂移或其他奇怪的模式)。
其次,每個變量的最大后驗估計值(左側分布中的峰值)非常接近用于生成數(shù)據(jù)的真實參數(shù)(x
是回歸系數(shù),sigma
是我們正態(tài)的標準差)。
因此,在 GLM 中,我們不僅有一條最佳擬合回歸線,而且有許多。后驗預測圖從后驗圖(截距和斜率)中獲取多個樣本,并為每個樣本繪制一條回歸線。我們可以直接使用后驗樣本手動生成這些回歸線。
idata.posterior["y_model"] = idata.posterior["Intercept"] + idata.posterior["x"] * xr.DataArray(x)
_, ax = plt.subplots(figsize=(7, 7))az.plot_lm(idata=idata, y="y", num_samples=100, axes=ax, y_model="y_model")ax.set_title("Posterior predictive regression lines")ax.set_xlabel("x");


我們估計的回歸線與真正的回歸線非常相似。但是由于我們只有有限的數(shù)據(jù),我們的估計存在不確定性,這里用線的可變性來表示。
總結
可用性目前是更廣泛采用貝葉斯統(tǒng)計的巨大障礙。
Bambi
允許使用從 R 借用的便捷語法進行 GLM 規(guī)范。然后可以使用pymc
?進行推理。后驗預測圖使我們能夠評估擬合度和其中的不確定性。
延伸閱讀
有關其他背景信息,以下是一些關于貝葉斯統(tǒng)計的好資源:
約翰·克魯施克(John Kruschke)的優(yōu)秀著作《做貝葉斯數(shù)據(jù)分析》。
版本信息:
%load_ext watermark%watermark -n -u -v -iv -w -p pytensor
Python implementation: CPythonPython version ? ? ? : 3.11.4IPython version ? ? ?: 8.14.0pytensor: 2.14.2pymc ? ? ?: 5.7.2+0.gd59a960f.dirtybambi ? ? : 0.12.0arviz ? ? : 0.16.1xarray ? ?: 2023.7.0matplotlib: 3.7.2numpy ? ? : 1.25.2sys ? ? ? : 3.11.4 | packaged by conda-forge | (main, Jun 10 2023, 18:08:17) [GCC 12.2.0]pandas ? ?: 2.0.3Watermark: 2.4.3
最受歡迎的見解
1.matlab使用貝葉斯優(yōu)化的深度學習
2.matlab貝葉斯隱馬爾可夫hmm模型實現(xiàn)
3.R語言Gibbs抽樣的貝葉斯簡單線性回歸仿真
4.R語言中的block Gibbs吉布斯采樣貝葉斯多元線性回歸
5.R語言中的Stan概率編程MCMC采樣的貝葉斯模型
6.R語言貝葉斯Poisson泊松-正態(tài)分布模型分析職業(yè)足球比賽進球數(shù)
7.R語言使用貝葉斯 層次模型進行空間數(shù)據(jù)分析
8.R語言隨機搜索變量選擇SSVS估計貝葉斯向量自回歸(BVAR)模型
9.matlab貝葉斯隱馬爾可夫hmm模型實現(xiàn)