PyMC(이전 PyMC3)는 고급 MCMC(Markov Chain Monte Carlo) 및 VI(변형 추론) 알고리즘에 중점을 둔 베이지안 통계 모델링을 위한 Python 패키지입니다. 유연성과 확장성을 통해 다양한 문제에 적용할 수 있습니다.
PyMC 개요 또는 다양한 예 중 하나를 확인하세요! PyMC에 대한 질문이 있는 경우 PyMC 토론 포럼을 방문하세요.
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에서 전문적인 컨설팅 지원을 받으실 수 있습니다.