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 获得专业的咨询支持。