Merge branch 'devel' of github.com:SheffieldML/GPy into devel

This commit is contained in:
Max Zwiessele 2013-11-27 15:02:34 +00:00
commit d0a9995c38
7 changed files with 57 additions and 24 deletions

View file

@ -453,7 +453,12 @@ class Model(Parameterized):
if not verbose: if not verbose:
# just check the global ratio # just check the global ratio
dx = step * np.sign(np.random.uniform(-1, 1, x.size))
#choose a random direction to find the linear approximation in
if x.size==2:
dx = step * np.ones(2) # random direction for 2 parameters can fail dure to symmetry
else:
dx = step * np.sign(np.random.uniform(-1, 1, x.size))
# evaulate around the point x # evaulate around the point x
f1, g1 = self.objective_and_gradients(x + dx) f1, g1 = self.objective_and_gradients(x + dx)

View file

@ -2,7 +2,7 @@ import GPy
import numpy as np import numpy as np
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
from GPy.util import datasets from GPy.util import datasets
np.random.seed(1) #np.random.seed(1)
def student_t_approx(): def student_t_approx():
""" """
@ -106,7 +106,7 @@ def student_t_approx():
corrupt_stu_t_likelihood = GPy.likelihoods.Laplace(Yc.copy(), t_distribution) corrupt_stu_t_likelihood = GPy.likelihoods.Laplace(Yc.copy(), t_distribution)
m = GPy.models.GPRegression(X, Yc.copy(), kernel4, likelihood=corrupt_stu_t_likelihood) m = GPy.models.GPRegression(X, Yc.copy(), kernel4, likelihood=corrupt_stu_t_likelihood)
m.ensure_default_constraints() m.ensure_default_constraints()
m.constrain_positive('t_noise') m.constrain_bounded('t_noise', 1e-6, 10.)
m.constrain_fixed('white', 1e-4) m.constrain_fixed('white', 1e-4)
m.randomize() m.randomize()
for a in range(1): for a in range(1):

View file

@ -65,11 +65,10 @@ class Laplace(likelihood):
self.old_Ki_f = None self.old_Ki_f = None
def predictive_values(self, mu, var, full_cov): def predictive_values(self,mu,var,full_cov,**noise_args):
if full_cov: if full_cov:
raise NotImplementedError("Cannot make correlated predictions\ raise NotImplementedError, "Cannot make correlated predictions with an EP likelihood"
with an Laplace likelihood") return self.noise_model.predictive_values(mu,var,**noise_args)
return self.noise_model.predictive_values(mu, var)
def log_predictive_density(self, y_test, mu_star, var_star): def log_predictive_density(self, y_test, mu_star, var_star):
""" """
@ -209,6 +208,7 @@ class Laplace(likelihood):
- 0.5*self.f_Ki_f - 0.5*self.f_Ki_f
+ 0.5*self.y_Wi_Ki_i_y + 0.5*self.y_Wi_Ki_i_y
) )
#print "Term, {}, {}, {}, {}, {}".format(self.lik, - 0.5*self.ln_B_det, + 0.5*self.ln_det_Wi_K, - 0.5*self.f_Ki_f, + 0.5*self.y_Wi_Ki_i_y)
#Convert to float as its (1, 1) and Z must be a scalar #Convert to float as its (1, 1) and Z must be a scalar
self.Z = np.float64(Z_tilde) self.Z = np.float64(Z_tilde)
@ -349,7 +349,8 @@ class Laplace(likelihood):
#Find the stepsize that minimizes the objective function using a brent line search #Find the stepsize that minimizes the objective function using a brent line search
#The tolerance and maxiter matter for speed! Seems to be best to keep them low and make more full #The tolerance and maxiter matter for speed! Seems to be best to keep them low and make more full
#steps than get this exact then make a step, if B was bigger it might be the other way around though #steps than get this exact then make a step, if B was bigger it might be the other way around though
new_obj = sp.optimize.minimize_scalar(i_o, method='brent', tol=1e-4, options={'maxiter':5}).fun #new_obj = sp.optimize.minimize_scalar(i_o, method='brent', tol=1e-4, options={'maxiter':5}).fun
new_obj = sp.optimize.brent(i_o, tol=1e-4, maxiter=10)
f = self.tmp_f.copy() f = self.tmp_f.copy()
Ki_f = self.tmp_Ki_f.copy() Ki_f = self.tmp_Ki_f.copy()
@ -380,8 +381,8 @@ class Laplace(likelihood):
#difference = abs(new_obj - old_obj) #difference = abs(new_obj - old_obj)
#old_obj = new_obj.copy() #old_obj = new_obj.copy()
#difference = np.abs(np.sum(f - f_old)) difference = np.abs(np.sum(f - f_old))
difference = np.abs(np.sum(Ki_f - old_Ki_f)) #difference = np.abs(np.sum(Ki_f - old_Ki_f))
old_Ki_f = Ki_f.copy() old_Ki_f = Ki_f.copy()
i += 1 i += 1

