In [8]:
# Load Biospytial modules and etc.
%matplotlib inline
import sys
sys.path.append('/apps')
import django
django.setup()
import pandas as pd
import matplotlib.pyplot as plt
## Use the ggplot style
plt.style.use('ggplot')
import numpy as np
import GPflow as gp
X = np.linspace(-3,3,20)
Y = np.random.exponential(np.sin(X)**2)

In [9]:
#build the model
k = gp.kernels.Matern32(1,ARD=False) + gp.kernels.Bias(1)
l = gp.likelihoods.Exponential()
m = gp.gpmc.GPMC(X[:,None], Y[:,None], k, l)

In [11]:
m.kern.matern32.lengthscales.prior = gp.priors.Gamma(1., 1.)
m.kern.matern32.variance.prior = gp.priors.Gamma(1.,1.)
m.kern.bias.variance.prior = gp.priors.Gamma(1.,1.)

In [12]:
m.optimize(maxiter=15) # start near MAP
samples = m.sample(500, verbose=True, epsilon=0.12, Lmax=15)


Iteration:  100 	 Acc Rate:  89.0 %
Iteration:  200 	 Acc Rate:  98.0 %
Iteration:  300 	 Acc Rate:  97.0 %
Iteration:  400 	 Acc Rate:  92.0 %
Iteration:  500 	 Acc Rate:  97.0 %

In [13]:
xtest = np.linspace(-4,4,100)[:,None]
f_samples = []
for s in samples:
    m.set_state(s)
    f_samples.append(m.predict_f_samples(xtest, 5))
f_samples = np.vstack(f_samples)

In [14]:
rate_samples = np.exp(f_samples[:,:,0])
plt.figure(figsize=(12, 6))
line, = plt.plot(xtest, np.mean(rate_samples, 0), lw=2)
plt.fill_between(xtest[:,0], np.percentile(rate_samples, 5, axis=0), np.percentile(rate_samples, 95, axis=0), color=line.get_color(), alpha = 0.2)
plt.plot(X, Y, 'kx', mew=2)
plt.ylim(-0.1, np.max(np.percentile(rate_samples, 95, axis=0)))


Out[14]:
(-0.1, 4.7193805705885605)

In [22]:
_ = plt.plot(samples)



In [23]:
## Return a pandas dataframe with the kernel samples
kernel_samples = m.kern.get_samples_df(samples)

In [25]:
kernel_samples.head()


Out[25]:
model.kern.bias.variance model.kern.matern32.lengthscales model.kern.matern32.variance
0 [1.67429768746] [0.25172047118] [4.69821031368]
1 [0.335996331707] [0.538241744139] [4.88782595251]
2 [1.0496911059] [0.319612047783] [1.59165558133]
3 [1.26740552176] [0.459763146775] [2.32098777895]
4 [1.26740552176] [0.459763146775] [2.32098777895]

In [26]:
kernel_samples.mean()


Out[26]:
model.kern.bias.variance            1.261689
model.kern.matern32.lengthscales    0.581166
model.kern.matern32.variance        2.452091
dtype: float64

In [28]:
kernel_samples.std()


Out[28]:
model.kern.bias.variance            0.859474
model.kern.matern32.lengthscales    0.315202
model.kern.matern32.variance        1.250990
dtype: float64

In [ ]: