pymc
v5.19.1
PyMC(以前稱為 PyMC3)是用於貝葉斯統計建模的 Python 包,專注於高級馬可夫鏈蒙特卡羅 (MCMC) 和變分推理 (VI) 演算法。它的靈活性和可擴展性使其適用於解決大量問題。
查看 PyMC 概述,或眾多範例之一!有關 PyMC 的問題,請造訪我們的 PyMC Discourse 論壇。
x ~ N(0,1)
轉換為x = Normal('x',0,1)
植物生長可能受到多種因素的影響,了解這些關係對於優化農業實踐至關重要。
想像一下,我們進行一項實驗,根據不同的環境變數來預測植物的生長。
import pymc as pm
# Taking draws from a normal distribution
seed = 42
x_dist = pm . Normal . dist ( shape = ( 100 , 3 ))
x_data = pm . draw ( x_dist , random_seed = seed )
# Independent Variables:
# Sunlight Hours: Number of hours the plant is exposed to sunlight daily.
# Water Amount: Daily water amount given to the plant (in milliliters).
# Soil Nitrogen Content: Percentage of nitrogen content in the soil.
# Dependent Variable:
# Plant Growth (y): Measured as the increase in plant height (in centimeters) over a certain period.
# Define coordinate values for all dimensions of the data
coords = {
"trial" : range ( 100 ),
"features" : [ "sunlight hours" , "water amount" , "soil nitrogen" ],
}
# Define generative model
with pm . Model ( coords = coords ) as generative_model :
x = pm . Data ( "x" , x_data , dims = [ "trial" , "features" ])
# Model parameters
betas = pm . Normal ( "betas" , dims = "features" )
sigma = pm . HalfNormal ( "sigma" )
# Linear model
mu = x @ betas
# Likelihood
# Assuming we measure deviation of each plant from baseline
plant_growth = pm . Normal ( "plant growth" , mu , sigma , dims = "trial" )
# Generating data from model by fixing parameters
fixed_parameters = {
"betas" : [ 5 , 20 , 2 ],
"sigma" : 0.5 ,
}
with pm . do ( generative_model , fixed_parameters ) as synthetic_model :
idata = pm . sample_prior_predictive ( random_seed = seed ) # Sample from prior predictive distribution.
synthetic_y = idata . prior [ "plant growth" ]. sel ( draw = 0 , chain = 0 )
# Infer parameters conditioned on observed data
with pm . observe ( generative_model , { "plant growth" : synthetic_y }) as inference_model :
idata = pm . sample ( random_seed = seed )
summary = pm . stats . summary ( idata , var_names = [ "betas" , "sigma" ])
print ( summary )
從總結我們可以看到,推斷參數的平均值非常接近固定參數
參數 | 意思是 | 標準差 | 人類發展指數_3% | 人類發展指數_97% | mcse_mean | MCSE_SD | ess_bulk | ess_tail | r_帽子 |
---|---|---|---|---|---|---|---|---|---|
貝塔[日照時數] | 4.972 | 0.054 | 4.866 | 5.066 | 0.001 | 0.001 | 3003 | 第1257章 | 1 |
貝塔[水量] | 19.963 | 0.051 | 19.872 | 20.062 | 0.001 | 0.001 | 3112 | 1658 | 1 |
betas[土壤氮] | 1.994 | 0.055 | 1.899 | 2.107 | 0.001 | 0.001 | 3221 | 第1559章 | 1 |
西格瑪 | 0.511 | 0.037 | 0.438 | 0.575 | 0.001 | 0 | 2945 | 第1522章 | 1 |
# Simulate new data conditioned on inferred parameters
new_x_data = pm . draw (
pm . Normal . dist ( shape = ( 3 , 3 )),
random_seed = seed ,
)
new_coords = coords | { "trial" : [ 0 , 1 , 2 ]}
with inference_model :
pm . set_data ({ "x" : new_x_data }, coords = new_coords )
pm . sample_posterior_predictive (
idata ,
predictions = True ,
extend_inferencedata = True ,
random_seed = seed ,
)
pm . stats . summary ( idata . predictions , kind = "stats" )
以推斷參數為條件的新數據如下圖所示:
輸出 | 意思是 | 標準差 | 人類發展指數_3% | 人類發展指數_97% |
---|---|---|---|---|
植物生長[0] | 14.229 | 0.515 | 13.325 | 15.272 |
植物生長[1] | 24.418 | 0.511 | 23.428 | 25.326 |
植物生長[2] | -6.747 | 0.511 | -7.740 | -5.797 |
# Simulate new data, under a scenario where the first beta is zero
with pm . do (
inference_model ,
{ inference_model [ "betas" ]: inference_model [ "betas" ] * [ 0 , 1 , 1 ]},
) as plant_growth_model :
new_predictions = pm . sample_posterior_predictive (
idata ,
predictions = True ,
random_seed = seed ,
)
pm . stats . summary ( new_predictions , kind = "stats" )
在上述場景下,新數據將如下所示:
輸出 | 意思是 | 標準差 | 人類發展指數_3% | 人類發展指數_97% |
---|---|---|---|---|
植物生長[0] | 12.149 | 0.515 | 11.193 | 13.135 |
植物生長[1] | 29.809 | 0.508 | 28.832 | 30.717 |
植物生長[2] | -0.131 | 0.507 | -1.121 | 0.791 |
若要在系統上安裝 PyMC,請按照安裝指南中的說明進行操作。
請從以下選項中選擇:
我們使用 discourse.pymc.io 作為我們的主要溝通管道。
要詢問有關 PyMC 建模或使用的問題,我們鼓勵您在我們的 Discourse 論壇的「問題」類別下發佈。您也可以在“開發”類別中建議功能。
您也可以在這些社交媒體平台上關注我們,以獲取更新和其他公告:
若要回報 PyMC 問題,請使用問題追蹤器。
最後,如果您需要聯繫有關該項目的非技術信息,請給我們發送電子郵件。
Apache 許可證,版本 2.0
如果您的軟體未在此列出,請與我們聯絡。
請參閱此處和此處的 Google Scholar 以獲取不斷更新的清單。
請參閱 GitHub 貢獻者頁面。也請閱讀我們的行為準則指南,以獲得更好的貢獻體驗。
PyMC 是 NumFOCUS 旗下的非營利計畫。如果您想在經濟上支持 PyMC,您可以在這裡捐款。
您可以從 PyMC Labs 獲得專業的諮詢支援。