diff --git a/GPy/inference/optimization.py b/GPy/inference/optimization.py index 75cd94ba..1445eed0 100644 --- a/GPy/inference/optimization.py +++ b/GPy/inference/optimization.py @@ -29,7 +29,7 @@ class Optimizer(): :rtype: optimizer object. """ - def __init__(self, x_init, messages=False, model = None, max_f_eval=1e4, max_iters = 1e3, ftol=None, gtol=None, xtol=None): + def __init__(self, x_init, messages=False, model = None, max_f_eval=1e4, max_iters = 1e3, ftol=None, gtol=None, xtol=None, callback=None): self.opt_name = None self.x_init = x_init self.messages = messages @@ -45,6 +45,7 @@ class Optimizer(): self.gtol = gtol self.ftol = ftol self.model = model + self.callback = callback def run(self, **kwargs): start = dt.datetime.now() @@ -94,6 +95,8 @@ class opt_tnc(Optimizer): opt_dict['ftol'] = self.ftol if self.gtol is not None: opt_dict['pgtol'] = self.gtol + if self.callback is not None: + opt_dict['callback'] = self.callback opt_result = optimize.fmin_tnc(f_fp, self.x_init, messages = self.messages, maxfun = self.max_f_eval, **opt_dict) @@ -128,6 +131,8 @@ class opt_lbfgsb(Optimizer): print "WARNING: l-bfgs-b doesn't have an ftol arg, so I'm going to ignore it" if self.gtol is not None: opt_dict['pgtol'] = self.gtol + if self.callback is not None: + opt_dict['callback'] = self.callback opt_result = optimize.fmin_l_bfgs_b(f_fp, self.x_init, iprint = iprint, maxfun = self.max_f_eval, **opt_dict) @@ -155,6 +160,8 @@ class opt_simplex(Optimizer): opt_dict['ftol'] = self.ftol if self.gtol is not None: print "WARNING: simplex doesn't have an gtol arg, so I'm going to ignore it" + if self.callback is not None: + opt_dict['callback'] = self.callback opt_result = optimize.fmin(f, self.x_init, (), disp = self.messages, maxfun = self.max_f_eval, full_output=True, **opt_dict) @@ -187,6 +194,8 @@ class opt_rasm(Optimizer): print "WARNING: minimize doesn't have an ftol arg, so I'm going to ignore it" if self.gtol is not None: print "WARNING: minimize doesn't have an gtol arg, so I'm going to ignore it" + if self.callback is not None: + print "WARNING: minimize doesn't have a callback arg, so I'm going to ignore it" opt_result = rasm.minimize(self.x_init, f_fp, (), messages = self.messages, maxnumfuneval = self.max_f_eval) @@ -205,6 +214,8 @@ class opt_SCG(Optimizer): def opt(self, f_fp = None, f = None, fp = None): assert not f is None assert not fp is None + if self.callback is not None: + print "WARNING: SCG doesn't have a callback arg, so I'm going to ignore it" opt_result = SCG(f,fp,self.x_init, display=self.messages, maxiters=self.max_iters, max_f_eval=self.max_f_eval, xtol=self.xtol, ftol=self.ftol) self.x_opt = opt_result[0] self.trace = opt_result[1] diff --git a/GPy/likelihoods/Laplace.py b/GPy/likelihoods/Laplace.py index 566e4e25..208b1102 100644 --- a/GPy/likelihoods/Laplace.py +++ b/GPy/likelihoods/Laplace.py @@ -63,7 +63,6 @@ class Laplace(likelihood): return self.likelihood_function._get_param_names() def _set_params(self, p): - print "Setting noise sd: ", p return self.likelihood_function._set_params(p) def both_gradients(self, dL_d_K_Sigma, dK_dthetaK): diff --git a/GPy/likelihoods/likelihood_functions.py b/GPy/likelihoods/likelihood_functions.py index 2176aac0..61c79385 100644 --- a/GPy/likelihoods/likelihood_functions.py +++ b/GPy/likelihoods/likelihood_functions.py @@ -166,6 +166,8 @@ class student_t(likelihood_function): self.log_concave = False #super(student_t, self).__init__() + self._set_params(np.asarray(sigma)) + def _get_params(self): return np.asarray(self.sigma) @@ -174,6 +176,8 @@ class student_t(likelihood_function): def _set_params(self, x): self.sigma = float(x) + print "Setting student t sigma: ", x + print x #self.covariance_matrix = np.eye(self.N)*self._variance #self.precision = 1./self._variance diff --git a/GPy/models/GP.py b/GPy/models/GP.py index 1682ee6c..79284b59 100644 --- a/GPy/models/GP.py +++ b/GPy/models/GP.py @@ -86,6 +86,16 @@ class GP(model): def _get_param_names(self): return self.kern._get_param_names_transformed() + self.likelihood._get_param_names() + def _update_params_callback(self, p): + #FIXME:Check the transforming + #Set the new parameters of the kernel and likelihood within the optimization + import ipdb; ipdb.set_trace() ### XXX BREAKPOINT + self.kern._set_params_transformed(p[:self.kern.Nparam_transformed()]) + self.likelihood._set_params(p[self.kern.Nparam_transformed():]) + #update the likelihood approximation within the optimisation with the current parameters + self.update_likelihood_approximation() + import ipdb; ipdb.set_trace() ### XXX BREAKPOINT + def update_likelihood_approximation(self): """ Approximates a non-gaussian likelihood using Expectation Propagation