diff --git a/GPy/core/gp.py b/GPy/core/gp.py index 8267a569..1e285092 100644 --- a/GPy/core/gp.py +++ b/GPy/core/gp.py @@ -405,9 +405,10 @@ class GP(Model): for each point N in Xnew """ - from ..util.linalg import jitchol G = self.predict_wishard_embedding(Xnew, kern) - return np.array([2*np.sqrt(np.exp(np.sum(np.log(np.diag(jitchol(G[n, :, :])))))) for n in range(Xnew.shape[0])]) + from ..util.linalg import jitchol + return np.array([np.sqrt(np.exp(2*np.sum(np.log(np.diag(jitchol(G[n, :, :])))))) for n in range(Xnew.shape[0])]) + #return np.array([np.sqrt(np.linalg.det(G[n, :, :])) for n in range(Xnew.shape[0])]) def posterior_samples_f(self,X,size=10, full_cov=True): """ @@ -564,6 +565,22 @@ class GP(Model): plot_raw=plot_raw, Y_metadata=Y_metadata, data_symbol=data_symbol, predict_kw=predict_kw, **kw) + def plot_magnification(self, labels=None, which_indices=None, + resolution=50, ax=None, marker='o', s=40, + fignum=None, legend=True, + plot_limits=None, + aspect='auto', updates=False, **kwargs): + + import sys + assert "matplotlib" in sys.modules, "matplotlib package has not been imported." + from ..plotting.matplot_dep import dim_reduction_plots + + return dim_reduction_plots.plot_magnification(self, labels, which_indices, + resolution, ax, marker, s, + fignum, False, legend, + plot_limits, aspect, updates, **kwargs) + + def input_sensitivity(self, summarize=True): """ Returns the sensitivity for each dimension of this model diff --git a/GPy/core/sparse_gp.py b/GPy/core/sparse_gp.py index ac5fb62b..5ab302db 100644 --- a/GPy/core/sparse_gp.py +++ b/GPy/core/sparse_gp.py @@ -181,3 +181,18 @@ class SparseGP(GP): var[i] = np.diag(var_)+p0-t2 return mu, var + + def plot_magnification(self, labels=None, which_indices=None, + resolution=50, ax=None, marker='o', s=40, + fignum=None, legend=True, + plot_limits=None, + aspect='auto', updates=False, plot_inducing=True, **kwargs): + + import sys + assert "matplotlib" in sys.modules, "matplotlib package has not been imported." + from ..plotting.matplot_dep import dim_reduction_plots + + return dim_reduction_plots.plot_magnification(self, labels, which_indices, + resolution, ax, marker, s, + fignum, plot_inducing, legend, + plot_limits, aspect, updates, **kwargs) \ No newline at end of file diff --git a/GPy/core/verbose_optimization.py b/GPy/core/verbose_optimization.py index 57f0c9e6..c4539736 100644 --- a/GPy/core/verbose_optimization.py +++ b/GPy/core/verbose_optimization.py @@ -24,7 +24,6 @@ class VerboseOptimization(object): self.model.add_observer(self, self.print_status) self.status = 'running' self.clear = clear_after_finish - self.deltat = .2 self.update() @@ -80,6 +79,7 @@ class VerboseOptimization(object): def __enter__(self): self.start = time.time() + self._time = self.start return self def print_out(self, seconds): @@ -143,12 +143,12 @@ class VerboseOptimization(object): def print_status(self, me, which=None): self.update() - seconds = time.time()-self.start + t = time.time() + seconds = t-self.start #sys.stdout.write(" "*len(self.message)) - self.deltat += seconds - if self.deltat > .3 or seconds < .3: + if t-self._time > .3 or seconds < .3: self.print_out(seconds) - self.deltat = 0 + self._time = t self.iteration += 1 diff --git a/GPy/kern/_src/kern.py b/GPy/kern/_src/kern.py index 62be679c..aae4460a 100644 --- a/GPy/kern/_src/kern.py +++ b/GPy/kern/_src/kern.py @@ -59,7 +59,7 @@ class Kern(Parameterized): self._sliced_X = 0 self.useGPU = self._support_GPU and useGPU self._return_psi2_n_flag = ObsAr(np.zeros(1)).astype(bool) - + from .psi_comp import PSICOMP_GH self.psicomp = PSICOMP_GH() @@ -102,6 +102,8 @@ class Kern(Parameterized): raise NotImplementedError def gradients_XX(self, dL_dK, X, X2): raise(NotImplementedError, "This is the second derivative of K wrt X and X2, and not implemented for this kernel") + def gradients_XX_diag(self, dL_dK, X, X2): + raise(NotImplementedError, "This is the diagonal of the second derivative of K wrt X and X2, and not implemented for this kernel") def gradients_X_diag(self, dL_dKdiag, X): raise NotImplementedError diff --git a/GPy/models/gplvm.py b/GPy/models/gplvm.py index c95c9fa0..d4f4f564 100644 --- a/GPy/models/gplvm.py +++ b/GPy/models/gplvm.py @@ -81,18 +81,3 @@ class GPLVM(GP): resolution, ax, marker, s, fignum, False, legend, plot_limits, aspect, updates, **kwargs) - - def plot_magnification(self, labels=None, which_indices=None, - resolution=50, ax=None, marker='o', s=40, - fignum=None, legend=True, - plot_limits=None, - aspect='auto', updates=False, **kwargs): - - import sys - assert "matplotlib" in sys.modules, "matplotlib package has not been imported." - from ..plotting.matplot_dep import dim_reduction_plots - - return dim_reduction_plots.plot_magnification(self, labels, which_indices, - resolution, ax, marker, s, - fignum, False, legend, - plot_limits, aspect, updates, **kwargs) diff --git a/GPy/models/sparse_gp_minibatch.py b/GPy/models/sparse_gp_minibatch.py index 07295255..81bd22a4 100644 --- a/GPy/models/sparse_gp_minibatch.py +++ b/GPy/models/sparse_gp_minibatch.py @@ -44,7 +44,7 @@ class SparseGPMiniBatch(SparseGP): def __init__(self, X, Y, Z, kernel, likelihood, inference_method=None, name='sparse gp', Y_metadata=None, normalizer=False, missing_data=False, stochastic=False, batchsize=1): - + # pick a sensible inference method if inference_method is None: if isinstance(likelihood, likelihoods.Gaussian): @@ -76,6 +76,7 @@ class SparseGPMiniBatch(SparseGP): logger.info("Adding Z as parameter") self.link_parameter(self.Z, index=0) self.posterior = None + self._predictive_variable = self.Z def has_uncertain_inputs(self): return isinstance(self.X, VariationalPosterior) diff --git a/GPy/plotting/matplot_dep/dim_reduction_plots.py b/GPy/plotting/matplot_dep/dim_reduction_plots.py index 7d13ef04..6db46a81 100644 --- a/GPy/plotting/matplot_dep/dim_reduction_plots.py +++ b/GPy/plotting/matplot_dep/dim_reduction_plots.py @@ -322,11 +322,11 @@ def plot_magnification(model, labels=None, which_indices=None, index = np.nonzero(labels == ul)[0] if model.input_dim == 1: - x = model.X[index, input_1] + x = X[index, input_1] y = np.zeros(index.size) else: - x = model.X[index, input_1] - y = model.X[index, input_2] + x = X[index, input_1] + y = X[index, input_2] ax.scatter(x, y, marker=m, s=s, color=Tango.nextMedium(), label=this_label) ax.set_xlabel('latent dimension %i' % input_1) @@ -335,13 +335,14 @@ def plot_magnification(model, labels=None, which_indices=None, if not np.all(labels == 1.) and legend: ax.legend(loc=0, numpoints=1) - ax.set_xlim(xmin[0], xmax[0]) - ax.set_ylim(xmin[1], xmax[1]) + ax.set_xlim((xmin, xmax)) + ax.set_ylim((ymin, ymax)) ax.grid(b=False) # remove the grid if present, it doesn't look good ax.set_aspect('auto') # set a nice aspect ratio if plot_inducing: - ax.plot(model.Z[:, input_1], model.Z[:, input_2], '^w') + Z = model.Z + ax.scatter(Z[:, input_1], Z[:, input_2], c='w', s=18, marker="^", edgecolor='k', linewidth=.3, alpha=.7) if updates: fig.canvas.show() @@ -386,8 +387,8 @@ def plot_steepest_gradient_map(model, fignum=None, ax=None, which_indices=None, this_label = 'class %i' % i m = marker.next() index = np.nonzero(data_labels == ul)[0] - x = model.X[index, input_1] - y = model.X[index, input_2] + x = X[index, input_1] + y = X[index, input_2] ax.scatter(x, y, marker=m, s=data_s, color=Tango.nextMedium(), label=this_label) ax.set_xlabel('latent dimension %i' % input_1) @@ -395,7 +396,7 @@ def plot_steepest_gradient_map(model, fignum=None, ax=None, which_indices=None, controller = ImAnnotateController(ax, plot_function, - tuple(model.X.min(0)[:, significant_dims]) + tuple(model.X.max(0)[:, significant_dims]), + tuple(X.min(0)[:, significant_dims]) + tuple(X.max(0)[:, significant_dims]), resolution=resolution, aspect=aspect, cmap=get_cmap('jet'),