pymc3 multiple gaussian process regression

Viewed 1773

I am trying to run a gaussian process regression with two features by extending the first example in https://pymc-devs.github.io/pymc3/notebooks/GP-introduction.html

n = 20
X = np.array([list(a) for a in zip(np.sort(3*np.random.rand(n)), np.sort(3*np.random.rand(n)))])
y = np.random.normal(size=n)

with pm.Model() as model:
    # priors on the covariance function hyperparameters
    l = np.array([pm.Uniform('l1', 0, 10), pm.Uniform('l2', 0, 10)])

    # uninformative prior on the function variance
    log_s2_f = pm.Uniform('log_s2_f', lower=-10, upper=5)
    s2_f = pm.Deterministic('s2_f', tt.exp(log_s2_f))

    # uninformative prior on the noise variance
    log_s2_n = pm.Uniform('log_s2_n', lower=-10, upper=5)
    s2_n = pm.Deterministic('s2_n', tt.exp(log_s2_n))

    # covariance functions for the function f and the noise
    f_cov = s2_f * pm.gp.cov.ExpQuad(input_dim=2, lengthscales=l)

    y_obs = pm.gp.GP('y_obs', cov_func=f_cov, sigma=s2_n, observed={'X':X, 'Y':y})

Here the inputs of X and y are for testing the shape of the inputs. When I run the code I get a theano AsTensorError error which is traced to this in pymc3

/usr/local/lib/python2.7/site-packages/pymc3/gp/cov.pyc in square_dist(self, X, Z)
    124 
    125     def square_dist(self, X, Z):
--> 126         X = tt.mul(X, 1.0 / self.lengthscales)
    127         Xs = tt.sum(tt.square(X), 1)
    128         if Z is None:

Is it possible to run multiple gaussian regression in pymc3? If so I am sure I have messed up with the dimensions somewhere.

1 Answers
Related