Есть ли способ для pymc3 вызвать исключение, когда target_accept не выполняется?

В настоящее время я запускаю модели выборки и обучения в цикле. и я хочу пропустить их, если они не соответствуют требованию target_except. Это возможно?

Auto-assigning NUTS sampler...
Initializing NUTS using jitter+adapt_diag...
Multiprocess sampling (4 chains in 4 jobs)
NUTS: [defs_star, atts_star, intercept, sd_def_log__, sd_att_log__, home]
100%|█████████████████████████████████████████████████████████████████████████████████████████████████| 2000/2000 [02:31<00:00, 13.21it/s]
There were 5 divergences after tuning. Increase `target_accept` or reparameterize.
The acceptance probability does not match the target. It is 0.227249509897, but should be close to 0.8. Try to increase the number of tuni
ng steps.
The gelman-rubin statistic is larger than 1.05 for some parameters. This indicates slight problems during sampling.
The estimated number of effective samples is smaller than 200 for some parameters.
100%|████████████████████████████████████████████████████████████████████████████████████████████████| 3000/3000 [00:06<00:00, 467.94it/s]
[8, [56]]

ИЗМЕНИТЬ

В настоящее время я не хочу изменять параметры или настраивать модель. Это будет в другом вопросе.


person George Pamfilis    schedule 08.05.2018    source источник


Ответы (1)


В настоящее время есть два способа сделать это: первый — «благословенный» способ, который сейчас не очень гибкий.

with pm.Model():
    ...
    trace = pm.sample()

trace.report.raise_ok()

Это поднимет ValueError для расхождений или плохой настройки, но это довольно новое, поэтому вы еще не можете легко указать типы расхождений.

Другой способ, гораздо менее стабильный, заключается в том, что с тем же объектом trace, что и выше,

from pymc3.backends.report import WarningType


if any(w.kind is WarningType.BAD_ACCEPTANCE for w in trace.report._warnings):
    raise SomeCustomError(w.message)

Атрибут _warnings помечен как закрытый и может измениться в будущем, но может дать вам больше гибкости при доступе к статистике конвергенции.

person colcarroll    schedule 08.05.2018