View file

@ -6,6 +6,8 @@ import functools
import inspect import inspect
from GPy.likelihoods.noise_models import gp_transformations from GPy.likelihoods.noise_models import gp_transformations
from functools import partial from functools import partial
#np.random.seed(300)
np.random.seed(7)
def dparam_partial(inst_func, *args): def dparam_partial(inst_func, *args):
""" """
@ -144,7 +146,7 @@ class TestNoiseModels(object):
"model": GPy.likelihoods.student_t(deg_free=5, sigma2=self.var), "model": GPy.likelihoods.student_t(deg_free=5, sigma2=self.var),
"grad_params": { "grad_params": {
"names": ["t_noise"], "names": ["t_noise"],
"vals": [1], "vals": [1.0],
"constraints": [constrain_positive] "constraints": [constrain_positive]
}, },
"laplace": True "laplace": True
@ -158,6 +160,15 @@ class TestNoiseModels(object):
}, },
"laplace": True "laplace": True
}, },
"Student_t_large_var": {
"model": GPy.likelihoods.student_t(deg_free=5, sigma2=self.var),
"grad_params": {
"names": ["t_noise"],
"vals": [10.0],
"constraints": [constrain_positive]
},
"laplace": True
},
"Student_t_approx_gauss": { "Student_t_approx_gauss": {
"model": GPy.likelihoods.student_t(deg_free=1000, sigma2=self.var), "model": GPy.likelihoods.student_t(deg_free=1000, sigma2=self.var),
"grad_params": { "grad_params": {
@ -315,9 +326,11 @@ class TestNoiseModels(object):
def t_logpdf(self, model, Y, f): def t_logpdf(self, model, Y, f):
print "\n{}".format(inspect.stack()[0][3]) print "\n{}".format(inspect.stack()[0][3])
print model print model
print model._get_params()
np.testing.assert_almost_equal( np.testing.assert_almost_equal(
np.log(model.pdf(f.copy(), Y.copy())), model.pdf(f.copy(), Y.copy()),
model.logpdf(f.copy(), Y.copy())) np.exp(model.logpdf(f.copy(), Y.copy()))
)
@with_setup(setUp, tearDown) @with_setup(setUp, tearDown)
def t_dlogpdf_df(self, model, Y, f): def t_dlogpdf_df(self, model, Y, f):
@ -363,7 +376,7 @@ class TestNoiseModels(object):
assert ( assert (
dparam_checkgrad(model.logpdf, model.dlogpdf_dtheta, dparam_checkgrad(model.logpdf, model.dlogpdf_dtheta,
params, args=(f, Y), constraints=param_constraints, params, args=(f, Y), constraints=param_constraints,
randomize=False, verbose=True) randomize=True, verbose=True)
) )
@with_setup(setUp, tearDown) @with_setup(setUp, tearDown)
@ -373,7 +386,7 @@ class TestNoiseModels(object):
assert ( assert (
dparam_checkgrad(model.dlogpdf_df, model.dlogpdf_df_dtheta, dparam_checkgrad(model.dlogpdf_df, model.dlogpdf_df_dtheta,
params, args=(f, Y), constraints=param_constraints, params, args=(f, Y), constraints=param_constraints,
randomize=False, verbose=True) randomize=True, verbose=True)
) )
@with_setup(setUp, tearDown) @with_setup(setUp, tearDown)
@ -383,7 +396,7 @@ class TestNoiseModels(object):
assert ( assert (
dparam_checkgrad(model.d2logpdf_df2, model.d2logpdf_df2_dtheta, dparam_checkgrad(model.d2logpdf_df2, model.d2logpdf_df2_dtheta,
params, args=(f, Y), constraints=param_constraints, params, args=(f, Y), constraints=param_constraints,
randomize=False, verbose=True) randomize=True, verbose=True)
) )
################ ################
@ -478,7 +491,7 @@ class TestNoiseModels(object):
print "\n{}".format(inspect.stack()[0][3]) print "\n{}".format(inspect.stack()[0][3])
#Normalize #Normalize
Y = Y/Y.max() Y = Y/Y.max()
white_var = 0.001 white_var = 1e-6
kernel = GPy.kern.rbf(X.shape[1]) + GPy.kern.white(X.shape[1]) kernel = GPy.kern.rbf(X.shape[1]) + GPy.kern.white(X.shape[1])
laplace_likelihood = GPy.likelihoods.Laplace(Y.copy(), model) laplace_likelihood = GPy.likelihoods.Laplace(Y.copy(), model)
m = GPy.models.GPRegression(X.copy(), Y.copy(), kernel, likelihood=laplace_likelihood) m = GPy.models.GPRegression(X.copy(), Y.copy(), kernel, likelihood=laplace_likelihood)
@ -490,12 +503,13 @@ class TestNoiseModels(object):
m[name] = param_vals[param_num] m[name] = param_vals[param_num]
constraints[param_num](name, m) constraints[param_num](name, m)
print m
m.randomize() m.randomize()
m.optimize(max_iters=8) #m.optimize(max_iters=8)
print m print m
m.checkgrad(verbose=1, step=step) m.checkgrad(verbose=1, step=step)
if not m.checkgrad(step=step): #if not m.checkgrad(step=step):
m.checkgrad(verbose=1, step=step) #m.checkgrad(verbose=1, step=step)
#import ipdb; ipdb.set_trace() #import ipdb; ipdb.set_trace()
#NOTE this test appears to be stochastic for some likelihoods (student t?) #NOTE this test appears to be stochastic for some likelihoods (student t?)
# appears to all be working in test mode right now... # appears to all be working in test mode right now...
@ -509,7 +523,7 @@ class TestNoiseModels(object):
print "\n{}".format(inspect.stack()[0][3]) print "\n{}".format(inspect.stack()[0][3])
#Normalize #Normalize
Y = Y/Y.max() Y = Y/Y.max()
white_var = 0.001 white_var = 1e-6
kernel = GPy.kern.rbf(X.shape[1]) + GPy.kern.white(X.shape[1]) kernel = GPy.kern.rbf(X.shape[1]) + GPy.kern.white(X.shape[1])
ep_likelihood = GPy.likelihoods.EP(Y.copy(), model) ep_likelihood = GPy.likelihoods.EP(Y.copy(), model)
m = GPy.models.GPRegression(X.copy(), Y.copy(), kernel, likelihood=ep_likelihood) m = GPy.models.GPRegression(X.copy(), Y.copy(), kernel, likelihood=ep_likelihood)

View file

@ -14,6 +14,15 @@ import visualize
import decorators import decorators
import classification import classification
import latent_space_visualizations import latent_space_visualizations
import symbolic
try:
import sympy
_sympy_available = True
del sympy
except ImportError as e:
_sympy_available = False
if _sympy_available:
import symbolic
import netpbmfile import netpbmfile

View file

@ -12,6 +12,7 @@ import ctypes
from ctypes import byref, c_char, c_int, c_double # TODO from ctypes import byref, c_char, c_int, c_double # TODO
# import scipy.lib.lapack # import scipy.lib.lapack
import scipy import scipy
import warnings
if np.all(np.float64((scipy.__version__).split('.')[:2]) >= np.array([0, 12])): if np.all(np.float64((scipy.__version__).split('.')[:2]) >= np.array([0, 12])):
import scipy.linalg.lapack as lapack import scipy.linalg.lapack as lapack
@ -25,6 +26,9 @@ try:
assert hasattr(_blaslib, 'dsyr_') assert hasattr(_blaslib, 'dsyr_')
except AssertionError: except AssertionError:
_blas_available = False _blas_available = False
except AttributeError as e:
_blas_available = False
warnings.warn("warning: caught this exception:" + str(e))
def dtrtrs(A, B, lower=0, trans=0, unitdiag=0): def dtrtrs(A, B, lower=0, trans=0, unitdiag=0):
""" """

View file

@ -18,9 +18,9 @@ setup(name = 'GPy',
license = "BSD 3-clause", license = "BSD 3-clause",
keywords = "machine-learning gaussian-processes kernels", keywords = "machine-learning gaussian-processes kernels",
url = "http://sheffieldml.github.com/GPy/", url = "http://sheffieldml.github.com/GPy/",
packages = ['GPy', 'GPy.core', 'GPy.kern', 'GPy.util', 'GPy.models', 'GPy.inference', 'GPy.examples', 'GPy.likelihoods', 'GPy.testing', 'GPy.util.latent_space_visualizations', 'GPy.util.latent_space_visualizations.controllers', 'GPy.likelihoods.noise_models', 'GPy.kern.parts', 'GPy.mappings'], packages = ['GPy', 'GPy.core', 'GPy.kern', 'GPy.util', 'GPy._models', 'GPy.inference', 'GPy.examples', 'GPy.likelihoods', 'GPy.testing', 'GPy.util.latent_space_visualizations', 'GPy.util.latent_space_visualizations.controllers', 'GPy.likelihoods.noise_models', 'GPy.kern.parts', 'GPy.mappings'],
package_dir={'GPy': 'GPy'}, package_dir={'GPy': 'GPy'},
package_data = {'GPy': ['GPy/examples']}, package_data = {'GPy': ['GPy/examples', 'gpy_config.cfg']},
py_modules = ['GPy.__init__'], py_modules = ['GPy.__init__'],
long_description=read('README.md'), long_description=read('README.md'),
install_requires=['numpy>=1.6', 'scipy>=0.9','matplotlib>=1.1', 'nose'], install_requires=['numpy>=1.6', 'scipy>=0.9','matplotlib>=1.1', 'nose'],