From f5f90b3a2c9b3043a5765c5c8f22e552ab89bf8c Mon Sep 17 00:00:00 2001 From: Zhenwen Dai Date: Mon, 18 Aug 2014 18:03:08 +0100 Subject: [PATCH] fix the pickle problem for models with psi statistics --- GPy/kern/_src/psi_comp/__init__.py | 4 ++-- GPy/models/ss_gplvm.py | 13 ++++++++----- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/GPy/kern/_src/psi_comp/__init__.py b/GPy/kern/_src/psi_comp/__init__.py index 5aabd3b1..48abc68c 100644 --- a/GPy/kern/_src/psi_comp/__init__.py +++ b/GPy/kern/_src/psi_comp/__init__.py @@ -9,7 +9,7 @@ import ssrbf_psi_comp import sslinear_psi_comp import linear_psi_comp -class PSICOMP_RBF(object): +class PSICOMP_RBF(Pickleable): @Cache_this(limit=2, ignore_args=(0,)) def psicomputations(self, variance, lengthscale, Z, variational_posterior): @@ -29,7 +29,7 @@ class PSICOMP_RBF(object): else: raise ValueError, "unknown distriubtion received for psi-statistics" -class PSICOMP_Linear(object): +class PSICOMP_Linear(Pickleable): @Cache_this(limit=2, ignore_args=(0,)) def psicomputations(self, variance, Z, variational_posterior): diff --git a/GPy/models/ss_gplvm.py b/GPy/models/ss_gplvm.py index 027f9783..ba793fc2 100644 --- a/GPy/models/ss_gplvm.py +++ b/GPy/models/ss_gplvm.py @@ -23,7 +23,7 @@ class SSGPLVM(SparseGP): :type init: 'PCA'|'random' """ - def __init__(self, Y, input_dim, X=None, X_variance=None, init='PCA', num_inducing=10, + def __init__(self, Y, input_dim, X=None, X_variance=None, Gamma=None, init='PCA', num_inducing=10, Z=None, kernel=None, inference_method=None, likelihood=None, name='Spike_and_Slab GPLVM', group_spike=False, mpi_comm=None, pi=None, learnPi=True, **kwargs): self.mpi_comm = mpi_comm @@ -41,10 +41,13 @@ class SSGPLVM(SparseGP): if X_variance is None: # The variance of the variational approximation (S) X_variance = np.random.uniform(0,.1,X.shape) - gamma = np.empty_like(X) # The posterior probabilities of the binary variable in the variational approximation - gamma[:] = 0.5 + 0.1 * np.random.randn(X.shape[0], input_dim) - gamma[gamma>1.-1e-9] = 1.-1e-9 - gamma[gamma<1e-9] = 1e-9 + if Gamma is None: + gamma = np.empty_like(X) # The posterior probabilities of the binary variable in the variational approximation + gamma[:] = 0.5 + 0.1 * np.random.randn(X.shape[0], input_dim) + gamma[gamma>1.-1e-9] = 1.-1e-9 + gamma[gamma<1e-9] = 1e-9 + else: + gamma = Gamma.copy() if Z is None: Z = np.random.permutation(X.copy())[:num_inducing]