bgplvm integrated

This commit is contained in:
Max Zwiessele 2013-11-07 08:52:33 +00:00
parent 8c02e4af36
commit 765ab41045
7 changed files with 22 additions and 23 deletions

View file

@ -13,9 +13,6 @@ from domains import _POSITIVE, _REAL
from numpy.linalg.linalg import LinAlgError from numpy.linalg.linalg import LinAlgError
from index_operations import ParameterIndexOperations from index_operations import ParameterIndexOperations
import itertools import itertools
from GPy.kern.parts.rbf import RBF
from GPy.kern.parts.rbf_inv import RBFInv
from GPy.kern.parts.linear import Linear
# import numdifftools as ndt # import numdifftools as ndt
class Model(Parameterized): class Model(Parameterized):
@ -552,7 +549,9 @@ class Model(Parameterized):
if (not len(k) == 1): if (not len(k) == 1):
raise ValueError, "cannot determine sensitivity for this kernel" raise ValueError, "cannot determine sensitivity for this kernel"
k = k[0] k = k[0]
from ..kern.parts.rbf import RBF
from ..kern.parts.rbf_inv import RBFInv
from ..kern.parts.linear import Linear
if isinstance(k, RBF): if isinstance(k, RBF):
return 1. / k.lengthscale return 1. / k.lengthscale
elif isinstance(k, RBFInv): elif isinstance(k, RBFInv):

View file

