mirror of
https://github.com/SheffieldML/GPy.git
synced 2026-05-24 14:15:14 +02:00
Merge branch 'devel' of github.com:SheffieldML/GPy into devel
This commit is contained in:
commit
e46de2e569
2 changed files with 29 additions and 84 deletions
|
|
@ -17,28 +17,27 @@ def tuto_GP_regression():
|
||||||
X = np.random.uniform(-3.,3.,(20,1))
|
X = np.random.uniform(-3.,3.,(20,1))
|
||||||
Y = np.sin(X) + np.random.randn(20,1)*0.05
|
Y = np.sin(X) + np.random.randn(20,1)*0.05
|
||||||
|
|
||||||
kernel = GPy.kern.rbf(D=1, variance=1., lengthscale=1.)
|
kernel = GPy.kern.rbf(input_dim=1, variance=1., lengthscale=1.)
|
||||||
|
|
||||||
m = GPy.models.GPRegression(X, Y, kernel)
|
m = GPy.models.GPRegression(X, Y, kernel)
|
||||||
|
|
||||||
print m
|
print m
|
||||||
m.plot()
|
m.plot()
|
||||||
|
|
||||||
|
m.ensure_default_constraints()
|
||||||
m.constrain_positive('')
|
m.constrain_positive('')
|
||||||
|
|
||||||
m.unconstrain('') # Required to remove the previous constrains
|
m.unconstrain('') # may be used to remove the previous constrains
|
||||||
m.constrain_positive('rbf_variance')
|
m.constrain_positive('.*rbf_variance')
|
||||||
m.constrain_bounded('lengthscale',1.,10. )
|
m.constrain_bounded('.*lengthscale',1.,10. )
|
||||||
m.constrain_fixed('noise',0.0025)
|
m.constrain_fixed('.*noise',0.0025)
|
||||||
|
|
||||||
m.optimize()
|
m.optimize()
|
||||||
|
|
||||||
m.optimize_restarts(num_restarts = 10)
|
m.optimize_restarts(num_restarts = 10)
|
||||||
|
|
||||||
###########################
|
#######################################################
|
||||||
# 2-dimensional example #
|
#######################################################
|
||||||
###########################
|
|
||||||
|
|
||||||
# sample inputs and outputs
|
# sample inputs and outputs
|
||||||
X = np.random.uniform(-3.,3.,(50,2))
|
X = np.random.uniform(-3.,3.,(50,2))
|
||||||
Y = np.sin(X[:,0:1]) * np.sin(X[:,1:2])+np.random.randn(50,1)*0.05
|
Y = np.sin(X[:,0:1]) * np.sin(X[:,1:2])+np.random.randn(50,1)*0.05
|
||||||
|
|
@ -53,22 +52,19 @@ def tuto_GP_regression():
|
||||||
m.constrain_positive('')
|
m.constrain_positive('')
|
||||||
|
|
||||||
# optimize and plot
|
# optimize and plot
|
||||||
pb.figure()
|
|
||||||
m.optimize('tnc', max_f_eval = 1000)
|
m.optimize('tnc', max_f_eval = 1000)
|
||||||
|
|
||||||
m.plot()
|
m.plot()
|
||||||
print(m)
|
print(m)
|
||||||
|
return(m)
|
||||||
|
|
||||||
def tuto_kernel_overview():
|
def tuto_kernel_overview():
|
||||||
"""The detailed explanations of the commands used in this file can be found in the tutorial section"""
|
"""The detailed explanations of the commands used in this file can be found in the tutorial section"""
|
||||||
pb.ion()
|
ker1 = GPy.kern.rbf(1) # Equivalent to ker1 = GPy.kern.rbf(input_dim=1, variance=1., lengthscale=1.)
|
||||||
|
ker2 = GPy.kern.rbf(input_dim=1, variance = .75, lengthscale=2.)
|
||||||
ker1 = GPy.kern.rbf(1) # Equivalent to ker1 = GPy.kern.rbf(D=1, variance=1., lengthscale=1.)
|
|
||||||
ker2 = GPy.kern.rbf(D=1, variance = .75, lengthscale=2.)
|
|
||||||
ker3 = GPy.kern.rbf(1, .5, .5)
|
ker3 = GPy.kern.rbf(1, .5, .5)
|
||||||
|
|
||||||
print ker2
|
print ker2
|
||||||
|
|
||||||
ker1.plot()
|
ker1.plot()
|
||||||
ker2.plot()
|
ker2.plot()
|
||||||
ker3.plot()
|
ker3.plot()
|
||||||
|
|
@ -77,28 +73,13 @@ def tuto_kernel_overview():
|
||||||
k2 = GPy.kern.Matern32(1, 0.5, 0.2)
|
k2 = GPy.kern.Matern32(1, 0.5, 0.2)
|
||||||
|
|
||||||
# Product of kernels
|
# Product of kernels
|
||||||
k_prod = k1.prod(k2)
|
k_prod = k1.prod(k2) # By default, tensor=False
|
||||||
k_prodorth = k1.prod_orthogonal(k2)
|
k_prodtens = k1.prod(k2,tensor=True)
|
||||||
|
|
||||||
# Sum of kernels
|
# Sum of kernels
|
||||||
k_add = k1.add(k2)
|
k_add = k1.add(k2) # By default, tensor=False
|
||||||
k_addorth = k1.add_orthogonal(k2)
|
k_addtens = k1.add(k2,tensor=True)
|
||||||
|
|
||||||
pb.figure(figsize=(8,8))
|
|
||||||
pb.subplot(2,2,1)
|
|
||||||
k_prod.plot()
|
|
||||||
pb.title('prod')
|
|
||||||
pb.subplot(2,2,2)
|
|
||||||
k_prodorth.plot()
|
|
||||||
pb.title('prod_orthogonal')
|
|
||||||
pb.subplot(2,2,3)
|
|
||||||
k_add.plot()
|
|
||||||
pb.title('add')
|
|
||||||
pb.subplot(2,2,4)
|
|
||||||
k_addorth.plot()
|
|
||||||
pb.title('add_orthogonal')
|
|
||||||
pb.subplots_adjust(wspace=0.3, hspace=0.3)
|
|
||||||
|
|
||||||
k1 = GPy.kern.rbf(1,1.,2)
|
k1 = GPy.kern.rbf(1,1.,2)
|
||||||
k2 = GPy.kern.periodic_Matern52(1,variance=1e3, lengthscale=1, period = 1.5, lower=-5., upper = 5)
|
k2 = GPy.kern.periodic_Matern52(1,variance=1e3, lengthscale=1, period = 1.5, lower=-5., upper = 5)
|
||||||
|
|
||||||
|
|
@ -109,18 +90,6 @@ def tuto_kernel_overview():
|
||||||
X = np.linspace(-5,5,501)[:,None]
|
X = np.linspace(-5,5,501)[:,None]
|
||||||
Y = np.random.multivariate_normal(np.zeros(501),k.K(X),1)
|
Y = np.random.multivariate_normal(np.zeros(501),k.K(X),1)
|
||||||
|
|
||||||
# plot
|
|
||||||
pb.figure(figsize=(10,4))
|
|
||||||
pb.subplot(1,2,1)
|
|
||||||
k.plot()
|
|
||||||
pb.subplot(1,2,2)
|
|
||||||
pb.plot(X,Y.T)
|
|
||||||
pb.ylabel("Sample path")
|
|
||||||
pb.subplots_adjust(wspace=0.3)
|
|
||||||
|
|
||||||
k = (k1+k2)*(k1+k2)
|
|
||||||
print k.parts[0].name, '\n', k.parts[1].name, '\n', k.parts[2].name, '\n', k.parts[3].name
|
|
||||||
|
|
||||||
k1 = GPy.kern.rbf(1)
|
k1 = GPy.kern.rbf(1)
|
||||||
k2 = GPy.kern.Matern32(1)
|
k2 = GPy.kern.Matern32(1)
|
||||||
k3 = GPy.kern.white(1)
|
k3 = GPy.kern.white(1)
|
||||||
|
|
@ -128,16 +97,16 @@ def tuto_kernel_overview():
|
||||||
k = k1 + k2 + k3
|
k = k1 + k2 + k3
|
||||||
print k
|
print k
|
||||||
|
|
||||||
k.constrain_positive('var')
|
k.constrain_positive('.*var')
|
||||||
k.constrain_fixed(np.array([1]),1.75)
|
k.constrain_fixed(np.array([1]),1.75)
|
||||||
k.tie_params('len')
|
k.tie_params('.*len')
|
||||||
k.unconstrain('white')
|
k.unconstrain('white')
|
||||||
k.constrain_bounded('white',lower=1e-5,upper=.5)
|
k.constrain_bounded('white',lower=1e-5,upper=.5)
|
||||||
print k
|
print k
|
||||||
|
|
||||||
k_cst = GPy.kern.bias(1,variance=1.)
|
k_cst = GPy.kern.bias(1,variance=1.)
|
||||||
k_mat = GPy.kern.Matern52(1,variance=1., lengthscale=3)
|
k_mat = GPy.kern.Matern52(1,variance=1., lengthscale=3)
|
||||||
Kanova = (k_cst + k_mat).prod_orthogonal(k_cst + k_mat)
|
Kanova = (k_cst + k_mat).prod(k_cst + k_mat,tensor=True)
|
||||||
print Kanova
|
print Kanova
|
||||||
|
|
||||||
# sample inputs and outputs
|
# sample inputs and outputs
|
||||||
|
|
@ -148,7 +117,7 @@ def tuto_kernel_overview():
|
||||||
m = GPy.models.GPRegression(X, Y, Kanova)
|
m = GPy.models.GPRegression(X, Y, Kanova)
|
||||||
pb.figure(figsize=(5,5))
|
pb.figure(figsize=(5,5))
|
||||||
m.plot()
|
m.plot()
|
||||||
|
|
||||||
pb.figure(figsize=(20,3))
|
pb.figure(figsize=(20,3))
|
||||||
pb.subplots_adjust(wspace=0.5)
|
pb.subplots_adjust(wspace=0.5)
|
||||||
pb.subplot(1,5,1)
|
pb.subplot(1,5,1)
|
||||||
|
|
@ -156,41 +125,17 @@ def tuto_kernel_overview():
|
||||||
pb.subplot(1,5,2)
|
pb.subplot(1,5,2)
|
||||||
pb.ylabel("= ",rotation='horizontal',fontsize='30')
|
pb.ylabel("= ",rotation='horizontal',fontsize='30')
|
||||||
pb.subplot(1,5,3)
|
pb.subplot(1,5,3)
|
||||||
m.plot(which_functions=[False,True,False,False])
|
m.plot(which_parts=[False,True,False,False])
|
||||||
pb.ylabel("cst +",rotation='horizontal',fontsize='30')
|
pb.ylabel("cst +",rotation='horizontal',fontsize='30')
|
||||||
pb.subplot(1,5,4)
|
pb.subplot(1,5,4)
|
||||||
m.plot(which_functions=[False,False,True,False])
|
m.plot(which_parts=[False,False,True,False])
|
||||||
pb.ylabel("+ ",rotation='horizontal',fontsize='30')
|
pb.ylabel("+ ",rotation='horizontal',fontsize='30')
|
||||||
pb.subplot(1,5,5)
|
pb.subplot(1,5,5)
|
||||||
pb.ylabel("+ ",rotation='horizontal',fontsize='30')
|
pb.ylabel("+ ",rotation='horizontal',fontsize='30')
|
||||||
m.plot(which_functions=[False,False,False,True])
|
m.plot(which_parts=[False,False,False,True])
|
||||||
|
|
||||||
ker1 = GPy.kern.rbf(D=1) # Equivalent to ker1 = GPy.kern.rbf(D=1, variance=1., lengthscale=1.)
|
return(m)
|
||||||
ker2 = GPy.kern.rbf(D=1, variance = .75, lengthscale=3.)
|
|
||||||
ker3 = GPy.kern.rbf(1, .5, .25)
|
|
||||||
|
|
||||||
ker1.plot()
|
|
||||||
ker2.plot()
|
|
||||||
ker3.plot()
|
|
||||||
#pb.savefig("Figures/tuto_kern_overview_basicdef.png")
|
|
||||||
|
|
||||||
kernels = [GPy.kern.rbf(1), GPy.kern.exponential(1), GPy.kern.Matern32(1), GPy.kern.Matern52(1), GPy.kern.Brownian(1), GPy.kern.bias(1), GPy.kern.linear(1), GPy.kern.spline(1), GPy.kern.periodic_exponential(1), GPy.kern.periodic_Matern32(1), GPy.kern.periodic_Matern52(1), GPy.kern.white(1)]
|
|
||||||
kernel_names = ["GPy.kern.rbf", "GPy.kern.exponential", "GPy.kern.Matern32", "GPy.kern.Matern52", "GPy.kern.Brownian", "GPy.kern.bias", "GPy.kern.linear", "GPy.kern.spline", "GPy.kern.periodic_exponential", "GPy.kern.periodic_Matern32", "GPy.kern.periodic_Matern52", "GPy.kern.white"]
|
|
||||||
|
|
||||||
pb.figure(figsize=(16,12))
|
|
||||||
pb.subplots_adjust(wspace=.5, hspace=.5)
|
|
||||||
for i, kern in enumerate(kernels):
|
|
||||||
pb.subplot(3,4,i+1)
|
|
||||||
kern.plot(x=7.5,plot_limits=[0.00001,15.])
|
|
||||||
pb.title(kernel_names[i]+ '\n')
|
|
||||||
|
|
||||||
# actual plot for the noise
|
|
||||||
i = 11
|
|
||||||
X = np.linspace(0.,15.,201)
|
|
||||||
WN = 0*X
|
|
||||||
WN[100] = 1.
|
|
||||||
pb.subplot(3,4,i+1)
|
|
||||||
pb.plot(X,WN,'b')
|
|
||||||
|
|
||||||
def model_interaction():
|
def model_interaction():
|
||||||
X = np.random.randn(20,1)
|
X = np.random.randn(20,1)
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ The first step is to define the covariance kernel we want to use for the model.
|
||||||
|
|
||||||
kernel = GPy.kern.rbf(input_dim=1, variance=1., lengthscale=1.)
|
kernel = GPy.kern.rbf(input_dim=1, variance=1., lengthscale=1.)
|
||||||
|
|
||||||
The parameter ``D`` stands for the dimension of the input space. The parameters ``variance`` and ``lengthscale`` are optional. Many other kernels are implemented such as:
|
The parameter ``input_dim`` stands for the dimension of the input space. The parameters ``variance`` and ``lengthscale`` are optional. Many other kernels are implemented such as:
|
||||||
|
|
||||||
* linear (``GPy.kern.linear``)
|
* linear (``GPy.kern.linear``)
|
||||||
* exponential kernel (``GPy.kern.exponential``)
|
* exponential kernel (``GPy.kern.exponential``)
|
||||||
|
|
@ -69,7 +69,7 @@ There are various ways to constrain the parameters of the kernel. The most basic
|
||||||
|
|
||||||
but it is also possible to set a range on to constrain one parameter to be fixed. The parameter of ``m.constrain_positive`` is a regular expression that matches the name of the parameters to be constrained (as seen in ``print m``). For example, if we want the variance to be positive, the lengthscale to be in [1,10] and the noise variance to be fixed we can write::
|
but it is also possible to set a range on to constrain one parameter to be fixed. The parameter of ``m.constrain_positive`` is a regular expression that matches the name of the parameters to be constrained (as seen in ``print m``). For example, if we want the variance to be positive, the lengthscale to be in [1,10] and the noise variance to be fixed we can write::
|
||||||
|
|
||||||
m.unconstrain('') # Required to remove the previous constrains
|
m.unconstrain('') # may be used to remove the previous constrains
|
||||||
m.constrain_positive('.*rbf_variance')
|
m.constrain_positive('.*rbf_variance')
|
||||||
m.constrain_bounded('.*lengthscale',1.,10. )
|
m.constrain_bounded('.*lengthscale',1.,10. )
|
||||||
m.constrain_fixed('.*noise',0.0025)
|
m.constrain_fixed('.*noise',0.0025)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue