Я генерирую некоторые данные, распределенные по Парето, используя следующий код:
a_true, m = 1.9, 3
test = np.round((np.random.pareto(a_true, 1000)+1)*m)
Затем, используя PyMC3, я пытаюсь найти распределение как для alpha
, так и для параметра масштаба m
:
pareto = pm.Model()
with pareto:
m = pm.Uniform('m', lower = 0, upper = 10)
alpha = pm.Uniform('alpha', lower = 1, upper = 5)
yhat = pm.Pareto('yhat', m = m, alpha = alpha, observed = test)
trace_pareto = pm.sample(10000,tune=1000)
PyMC3, однако, возвращает известную ошибку:
uto-assigning NUTS sampler...
Initializing NUTS using jitter+adapt_diag...
Multiprocess sampling (4 chains in 4 jobs)
NUTS: [alpha, m]
Sampling 4 chains: 0%| | 0/44000 [00:00<?, ?draws/s]
---------------------------------------------------------------------------
RemoteTraceback Traceback (most recent call last)
RemoteTraceback:
"""
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/pymc3/parallel_sampling.py", line 73, in run
self._start_loop()
File "/usr/local/lib/python3.7/site-packages/pymc3/parallel_sampling.py", line 113, in _start_loop
point, stats = self._compute_point()
File "/usr/local/lib/python3.7/site-packages/pymc3/parallel_sampling.py", line 139, in _compute_point
point, stats = self._step_method.step(self._point)
File "/usr/local/lib/python3.7/site-packages/pymc3/step_methods/arraystep.py", line 247, in step
apoint, stats = self.astep(array)
File "/usr/local/lib/python3.7/site-packages/pymc3/step_methods/hmc/base_hmc.py", line 117, in astep
'might be misspecified.' % start.energy)
ValueError: Bad initial energy: inf. The model might be misspecified.
"""
The above exception was the direct cause of the following exception:
Debugging
Когда я вручную устанавливаю значение m
, равное 3 (его истинное значение), тогда PyMC3 производит очень плавную выборку, и распределение для alpha
очень точное.
Я также пытался изменить параметр init
на init = 'adapt_diag'
. Но появляется та же ошибка.
Любая идея о том, что может быть причиной этой ошибки.
Заранее спасибо.