diff --git a/GPy/examples/classification.py b/GPy/examples/classification.py index d6697d7c..9168db7c 100644 --- a/GPy/examples/classification.py +++ b/GPy/examples/classification.py @@ -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() diff --git a/GPy/inference/SCG.py b/GPy/inference/SCG.py index f9520813..e6ef25c0 100644 --- a/GPy/inference/SCG.py +++ b/GPy/inference/SCG.py @@ -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()