Lựa chọn mô hình Bayes trong PyMC3


11

Tôi đang sử dụng PyMC3 để chạy các mô hình Bayes trên dữ liệu của mình.

Tôi chưa quen với mô hình Bayes nhưng theo một số bài đăng trên blog , Wikipedia và QA từ trang web này, dường như đây là một cách tiếp cận hợp lệ để sử dụng yếu tố Bayes và tiêu chí BIC để có thể chọn mô hình nào thể hiện tốt nhất dữ liệu của tôi (mô hình tạo ra dữ liệu của tôi).

Để tính toán yếu tố Bayes, tôi cần khả năng tương đối cho các mô hình tôi muốn so sánh. Nó có thể hơi khó hiểu với tôi nhưng tôi nghĩ có hai cách để có được khả năng (sửa tôi nếu tôi sai):

  • cách đại số khi mô hình đơn giản: xem ví dụ Wikipedia trang yếu tố Bayes

  • cách số: đây là những gì PyMC3 làm với các thuật toán MCMC

Làm cách nào tôi có thể truy cập vào khả năng và so sánh các mô hình của mình trong PyMC3? Tôi tìm thấy model.logpphương pháp mà theo tài liệu là "hàm mật độ xác suất log". Tôi có thể sử dụng nó để có được khả năng?

Câu hỏi thưởng: khi hai mô hình được so sánh tỷ lệ giữa cả hai khả năng được tính toán. Điều gì xảy ra nếu bạn muốn so sánh một số mô hình?

Một ví dụ cụ thể về PyMC3 sẽ rất hữu ích!

Câu trả lời:


15

Bạn có thể tính toán khả năng của một mô hình thực sự bằng cách sử dụng model.logp (). Là đầu vào, nó đòi hỏi một điểm. Ví dụ: mô hình TỐT NHẤT từ thư mục ví dụ tôi có thể làm:

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}))

Lưu ý rằng mô hình này đang sử dụng các biến được chuyển đổi, vì vậy tôi phải cung cấp các biến này. Sau đó, bạn có thể lấy exp () của số đó và sử dụng nó bên trong một bộ tích phân số, ví dụ như được cung cấp bởi scipy.integrate. Vấn đề là ngay cả khi chỉ có 5 thông số, điều này sẽ rất chậm.

Các yếu tố Bayes thường rất khó tính toán vì bạn phải tích hợp trên không gian tham số hoàn chỉnh. Có một số ý tưởng để sử dụng các mẫu MCMC cho điều đó. Xem bài đăng này, và đặc biệt là phần bình luận để biết thêm thông tin: https://radfordneal.wordpress.com/2008/08/17/the-harmonic-mean-of-the-likabilities-worst-monte-carlo-method-ever / Trường hợp không may cho BIC là tương tự.

Nếu bạn thực sự muốn tính toán Yếu tố Bayes, bạn cũng có thể xem xét nghiệm Tỷ lệ Savic Dickey (xem ví dụ: http://drsmorey.org/bibtex/upload/Wagenmakers:etal:2010.pdf ), nhưng ứng dụng này bị hạn chế.

Tôi cho rằng bạn đang cố gắng thực hiện so sánh mô hình vốn là một lĩnh vực có nhiều ý kiến ​​và giải pháp (một số khó thực hiện, như BF). Một biện pháp tính toán rất dễ dàng là Tiêu chí Thông tin sai lệch. Nó có nhược điểm của nó, mặc dù một số trong số chúng có thể được khắc phục (xem http: // onlinel Library.wiley.com/doi/10.1111/rssb.12062/abab ). Thật không may, chúng tôi chưa chuyển mã pymc3, nhưng nó sẽ khá dễ dàng (xem tại đây để triển khai pymc2: https://github.com/pymc-devs/pymc/blob/895c24f62b9f5d786bce7ac4fe88edb4 L410 ).

Kruschke ủng hộ cách tiếp cận để chỉ xây dựng mô hình đầy đủ và để nó cho bạn biết thông số nào quan trọng. Bạn cũng có thể xây dựng lựa chọn biến vào chính mô hình (xem ví dụ: http://arxiv.org/pdf/math/0505633.pdf ).

Cuối cùng, để điều trị đầy đủ hơn, hãy xem bài đăng trên blog gần đây: http://jakevdp.github.io/blog/2015/08/07/frequentism-and-bayesianism-5-model-selection/


1
Đã mở một vấn đề khi thêm DIC vào pymc3: github.com/pymc-devs/pymc3/issues/797
twiecki
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.