I tried the polynomial kernel with the following settings. As you can see I use hyperpriors to the all parameters to the kernel.
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)
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)
map_trace = [pm.find_MAP()]
Then I get the following error say that the Cholesky decomposition was failed during the sampling from the predictive distributions.
Does anyone help me with correctly defining the GP polynomial kernel?
Error Trace :
logp = -1.3632e+08, ||grad|| = 4.2484e+08: 100%|██████████| 3/3 [00:00<00:00, 3.31it/s]
0%| | 0/20 [00:00<?, ?it/s]
Traceback (most recent call last):
File "/home/nadheesh/PycharmProjects/performancePredictionForArchitecturePlaning/run/rint-2006-all-o.py", line 467, in <module>
test_pred, test_unc = model.predict(test_x, "test_pred_linear", with_error=True)
File "/home/nadheesh/PycharmProjects/performancePredictionForArchitecturePlaning/run/rint-2006-all-o.py", line 239, in predict
pred_samples = pm.sample_ppc(self.map_trace, vars=[f_pred], samples=20, random_seed=seed)
File "/home/nadheesh/anaconda3/envs/edward-test/lib/python2.7/site-packages/pymc3/sampling.py", line 1142, in sample_ppc
values = draw_values(vars, point=param, size=size)
File "/home/nadheesh/anaconda3/envs/edward-test/lib/python2.7/site-packages/pymc3/distributions/distribution.py", line 293, in draw_values
size=size))
File "/home/nadheesh/anaconda3/envs/edward-test/lib/python2.7/site-packages/pymc3/distributions/distribution.py", line 384, in _draw_value
return param.random(point=point, size=size)
File "/home/nadheesh/anaconda3/envs/edward-test/lib/python2.7/site-packages/pymc3/model.py", line 42, in __call__
return getattr(self.obj, self.method_name)(*args, **kwargs)
File "/home/nadheesh/anaconda3/envs/edward-test/lib/python2.7/site-packages/pymc3/distributions/multivariate.py", line 237, in random
mu, cov = draw_values([self.mu, self.cov], point=point, size=size)
File "/home/nadheesh/anaconda3/envs/edward-test/lib/python2.7/site-packages/pymc3/distributions/distribution.py", line 321, in draw_values
evaluated[param_idx] = _draw_value(param, point=point, givens=givens.values(), size=size)
File "/home/nadheesh/anaconda3/envs/edward-test/lib/python2.7/site-packages/pymc3/distributions/distribution.py", line 417, in _draw_value
return func(*values)
File "/home/nadheesh/anaconda3/envs/edward-test/lib/python2.7/site-packages/theano/compile/function_module.py", line 917, in __call__
storage_map=getattr(self.fn, 'storage_map', None))
File "/home/nadheesh/anaconda3/envs/edward-test/lib/python2.7/site-packages/theano/gof/link.py", line 325, in raise_with_op
reraise(exc_type, exc_value, exc_trace)
File "/home/nadheesh/anaconda3/envs/edward-test/lib/python2.7/site-packages/theano/compile/function_module.py", line 903, in __call__
self.fn() if output_subset is None else\
File "/home/nadheesh/anaconda3/envs/edward-test/lib/python2.7/site-packages/theano/gof/op.py", line 892, in rval
r = p(n, [x[0] for x in i], o)
File "/home/nadheesh/anaconda3/envs/edward-test/lib/python2.7/site-packages/theano/tensor/slinalg.py", line 76, in perform
z[0] = scipy.linalg.cholesky(x, lower=self.lower).astype(x.dtype)
File "/home/nadheesh/anaconda3/envs/edward-test/lib/python2.7/site-packages/scipy/linalg/decomp_cholesky.py", line 91, in cholesky
check_finite=check_finite)
File "/home/nadheesh/anaconda3/envs/edward-test/lib/python2.7/site-packages/scipy/linalg/decomp_cholesky.py", line 40, in _cholesky
"definite" % info)
numpy.linalg.linalg.LinAlgError: 3-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{((((i0 + i1) ** i2) * i3) + i4 + i5)}}[(0, 0)].0)
Toposort index: 15
Inputs types: [TensorType(float64, matrix)]
Inputs shapes: [(1071, 1071)]
Inputs strides: [(8568, 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{[ 1727. 1..4. 8631.]}), Solve{A_structure='lower_triangular', lower=False, overwrite_A=False, overwrite_b=False}(Cholesky{lower=True, destructive=False, on_error='raise'}.0, Elemwise{Composite{(((i0 + i1) ** i2) * i3)}}[(0, 0)].0)]]
Backtrace when the node is created(use Theano flag traceback.limit=N to make it longer):
File "/home/nadheesh/PycharmProjects/performancePredictionForArchitecturePlaning/run/rint-2006-all-o.py", line 467, in <module>
test_pred, test_unc = model.predict(test_x, "test_pred_linear", with_error=True)
File "/home/nadheesh/PycharmProjects/performancePredictionForArchitecturePlaning/run/rint-2006-all-o.py", line 238, in predict
f_pred = self.gp.conditional(name, X)
File "/home/nadheesh/anaconda3/envs/edward-test/lib/python2.7/site-packages/pymc3/gp/gp.py", line 503, in conditional
mu, cov = self._build_conditional(Xnew, pred_noise, False, *givens)
File "/home/nadheesh/anaconda3/envs/edward-test/lib/python2.7/site-packages/pymc3/gp/gp.py", line 452, in _build_conditional
L = cholesky(stabilize(Kxx) + Knx)