From 7b5422b6946315a97f18850dd31cffeeff5c85c8 Mon Sep 17 00:00:00 2001 From: Max Zwiessele Date: Fri, 22 Jan 2016 11:26:29 +0000 Subject: [PATCH] [plotting&kern] bugfixes in plotting and kernel size --- GPy/core/gp.py | 9 +++++---- GPy/kern/src/kern.py | 4 ++-- GPy/kern/src/stationary.py | 4 ++-- GPy/plotting/gpy_plot/gp_plots.py | 16 ++++++++-------- GPy/plotting/gpy_plot/plot_util.py | 5 ++++- 5 files changed, 21 insertions(+), 17 deletions(-) diff --git a/GPy/core/gp.py b/GPy/core/gp.py index ae710355..ea2ed140 100644 --- a/GPy/core/gp.py +++ b/GPy/core/gp.py @@ -365,13 +365,14 @@ class GP(Model): mean_jac[:,:,i] = kern.gradients_X(self.posterior.woodbury_vector[:,i:i+1].T, Xnew, self._predictive_variable) dK_dXnew_full = np.empty((self._predictive_variable.shape[0], Xnew.shape[0], Xnew.shape[1])) + one = np.ones((1,1)) for i in range(self._predictive_variable.shape[0]): - dK_dXnew_full[i] = kern.gradients_X([[1.]], Xnew, self._predictive_variable[[i]]) + dK_dXnew_full[i] = kern.gradients_X(one, Xnew, self._predictive_variable[[i]]) if full_cov: - dK2_dXdX = kern.gradients_XX([[1.]], Xnew) + dK2_dXdX = kern.gradients_XX(one, Xnew) else: - dK2_dXdX = kern.gradients_XX_diag([[1.]], Xnew) + dK2_dXdX = kern.gradients_XX_diag(one, Xnew) def compute_cov_inner(wi): if full_cov: @@ -458,7 +459,7 @@ class GP(Model): m, v = self._raw_predict(X, full_cov=full_cov, **predict_kwargs) if self.normalizer is not None: m, v = self.normalizer.inverse_mean(m), self.normalizer.inverse_variance(v) - + def sim_one_dim(m, v): if not full_cov: return np.random.multivariate_normal(m.flatten(), np.diag(v.flatten()), size).T diff --git a/GPy/kern/src/kern.py b/GPy/kern/src/kern.py index ad41355f..6a746092 100644 --- a/GPy/kern/src/kern.py +++ b/GPy/kern/src/kern.py @@ -61,12 +61,12 @@ class Kern(Parameterized): self.psicomp = PSICOMP_GH() def __setstate__(self, state): - self._all_dims_active = range(0, max(state['active_dims'])+1) + self._all_dims_active = np.arange(0, max(state['active_dims'])+1) super(Kern, self).__setstate__(state) @property def _effective_input_dim(self): - return self._all_dims_active.size + return np.size(self._all_dims_active) @Cache_this(limit=20) def _slice_X(self, X): diff --git a/GPy/kern/src/stationary.py b/GPy/kern/src/stationary.py index 106e0098..7b4c3625 100644 --- a/GPy/kern/src/stationary.py +++ b/GPy/kern/src/stationary.py @@ -97,7 +97,7 @@ class Stationary(Kern): r = self._scaled_dist(X, X2) return self.K_of_r(r) - @Cache_this(limit=20, ignore_args=()) + @Cache_this(limit=3, ignore_args=()) def dK_dr_via_X(self, X, X2): #a convenience function, so we can cache dK_dr return self.dK_dr(self._scaled_dist(X, X2)) @@ -127,7 +127,7 @@ class Stationary(Kern): r2 = np.clip(r2, 0, np.inf) return np.sqrt(r2) - @Cache_this(limit=20, ignore_args=()) + @Cache_this(limit=3, ignore_args=()) def _scaled_dist(self, X, X2=None): """ Efficiently compute the scaled distance, r. diff --git a/GPy/plotting/gpy_plot/gp_plots.py b/GPy/plotting/gpy_plot/gp_plots.py index 4d467e62..353dc7fb 100644 --- a/GPy/plotting/gpy_plot/gp_plots.py +++ b/GPy/plotting/gpy_plot/gp_plots.py @@ -46,7 +46,7 @@ def plot_mean(self, plot_limits=None, fixed_inputs=None, """ Plot the mean of the GP. - You can deactivate the legend for this one plot by supplying None to label. + You can deactivate the legend for this one plot by supplying None to label. Give the Y_metadata in the predict_kw if you need it. @@ -116,7 +116,7 @@ def plot_confidence(self, lower=2.5, upper=97.5, plot_limits=None, fixed_inputs= E.g. the 95% confidence interval is $2.5, 97.5$. Note: Only implemented for one dimension! - You can deactivate the legend for this one plot by supplying None to label. + You can deactivate the legend for this one plot by supplying None to label. Give the Y_metadata in the predict_kw if you need it. @@ -170,7 +170,7 @@ def plot_samples(self, plot_limits=None, fixed_inputs=None, """ Plot the mean of the GP. - You can deactivate the legend for this one plot by supplying None to label. + You can deactivate the legend for this one plot by supplying None to label. Give the Y_metadata in the predict_kw if you need it. @@ -231,7 +231,7 @@ def plot_density(self, plot_limits=None, fixed_inputs=None, E.g. the 95% confidence interval is $2.5, 97.5$. Note: Only implemented for one dimension! - You can deactivate the legend for this one plot by supplying None to label. + You can deactivate the legend for this one plot by supplying None to label. Give the Y_metadata in the predict_kw if you need it. @@ -288,7 +288,7 @@ def plot(self, plot_limits=None, fixed_inputs=None, """ Convenience function for plotting the fit of a GP. - You can deactivate the legend for this one plot by supplying None to label. + You can deactivate the legend for this one plot by supplying None to label. Give the Y_metadata in the predict_kw if you need it. @@ -330,6 +330,8 @@ def plot(self, plot_limits=None, fixed_inputs=None, # It does not make sense to plot the data (which lives not in the latent function space) into latent function space. plot_data = False plots = {} + if hasattr(self, 'Z') and plot_inducing: + plots.update(_plot_inducing(self, canvas, visible_dims, projection, 'Inducing')) if plot_data: plots.update(_plot_data(self, canvas, which_data_rows, which_data_ycols, visible_dims, projection, "Data")) plots.update(_plot_data_error(self, canvas, which_data_rows, which_data_ycols, visible_dims, projection, "Data Error")) @@ -340,8 +342,6 @@ def plot(self, plot_limits=None, fixed_inputs=None, get_which_data_ycols(self, which_data_ycols), predict_kw, samples_likelihood) plots.update(_plot_samples(canvas, helper_data, helper_prediction, projection, "Lik Samples")) - if hasattr(self, 'Z') and plot_inducing: - plots.update(_plot_inducing(self, canvas, visible_dims, projection, 'Inducing')) return pl().add_to_canvas(canvas, plots, legend=legend) @@ -362,7 +362,7 @@ def plot_f(self, plot_limits=None, fixed_inputs=None, If you want fine graned control use the specific plotting functions supplied in the model. - You can deactivate the legend for this one plot by supplying None to label. + You can deactivate the legend for this one plot by supplying None to label. Give the Y_metadata in the predict_kw if you need it. diff --git a/GPy/plotting/gpy_plot/plot_util.py b/GPy/plotting/gpy_plot/plot_util.py index 254886a2..d760d1b7 100644 --- a/GPy/plotting/gpy_plot/plot_util.py +++ b/GPy/plotting/gpy_plot/plot_util.py @@ -285,7 +285,10 @@ def get_x_y_var(model): X = model.X.mean.values X_variance = model.X.variance.values else: - X = model.X.values + try: + X = model.X.values + except AttributeError: + X = model.X X_variance = None try: Y = model.Y.values