Hi all,
I am trying to configure PyMC3 Polynomial kernel with the following hyperpriors;
with pm.Model() as self.model:
l = pm.Gamma("l", alpha=2, beta=1)
offset = pm.Gamma("offset", alpha=2, beta=1)
nu = pm.HalfCauchy("nu", beta=1)
d = pm.HalfNormal("d", sd=5)
cov = nu ** 2 * pm.gp.cov.Polynomial(X.shape[1], l, d, offset)
self.gp = pm.gp.Marginal(cov_func=cov)
sigma = pm.HalfCauchy("sigma", beta=1)
y_ = self.gp.marginal_likelihood("y", X=X, y=Y, noise=sigma)
self.map_trace = [pm.find_MAP()]
However, I’m getting Cholesky decomposition failed due to %-th leading minor of the array is not positive definite error as follows when sampling using this code snippet;
with model:
f_pred = gp.conditional('f_pred', X_test)
pred_samples = pm.sample_posterior_predictive(map_trace, vars=[f_pred], samples=2000)
y_pred, uncer = pred_samples['f_pred'].mean(axis=0), pred_samples['f_pred'].std(axis=0)
Error:
LinAlgError Traceback (most recent call last)
/usr/local/lib/python3.6/dist-packages/theano/compile/function_module.py in __call__(self, *args, **kwargs)
902 outputs =\
--> 903 self.fn() if output_subset is None else\
904 self.fn(output_subset=output_subset)
24 frames
LinAlgError: 7-th leading minor of the array is not positive definite
During handling of the above exception, another exception occurred:
LinAlgError Traceback (most recent call last)
/usr/local/lib/python3.6/dist-packages/scipy/linalg/decomp_cholesky.py in _cholesky(a, lower, overwrite_a, clean, check_finite)
38 if info > 0:
39 raise LinAlgError("%d-th leading minor of the array is not positive "
---> 40 "definite" % info)
41 if info < 0:
42 raise ValueError('LAPACK reported an illegal value in {}-th argument'
LinAlgError: 7-th leading minor of the array is not positive definite
Apply node that caused the error: Cholesky{lower=True, destructive=False, on_error='raise'}(Elemwise{Composite{((sqr(i0) * i1) + i2 + i3)}}[(0, 0)].0)
Toposort index: 11
Inputs types: [TensorType(float64, matrix)]
Inputs shapes: [(40, 40)]
Inputs strides: [(320, 8)]
Inputs values: ['not shown']
Outputs clients: [[Solve{A_structure='lower_triangular', lower=False, overwrite_A=False, overwrite_b=False}(Cholesky{lower=True, destructive=False, on_error='raise'}.0, TensorConstant{[ 69.79 .. 472.83]}), Solve{A_structure='lower_triangular', lower=False, overwrite_A=False, overwrite_b=False}(Cholesky{lower=True, destructive=False, on_error='raise'}.0, Elemwise{Composite{(sqr(i0) * i1)}}[(0, 0)].0)]]
I checked the data, and there are no duplicates or NaN values. Infact, the same dataset works fine on Matern kernel.
Can someone help to properly configure this kernel?
Thanks.