PyMC (المعروفة سابقًا باسم PyMC3) عبارة عن حزمة Python للنمذجة الإحصائية الافتراضية مع التركيز على خوارزميات سلسلة ماركوف المتقدمة Monte Carlo (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 )
من الملخص يمكننا أن نرى أن متوسط المعلمات المستنتجة قريب جدًا من المعلمات الثابتة
بارامس | يقصد | SD | hdi_3% | hdi_97% | mcse_mean | mcse_sd | ess_bulk | ess_tail | r_hat |
---|---|---|---|---|---|---|---|---|---|
بيتا [ساعات ضوء الشمس] | 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 |
بيتا [نيتروجين التربة] | 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" )
ستبدو البيانات الجديدة المشروطة بالمعلمات المستنتجة كما يلي:
الإخراج | يقصد | SD | hdi_3% | hdi_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" )
ستبدو البيانات الجديدة، في ظل السيناريو أعلاه، كما يلي:
الإخراج | يقصد | SD | hdi_3% | hdi_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، فإننا نشجع النشر على منتدى الخطاب الخاص بنا ضمن فئة "الأسئلة". يمكنك أيضًا اقتراح ميزة في فئة "التطوير".
يمكنك أيضًا متابعتنا على منصات التواصل الاجتماعي هذه للحصول على التحديثات والإعلانات الأخرى:
للإبلاغ عن مشكلة مع PyMC، يرجى استخدام أداة تعقب المشكلات.
أخيرًا، إذا كنت بحاجة إلى التواصل للحصول على معلومات غير فنية حول المشروع، أرسل لنا بريدًا إلكترونيًا.
ترخيص أباتشي، الإصدار 2.0
يرجى الاتصال بنا إذا لم يكن برنامجك مدرجًا هنا.
راجع الباحث العلمي من Google هنا وهنا للحصول على قائمة محدثة باستمرار.
راجع صفحة المساهمة في GitHub. اقرأ أيضًا إرشادات قواعد السلوك الخاصة بنا للحصول على تجربة مساهمة أفضل.
PyMC هو مشروع غير ربحي تحت مظلة NumFOCUS. إذا كنت ترغب في دعم PyMC ماليًا، يمكنك التبرع هنا.
يمكنك الحصول على دعم استشاري احترافي من PyMC Labs.