changes pull from devel

This commit is contained in:
Max Zwiessele 2013-04-26 16:38:19 +01:00
parent 16b64f41d6
commit 0da81bc311
3 changed files with 20 additions and 20 deletions

View file

@ -130,9 +130,9 @@ def _simulate_sincos(D1, D2, D3, N, M, Q, plot_sim=False):
Y2 = S2.dot(np.random.randn(S2.shape[1], D2)) Y2 = S2.dot(np.random.randn(S2.shape[1], D2))
Y3 = S3.dot(np.random.randn(S3.shape[1], D3)) Y3 = S3.dot(np.random.randn(S3.shape[1], D3))
Y1 += .2 * np.random.randn(*Y1.shape) Y1 += .1 * np.random.randn(*Y1.shape)
Y2 += .2 * np.random.randn(*Y2.shape) Y2 += .1 * np.random.randn(*Y2.shape)
Y3 += .2 * np.random.randn(*Y3.shape) Y3 += .1 * np.random.randn(*Y3.shape)
Y1 -= Y1.mean(0) Y1 -= Y1.mean(0)
Y2 -= Y2.mean(0) Y2 -= Y2.mean(0)
@ -173,14 +173,15 @@ def bgplvm_simulation_matlab_compare():
from GPy.models import mrd from GPy.models import mrd
from GPy import kern from GPy import kern
reload(mrd); reload(kern) reload(mrd); reload(kern)
k = kern.linear(Q, ARD=True) + kern.bias(Q, np.exp(-2)) + kern.white(Q, np.exp(-2)) k = kern.rbf(Q, ARD=True) + kern.bias(Q, np.exp(-2)) + kern.white(Q, np.exp(-2))
m = Bayesian_GPLVM(Y, Q, init="PCA", M=M, kernel=k, m = Bayesian_GPLVM(Y, Q, init="PCA", M=M, kernel=k,
# X=mu, # X=mu,
# X_variance=S, # X_variance=S,
_debug=True) _debug=True)
m.ensure_default_constraints() m.ensure_default_constraints()
m.auto_scale_factor = True
m['noise'] = .01 # Y.var() / 100. m['noise'] = .01 # Y.var() / 100.
m['linear_variance'] = .01 m['{}_variance'.format(k.parts[0].name)] = .01
return m return m
def bgplvm_simulation(burnin='scg', plot_sim=False, def bgplvm_simulation(burnin='scg', plot_sim=False,

View file

@ -47,7 +47,7 @@ class Bayesian_GPLVM(sparse_GP, GPLVM):
self._debug = _debug self._debug = _debug
if self._debug: if self._debug:
self.fcall = 0 self.f_call = 0
self._count = itertools.count() self._count = itertools.count()
self._savedklll = [] self._savedklll = []
self._savedparams = [] self._savedparams = []
@ -94,7 +94,7 @@ class Bayesian_GPLVM(sparse_GP, GPLVM):
except (LinAlgError, FloatingPointError, ZeroDivisionError): except (LinAlgError, FloatingPointError, ZeroDivisionError):
print "\rWARNING: Caught LinAlgError, continueing without setting " print "\rWARNING: Caught LinAlgError, continueing without setting "
if self._debug: if self._debug:
self._savederrors.append(self.fcall) self._savederrors.append(self.f_call)
# if save_count > 10: # if save_count > 10:
# raise # raise
# self._set_params(self.oldps[-1], save_old=False, save_count=save_count + 1) # self._set_params(self.oldps[-1], save_old=False, save_count=save_count + 1)
@ -242,9 +242,9 @@ class Bayesian_GPLVM(sparse_GP, GPLVM):
ax1.text(.5, .5, "Optimization", alpha=.3, transform=ax1.transAxes, ax1.text(.5, .5, "Optimization", alpha=.3, transform=ax1.transAxes,
ha='center', va='center') ha='center', va='center')
kllls = np.array(self._savedklll) kllls = np.array(self._savedklll)
LL, = ax1.plot(kllls[:, 0], kllls[:, 1] - kllls[:, 2], label=r'$\log p(\mathbf{Y})$', mew=1.5) LL, = ax1.plot(kllls[:, 0], kllls[:, 1] - kllls[:, 2], '-', label=r'$\log p(\mathbf{Y})$', mew=1.5)
KL, = ax1.plot(kllls[:, 0], kllls[:, 2], label=r'$\mathcal{KL}(p||q)$', mew=1.5) KL, = ax1.plot(kllls[:, 0], kllls[:, 2], '-', label=r'$\mathcal{KL}(p||q)$', mew=1.5)
L, = ax1.plot(kllls[:, 0], kllls[:, 1], label=r'$L$', mew=1.5) # \mathds{E}_{q(\mathbf{X})}[p(\mathbf{Y|X})\frac{p(\mathbf{X})}{q(\mathbf{X})}] L, = ax1.plot(kllls[:, 0], kllls[:, 1], '-', label=r'$L$', mew=1.5) # \mathds{E}_{q(\mathbf{X})}[p(\mathbf{Y|X})\frac{p(\mathbf{X})}{q(\mathbf{X})}]
param_dict = dict(self._savedparams) param_dict = dict(self._savedparams)
gradient_dict = dict(self._savedgradients) gradient_dict = dict(self._savedgradients)
@ -361,10 +361,11 @@ class Bayesian_GPLVM(sparse_GP, GPLVM):
indicatorKL, = ax1.plot(kllls[self.showing, 0], kllls[self.showing, 2], 'o', c=KL.get_color()) indicatorKL, = ax1.plot(kllls[self.showing, 0], kllls[self.showing, 2], 'o', c=KL.get_color())
indicatorLL, = ax1.plot(kllls[self.showing, 0], kllls[self.showing, 1] - kllls[self.showing, 2], 'o', c=LL.get_color()) indicatorLL, = ax1.plot(kllls[self.showing, 0], kllls[self.showing, 1] - kllls[self.showing, 2], 'o', c=LL.get_color())
indicatorL, = ax1.plot(kllls[self.showing, 0], kllls[self.showing, 1], 'o', c=L.get_color()) indicatorL, = ax1.plot(kllls[self.showing, 0], kllls[self.showing, 1], 'o', c=L.get_color())
for err in self._savederrors: # for err in self._savederrors:
ax1.plot(kllls[err, 0], kllls[err, 2], "*", c=KL.get_color()) # if err < kllls.shape[0]:
ax1.plot(kllls[err, 0], kllls[err, 1] - kllls[err, 2], "*", c=LL.get_color()) # ax1.scatter(kllls[err, 0], kllls[err, 2], s=50, marker=(5, 2), c=KL.get_color())
ax1.plot(kllls[err, 0], kllls[err, 1], "*", c=L.get_color()) # ax1.scatter(kllls[err, 0], kllls[err, 1] - kllls[err, 2], s=50, marker=(5, 2), c=LL.get_color())
# ax1.scatter(kllls[err, 0], kllls[err, 1], s=50, marker=(5, 2), c=L.get_color())
# try: # try:
# for f in figs: # for f in figs:

View file

@ -109,10 +109,8 @@ class sparse_GP(GP):
self.psi1V = np.dot(self.psi1, self.V) self.psi1V = np.dot(self.psi1, self.V)
#tmp = np.dot(self.Lmi.T, self.LBi.T) #tmp = np.dot(self.Lmi.T, self.LBi.T)
#tmp = linalg.lapack.clapack.dtrtrs(self.Lm.T,np.asarray(self.LBi.T,order='C'),lower=0)[0] tmp = linalg.lapack.clapack.dtrtrs(self.Lm.T,np.asarray(self.LBi.T,order='C'),lower=0)[0]
#self.C = np.dot(tmp,tmp.T) #TODO: tmp is triangular. replace with dtrmm (blas) when available self.C = np.dot(tmp,tmp.T) #TODO: tmp is triangular. replace with dtrmm (blas) when available
tmp = linalg.lapack.flapack.dtrtrs(self.Lm,np.asfortranarray(self.Bi),lower=1,trans=1)[0]
self.C = linalg.lapack.flapack.dtrtrs(self.Lm,np.asfortranarray(tmp.T),lower=1,trans=1)[0]
self.Cpsi1V = np.dot(self.C,self.psi1V) self.Cpsi1V = np.dot(self.C,self.psi1V)
self.Cpsi1VVpsi1 = np.dot(self.Cpsi1V,self.psi1V.T) self.Cpsi1VVpsi1 = np.dot(self.Cpsi1V,self.psi1V.T)
#self.E = np.dot(self.Cpsi1VVpsi1,self.C)/sf2 #self.E = np.dot(self.Cpsi1VVpsi1,self.C)/sf2