PyMC (旧名 PyMC3) は、高度なマルコフ連鎖モンテカルロ (MCMC) および変分推論 (VI) アルゴリズムに焦点を当てたベイズ統計モデリング用の Python パッケージです。その柔軟性と拡張性により、大規模な一連の問題に適用できます。
PyMC の概要、または多くの例の 1 つを確認してください。 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 から専門的なコンサルティング サポートを受けることができます。