PyMC3'te Bayesci model seçimi


11

Verilerimde Bayesian modellerini çalıştırmak için PyMC3 kullanıyorum.

Bayesian modellemede yeniyim, ancak bu sitedeki bazı blog yayınlarına , Wikipedia ve QA'ya göre , verilerimi en iyi hangi modeli temsil edebileceğini seçmek için Bayes faktörünü ve BIC ölçütünü kullanmak geçerli bir yaklaşım gibi görünüyor. benim verim).

Bayes faktörünü hesaplamak için karşılaştırmak istediğim modeller için göreceli olasılığa ihtiyacım var. Belki benim için biraz kafa karıştırıcı ama bence bu olasılığı elde etmenin iki yolu var (yanlışsam beni düzeltin):

  • model basitken cebirsel yol: Wikipedia örneğine bakınız Bayes faktör sayfası

  • sayısal yol: MCMC algoritmaları ile PyMC3 bunu yapar

Olasılığa nasıl erişebilirim ve böylece PyMC3'teki modellerimi karşılaştırabilirim? model.logpDokümana göre "log olasılık yoğunluk fonksiyonu" yöntemi buldum . Bunu yapmak için bunu kullanabilir miyim?

Bonus soru: iki model karşılaştırıldığında her iki olasılık arasındaki oran hesaplanır. Birkaç modeli karşılaştırmak isterseniz ne olur?

Somut bir PyMC3 örneği çok yardımcı olacaktır!

Yanıtlar:


15

Model.logp () kullanarak bir modelin olasılığını hesaplayabilirsiniz. Girdi olarak bir noktaya ihtiyaç duyar. Örneğin, örnekler dizininden BEST modeli yapabilirim:

np.exp(model.logp({'group1_mean': 0.1, 
                   'group2_mean': 0.2, 
                   'group1_std_interval': 1., 
                   'group2_std_interval': 1.2, 
                   'nu_minus_one_log': 1}))

Bu model dönüştürülmüş değişkenler kullandığını unutmayın, bu yüzden bunları sağlamak zorunda. Daha sonra bunun exp () yöntemini alıp sayısal bir entegratörde kullanabilirsiniz, örneğin scipy.integrate. Sorun, sadece 5 parametrede bile, bu çok yavaş olacaktır.

Bayes Faktörlerinin hesaplanması genellikle çok zordur çünkü tüm parametre alanı üzerine entegre olmanız gerekir. Bunun için MCMC örneklerini kullanmanın bazı fikirleri vardır. Daha fazla bilgi için bu gönderiye ve özellikle yorum bölümüne bakın: https://radfordneal.wordpress.com/2008/08/17/the-harmonic-mean-of-the-likelihood-worst-monte-carlo-method-ever / BIC davası maalesef benzer.

Bayes Faktörünü gerçekten hesaplamak istiyorsanız, Savage Dickey Oranı testine de bakabilirsiniz (bkz. Örneğin http://drsmorey.org/bibtex/upload/Wagenmakers:etal:2010.pdf ), ancak uygulama sınırlıdır.

Birçok görüş ve çözüm içeren bir alan olan model karşılaştırması yapmaya çalıştığınızı düşünüyorum (BF'ler gibi uygulanması zor). Hesaplaması çok kolay olan bir önlem, Sapma Bilgisi Kriteri'dir. Bazıları iyileştirilebilse de, olumsuz yanları vardır (bkz. Http://onlinelibrary.wiley.com/doi/10.1111/rssb.12062/abstract ). Maalesef pymc3 kodunu henüz taşımadık, ancak oldukça kolay olurdu (pymc2 uygulaması için buraya bakın: https://github.com/pymc-devs/pymc/blob/895c24f62b9f5d786bce7ac4fe88edb4ad220364/pymc/MCMC.py# L410 ).

Kruschke sadece tam modeli oluşturmak ve hangi parametrelerin önemli olduğunu size bildirmek için yaklaşımı destekliyor. Ayrıca, modelin içine değişken seçimi de oluşturabilirsiniz (bkz . Http://arxiv.org/pdf/math/0505633.pdf ).

Son olarak, çok daha eksiksiz bir tedavi için bu son blog yayınına bakın: http://jakevdp.github.io/blog/2015/08/07/frequentism-and-bayesianism-5-model-selection/


1
Pymc3'e DIC eklemek için bir sorun açıldı: github.com/pymc-devs/pymc3/issues/797
twiecki
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.