SCG printing prettyfied

This commit is contained in:
Max Zwiessele 2013-05-17 17:17:30 +01:00
parent 3bb42481be
commit 6b63237adf
2 changed files with 34 additions and 29 deletions

View file

@ -9,8 +9,8 @@ import pylab as pb
import numpy as np
import GPy
default_seed=10000
def crescent_data(seed=default_seed): #FIXME
default_seed = 10000
def crescent_data(seed=default_seed): # FIXME
"""Run a Gaussian process classification on the crescent data. The demonstration calls the basic GP classification model and uses EP to approximate the likelihood.
:param model_type: type of model to fit ['Full', 'FITC', 'DTC'].
@ -27,10 +27,10 @@ def crescent_data(seed=default_seed): #FIXME
# Likelihood object
distribution = GPy.likelihoods.likelihood_functions.probit()
likelihood = GPy.likelihoods.EP(data['Y'],distribution)
likelihood = GPy.likelihoods.EP(data['Y'], distribution)
m = GPy.models.GP(data['X'],likelihood,kernel)
m = GPy.models.GP(data['X'], likelihood, kernel)
m.ensure_default_constraints()
m.update_likelihood_approximation()
@ -54,10 +54,10 @@ def oil():
# Likelihood object
distribution = GPy.likelihoods.likelihood_functions.probit()
likelihood = GPy.likelihoods.EP(data['Y'][:, 0:1],distribution)
likelihood = GPy.likelihoods.EP(data['Y'][:, 0:1], distribution)
# Create GP model
m = GPy.models.GP(data['X'],likelihood=likelihood,kernel=kernel)
m = GPy.models.GP(data['X'], likelihood=likelihood, kernel=kernel)
# Contrain all parameters to be positive
m.constrain_positive('')
@ -85,17 +85,17 @@ def toy_linear_1d_classification(seed=default_seed):
# Likelihood object
distribution = GPy.likelihoods.likelihood_functions.probit()
likelihood = GPy.likelihoods.EP(Y,distribution)
likelihood = GPy.likelihoods.EP(Y, distribution)
# Model definition
m = GPy.models.GP(data['X'],likelihood=likelihood,kernel=kernel)
m = GPy.models.GP(data['X'], likelihood=likelihood, kernel=kernel)
m.ensure_default_constraints()
# Optimize
m.update_likelihood_approximation()
# Parameters optimization:
m.optimize()
#m.pseudo_EM() #FIXME
# m.pseudo_EM() #FIXME
# Plot
pb.subplot(211)
@ -121,20 +121,20 @@ def sparse_toy_linear_1d_classification(seed=default_seed):
# Likelihood object
distribution = GPy.likelihoods.likelihood_functions.probit()
likelihood = GPy.likelihoods.EP(Y,distribution)
likelihood = GPy.likelihoods.EP(Y, distribution)
Z = np.random.uniform(data['X'].min(),data['X'].max(),(10,1))
Z = np.random.uniform(data['X'].min(), data['X'].max(), (10, 1))
# Model definition
m = GPy.models.sparse_GP(data['X'],likelihood=likelihood,kernel=kernel,Z=Z,normalize_X=False)
m.set('len',2.)
m = GPy.models.sparse_GP(data['X'], likelihood=likelihood, kernel=kernel, Z=Z, normalize_X=False)
m.set('len', 2.)
m.ensure_default_constraints()
# Optimize
m.update_likelihood_approximation()
# Parameters optimization:
m.optimize()
#m.EPEM() #FIXME
# m.EPEM() #FIXME
# Plot
pb.subplot(211)
@ -162,15 +162,15 @@ def sparse_crescent_data(inducing=10, seed=default_seed):
# Likelihood object
distribution = GPy.likelihoods.likelihood_functions.probit()
likelihood = GPy.likelihoods.EP(data['Y'],distribution)
likelihood = GPy.likelihoods.EP(data['Y'], distribution)
sample = np.random.randint(0,data['X'].shape[0],inducing)
Z = data['X'][sample,:]
sample = np.random.randint(0, data['X'].shape[0], inducing)
Z = data['X'][sample, :]
# create sparse GP EP model
m = GPy.models.sparse_GP(data['X'],likelihood=likelihood,kernel=kernel,Z=Z)
m = GPy.models.sparse_GP(data['X'], likelihood=likelihood, kernel=kernel, Z=Z)
m.ensure_default_constraints()
m.set('len',10.)
m.set('len', 10.)
m.update_likelihood_approximation()

View file

@ -39,6 +39,9 @@ def SCG(f, gradf, x, optargs=(), maxiters=500, max_f_eval=500, display=True, xto
function_eval number of fn evaluations
status: string describing convergence status
"""
print " SCG"
print ' {0:{mi}s} {1:11s} {2:11s} {3:11s}'.format("I", "F", "Scale", "|g|", mi=len(str(maxiters)))
if xtol is None:
xtol = 1e-6
if ftol is None:
@ -46,18 +49,18 @@ def SCG(f, gradf, x, optargs=(), maxiters=500, max_f_eval=500, display=True, xto
if gtol is None:
gtol = 1e-5
sigma0 = 1.0e-4
fold = f(x, *optargs) # Initial function value.
fold = f(x, *optargs) # Initial function value.
function_eval = 1
fnow = fold
gradnew = gradf(x, *optargs) # Initial gradient.
gradnew = gradf(x, *optargs) # Initial gradient.
current_grad = np.dot(gradnew, gradnew)
gradold = gradnew.copy()
d = -gradnew # Initial search direction.
success = True # Force calculation of directional derivs.
nsuccess = 0 # nsuccess counts number of successes.
beta = 1.0 # Initial scale parameter.
betamin = 1.0e-15 # Lower bound on scale.
betamax = 1.0e100 # Upper bound on scale.
d = -gradnew # Initial search direction.
success = True # Force calculation of directional derivs.
nsuccess = 0 # nsuccess counts number of successes.
beta = 1.0 # Initial scale parameter.
betamin = 1.0e-15 # Lower bound on scale.
betamax = 1.0e100 # Upper bound on scale.
status = "Not converged"
flog = [fold]
@ -82,6 +85,8 @@ def SCG(f, gradf, x, optargs=(), maxiters=500, max_f_eval=500, display=True, xto
# Increase effective curvature and evaluate step size alpha.
delta = theta + beta * kappa
if delta <= 0:
if display:
print ""
delta = beta * kappa
beta = beta - theta / kappa
@ -107,12 +112,12 @@ def SCG(f, gradf, x, optargs=(), maxiters=500, max_f_eval=500, display=True, xto
fnow = fold
# Store relevant variables
flog.append(fnow) # Current function value
flog.append(fnow) # Current function value
iteration += 1
if display:
print '\r',
print 'Iter: {0:>0{mi}g} Obj:{1:> 12e} Scale:{2:> 12e} |g|:{3:> 12e}'.format(iteration, float(fnow), float(beta), float(current_grad), mi=len(str(maxiters))),
print '{0:>0{mi}g} {1:> 12e} {2:> 12e} {3:> 12e}'.format(iteration, float(fnow), float(beta), float(current_grad), mi=len(str(maxiters))),
# print 'Iteration:', iteration, ' Objective:', fnow, ' Scale:', beta, '\r',
sys.stdout.flush()