PyMC (เดิมชื่อ PyMC3) เป็นแพ็คเกจ Python สำหรับการสร้างแบบจำลองทางสถิติแบบเบย์ที่เน้นไปที่อัลกอริทึม Markov chain 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 โปรดใช้เครื่องมือติดตามปัญหา
สุดท้ายนี้ หากคุณต้องการติดต่อข้อมูลที่ไม่ใช่ด้านเทคนิคเกี่ยวกับโครงการ โปรดส่งอีเมลถึงเรา
ใบอนุญาต Apache เวอร์ชัน 2.0
โปรดติดต่อเราหากซอฟต์แวร์ของคุณไม่อยู่ในรายการที่นี่
ดู Google Scholar ที่นี่ และ ที่นี่ สำหรับรายการที่อัปเดตอย่างต่อเนื่อง
ดูหน้าผู้สนับสนุน GitHub โปรดอ่านหลักเกณฑ์หลักจรรยาบรรณของเราเพื่อประสบการณ์การมีส่วนร่วมที่ดียิ่งขึ้น
PyMC เป็นโครงการที่ไม่แสวงหากำไรภายใต้ร่ม NumFOCUS หากคุณต้องการสนับสนุน PyMC ทางการเงิน คุณสามารถบริจาคได้ที่นี่
คุณสามารถรับการสนับสนุนการให้คำปรึกษาอย่างมืออาชีพจาก PyMC Labs