@ -207,7 +207,8 @@ class Parameterized(Nameable, Pickleable, Observable):
:param names_params_indices: mix of parameter_names, parameter objects, or indices :param names_params_indices: mix of parameter_names, parameter objects, or indices
to remove from being a parameter of this parameterized object. to remove from being a parameter of this parameterized object.
note: if it is a string object it will be regexp-matched automatically note: if it is a string object it will not (!) be regexp-matched
automatically.
""" """
self._parameters_ = [p for p in self._parameters_ self._parameters_ = [p for p in self._parameters_
if not (p._parent_index_ in names_params_indices if not (p._parent_index_ in names_params_indices

View file

@ -4,10 +4,9 @@
import numpy as np import numpy as np
from matplotlib import pyplot as plt, cm from matplotlib import pyplot as plt, cm
from ..models.bayesian_gplvm import BayesianGPLVM
from ..likelihoods.gaussian import Gaussian
import GPy import GPy
from GPy.core.transformations import Logexp
from GPy.models.bayesian_gplvm import BayesianGPLVM
from GPy.likelihoods.gaussian import Gaussian
default_seed = np.random.seed(123344) default_seed = np.random.seed(123344)
@ -26,10 +25,10 @@ def BGPLVM(seed=default_seed):
lik = Gaussian(Y, normalize=True) lik = Gaussian(Y, normalize=True)
# k = GPy.kern.rbf_inv(input_dim, .5, np.ones(input_dim) * 2., ARD=True) + GPy.kern.bias(input_dim) + GPy.kern.white(input_dim) # k = GPy.kern.rbf_inv(input_dim, .5, np.ones(input_dim) * 2., ARD=True) + GPy.kern.bias(input_dim) + GPy.kern.white(input_dim)
k = GPy.kern.rbf(input_dim, ARD=1) k = GPy.kern.rbf(input_dim, ARD=1, name="rbf1") + GPy.kern.rbf(input_dim, ARD=1, name='rbf2') + GPy.kern.linear(input_dim, ARD=1, name='linear_part')
# k = GPy.kern.rbf(input_dim, ARD = False) # k = GPy.kern.rbf(input_dim, ARD = False)
m = GPy.models.BayesianGPLVM(lik, input_dim, kernel=k, num_inducing=num_inducing) m = BayesianGPLVM(lik, input_dim, kernel=k, num_inducing=num_inducing)
m.lengthscales = lengthscales m.lengthscales = lengthscales
# m.constrain_positive('(rbf|bias|noise|white|S)') # m.constrain_positive('(rbf|bias|noise|white|S)')
# m.constrain_fixed('S', 1) # m.constrain_fixed('S', 1)

View file

@ -5,7 +5,7 @@ import numpy as np
from kern import kern from kern import kern
import parts import parts
def rbf_inv(input_dim,variance=1., inv_lengthscale=None,ARD=False): def rbf_inv(input_dim,variance=1., inv_lengthscale=None,ARD=False,name='inverse rbf'):
""" """
Construct an RBF kernel Construct an RBF kernel
@ -19,10 +19,10 @@ def rbf_inv(input_dim,variance=1., inv_lengthscale=None,ARD=False):
:type ARD: Boolean :type ARD: Boolean
""" """
part = parts.rbf_inv.RBFInv(input_dim,variance,inv_lengthscale,ARD) part = parts.rbf_inv.RBFInv(input_dim,variance,inv_lengthscale,ARD,name=name)
return kern(input_dim, [part]) return kern(input_dim, [part])
def rbf(input_dim,variance=1., lengthscale=None,ARD=False): def rbf(input_dim,variance=1., lengthscale=None,ARD=False, name='rbf'):
""" """
Construct an RBF kernel Construct an RBF kernel
@ -36,10 +36,10 @@ def rbf(input_dim,variance=1., lengthscale=None,ARD=False):
:type ARD: Boolean :type ARD: Boolean
""" """
part = parts.rbf.RBF(input_dim,variance,lengthscale,ARD) part = parts.rbf.RBF(input_dim,variance,lengthscale,ARD, name=name)
return kern(input_dim, [part]) return kern(input_dim, [part])
def linear(input_dim,variances=None,ARD=False): def linear(input_dim,variances=None,ARD=False,name='linear'):
""" """
Construct a linear kernel. Construct a linear kernel.
@ -51,7 +51,7 @@ def linear(input_dim,variances=None,ARD=False):
:type ARD: Boolean :type ARD: Boolean
""" """
part = parts.linear.Linear(input_dim,variances,ARD) part = parts.linear.Linear(input_dim,variances,ARD,name=name)
return kern(input_dim, [part]) return kern(input_dim, [part])
def mlp(input_dim,variance=1., weight_variance=None,bias_variance=100.,ARD=False): def mlp(input_dim,variance=1., weight_variance=None,bias_variance=100.,ARD=False):

View file

@ -9,7 +9,7 @@ from parts.kernpart import Kernpart
import itertools import itertools
from parts.prod import Prod as prod from parts.prod import Prod as prod
from matplotlib.transforms import offset_copy from matplotlib.transforms import offset_copy
import GPy from GPy.kern.parts.linear import Linear
class kern(Parameterized): class kern(Parameterized):
def __init__(self, input_dim, parts=[], input_slices=None): def __init__(self, input_dim, parts=[], input_slices=None):
@ -103,13 +103,13 @@ class kern(Parameterized):
ax.set_title('ARD parameters, %s kernel' % p.name) ax.set_title('ARD parameters, %s kernel' % p.name)
else: else:
ax.set_title(title) ax.set_title(title)
if p.name == 'linear': if isinstance(p, Linear):
ard_params = p.variances ard_params = p.variances
else: else:
ard_params = 1. / p.lengthscale ard_params = 1. / p.lengthscale
x = np.arange(x0, x0 + len(ard_params)) x = np.arange(x0, x0 + len(ard_params))
bars.append(ax.bar(x, ard_params, align='center', color=c, edgecolor='k', linewidth=1.2, label=p.name)) bars.append(ax.bar(x, ard_params, align='center', color=c, edgecolor='k', linewidth=1.2, label=p.name.replace("_"," ")))
xticklabels.extend([r"$\mathrm{{{name}}}\ {x}$".format(name=p.name, x=i) for i in np.arange(len(ard_params))]) xticklabels.extend([r"$\mathrm{{{name}}}\ {x}$".format(name=p.name, x=i) for i in np.arange(len(ard_params))])
x0 += len(ard_params) x0 += len(ard_params)
x = np.arange(x0) x = np.arange(x0)

View file

@ -26,8 +26,8 @@ class Linear(Kernpart):
:rtype: kernel object :rtype: kernel object
""" """
def __init__(self, input_dim, variances=None, ARD=False): def __init__(self, input_dim, variances=None, ARD=False, name='linear'):
super(Linear, self).__init__(input_dim, 'linear') super(Linear, self).__init__(input_dim, name)
self.ARD = ARD self.ARD = ARD
if ARD == False: if ARD == False:
if variances is not None: if variances is not None:

View file

@ -33,10 +33,10 @@ class RBFInv(RBF):
.. Note: this object implements both the ARD and 'spherical' version of the function .. Note: this object implements both the ARD and 'spherical' version of the function
""" """
def __init__(self, input_dim, variance=1., inv_lengthscale=None, ARD=False): def __init__(self, input_dim, variance=1., inv_lengthscale=None, ARD=False, name='inverse rbf'):
#self.input_dim = input_dim #self.input_dim = input_dim
#self.name = 'rbf_inv' #self.name = 'rbf_inv'
super(RBFInv, self).__init__(input_dim, variance=variance, lengthscale=1./np.array(inv_lengthscale), ARD=ARD, name='inverse rbf') super(RBFInv, self).__init__(input_dim, variance=variance, lengthscale=1./np.array(inv_lengthscale), ARD=ARD, name=name)
self.ARD = ARD self.ARD = ARD
if not ARD: if not ARD:
self.num_params = 2 self.num_params = 2