mirror of
https://github.com/SheffieldML/GPy.git
synced 2026-05-09 20:12:38 +02:00
bgplvm integrated
This commit is contained in:
parent
8c02e4af36
commit
765ab41045
7 changed files with 22 additions and 23 deletions
|
|
@ -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):
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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):
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue