Người mới bắt đầu PyMC: làm thế nào để thực sự lấy mẫu từ mô hình được trang bị


11

Tôi đang thử một mô hình rất đơn giản: lắp một Bình thường trong đó tôi cho rằng tôi biết độ chính xác và tôi chỉ muốn tìm giá trị trung bình. Mã dưới đây có vẻ phù hợp với Bình thường một cách chính xác. Nhưng sau khi khớp, tôi muốn lấy mẫu từ mô hình, tức là tạo dữ liệu mới tương tự với databiến của tôi . Tôi biết tôi có thể sử dụng trace("mean")để lấy mẫu cho biến trung bình. Nhưng làm thế nào tôi có thể lấy mẫu mới từ chính mô hình?

Tôi đã xem các tài liệu, ví dụ: http://pymc-devs.github.io/pymc/database.html#accessing-sampling-data . Tôi cũng đã xem xét một vài ví dụ, ví dụ như thảm họa khai thác và một số từ sổ ghi chép Lập trình Xác suất, và không đề cập đến điều này. Tôi (ít nhiều là người mới bắt đầu MCMC) mong đợi rằng việc lấy mẫu từ mô hình được trang bị là toàn bộ vấn đề! Tôi đang thiếu gì?

from pymc import *
data = np.array([-1, 0, 4, 0, 2, -2, 1, 0, 0, 2, 1, -3, -1, 0, 0, 1, 0, 1])
mean = Uniform("mean", -4, 4)
precision = 2.0**-2
obs = Normal("obs", mean, precision, value=data, observed=True)
model = Model( {"mean": mean, "obs": obs})
mcmc = MCMC(model)
mcmc.sample(10000, 1000, 1)
# I can get samples for the "mean" variable
mean_samples = mcmc.trace("mean")[:]
hist(mean_samples)
# but how can I do the equivalent of mcmc.trace("obs")?

Chính xác là câu hỏi tôi đã có! Tự hỏi nếu việc lấy mẫu dự đoán được đơn giản hóa trong pymc3 ...
Vladislavs Dovgalecs

Câu trả lời:


13

Bạn đang tìm kiếm những gì được gọi là phân phối dự đoán . Để bao gồm điều này là rất đơn giản. Trước khi tạo Model, thêm biến ngẫu nhiên bổ sung:

predictive = mc.Normal( "predictive", mean, precision )
model = Model( {"mean": mean, "obs": obs, "pred":predictive})

...

predictive_traces = mcmc.trace("predictive")[:]
hist( predictive_traces )

Dữ liệu nhân tạo từ mô hình được trang bị

Điều này sẽ tạo ra dữ liệu nhân tạo từ mô hình được trang bị. Cảm ơn vì đã chú ý đến sự chú ý này, tôi sẽ đưa nó vào dự án BMH.


Làm thế nào để bạn tạo ra một mảng gồm n biến ngẫu nhiên trong đó n là ngẫu nhiên? stackoverflow.com/questions/45283843/ (Xin lỗi vì điều này là quá nhiều ...)
Drainke

3

Đã hạ cánh ở đây vài năm sau khi tìm kiếm điều tương tự bằng PyMC3, vì vậy tôi sẽ để lại câu trả lời liên quan đến phiên bản mới: (từ Kiểm tra dự đoán sau ).

ppc = pm.sample_ppc(trace, samples=500, model=model, size=100)

Bây giờ, ppc chứa 500 bộ dữ liệu được tạo (chứa 100 mẫu mỗi mẫu), mỗi mẫu sử dụng một cài đặt tham số khác nhau từ phía sau.

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.