mirror of
https://github.com/SheffieldML/GPy.git
synced 2026-06-08 15:05:15 +02:00
manual merging
This commit is contained in:
commit
3cb445886d
3 changed files with 101 additions and 16 deletions
|
|
@ -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))
|
||||
Y3 = S3.dot(np.random.randn(S3.shape[1], D3))
|
||||
|
||||
Y1 += .2 * np.random.randn(*Y1.shape)
|
||||
Y2 += .2 * np.random.randn(*Y2.shape)
|
||||
Y3 += .2 * np.random.randn(*Y3.shape)
|
||||
Y1 += .1 * np.random.randn(*Y1.shape)
|
||||
Y2 += .1 * np.random.randn(*Y2.shape)
|
||||
Y3 += .1 * np.random.randn(*Y3.shape)
|
||||
|
||||
Y1 -= Y1.mean(0)
|
||||
Y2 -= Y2.mean(0)
|
||||
|
|
@ -173,14 +173,15 @@ def bgplvm_simulation_matlab_compare():
|
|||
from GPy.models import mrd
|
||||
from GPy import 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,
|
||||
# X=mu,
|
||||
# X_variance=S,
|
||||
# X=mu,
|
||||
# X_variance=S,
|
||||
_debug=True)
|
||||
m.ensure_default_constraints()
|
||||
m.auto_scale_factor = True
|
||||
m['noise'] = .01 # Y.var() / 100.
|
||||
m['linear_variance'] = .01
|
||||
m['{}_variance'.format(k.parts[0].name)] = .01
|
||||
return m
|
||||
|
||||
def bgplvm_simulation(burnin='scg', plot_sim=False,
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ class Bayesian_GPLVM(sparse_GP, GPLVM):
|
|||
self._debug = _debug
|
||||
|
||||
if self._debug:
|
||||
self.fcall = 0
|
||||
self.f_call = 0
|
||||
self._count = itertools.count()
|
||||
self._savedklll = []
|
||||
self._savedparams = []
|
||||
|
|
@ -94,7 +94,7 @@ class Bayesian_GPLVM(sparse_GP, GPLVM):
|
|||
except (LinAlgError, FloatingPointError, ZeroDivisionError):
|
||||
print "\rWARNING: Caught LinAlgError, continueing without setting "
|
||||
if self._debug:
|
||||
self._savederrors.append(self.fcall)
|
||||
self._savederrors.append(self.f_call)
|
||||
# if save_count > 10:
|
||||
# raise
|
||||
# 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,
|
||||
ha='center', va='center')
|
||||
kllls = np.array(self._savedklll)
|
||||
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)
|
||||
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})}]
|
||||
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)
|
||||
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)
|
||||
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())
|
||||
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())
|
||||
for err in self._savederrors:
|
||||
ax1.plot(kllls[err, 0], kllls[err, 2], "*", c=KL.get_color())
|
||||
ax1.plot(kllls[err, 0], kllls[err, 1] - kllls[err, 2], "*", c=LL.get_color())
|
||||
ax1.plot(kllls[err, 0], kllls[err, 1], "*", c=L.get_color())
|
||||
# for err in self._savederrors:
|
||||
# if err < kllls.shape[0]:
|
||||
# ax1.scatter(kllls[err, 0], kllls[err, 2], s=50, marker=(5, 2), c=KL.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:
|
||||
# for f in figs:
|
||||
|
|
|
|||
83
GPy/testing/kern_psi_stat_tests.py
Normal file
83
GPy/testing/kern_psi_stat_tests.py
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
'''
|
||||
Created on 26 Apr 2013
|
||||
|
||||
@author: maxz
|
||||
'''
|
||||
import unittest
|
||||
import GPy
|
||||
import numpy as np
|
||||
import pylab
|
||||
|
||||
__test__ = False
|
||||
|
||||
class Test(unittest.TestCase):
|
||||
D = 9
|
||||
M = 5
|
||||
Nsamples = 3e6
|
||||
|
||||
def setUp(self):
|
||||
self.kerns = (
|
||||
GPy.kern.rbf(self.D), GPy.kern.rbf(self.D, ARD=True),
|
||||
GPy.kern.linear(self.D), GPy.kern.linear(self.D, ARD=True),
|
||||
GPy.kern.linear(self.D) + GPy.kern.bias(self.D),
|
||||
GPy.kern.rbf(self.D) + GPy.kern.bias(self.D),
|
||||
GPy.kern.linear(self.D) + GPy.kern.bias(self.D) + GPy.kern.white(self.D),
|
||||
GPy.kern.rbf(self.D) + GPy.kern.bias(self.D) + GPy.kern.white(self.D),
|
||||
GPy.kern.bias(self.D), GPy.kern.white(self.D),
|
||||
)
|
||||
self.q_x_mean = np.random.randn(self.D)
|
||||
self.q_x_variance = np.exp(np.random.randn(self.D))
|
||||
self.q_x_samples = np.random.randn(self.Nsamples, self.D) * np.sqrt(self.q_x_variance) + self.q_x_mean
|
||||
self.Z = np.random.randn(self.M, self.D)
|
||||
self.q_x_mean.shape = (1, self.D)
|
||||
self.q_x_variance.shape = (1, self.D)
|
||||
|
||||
def test_psi0(self):
|
||||
for kern in self.kerns:
|
||||
psi0 = kern.psi0(self.Z, self.q_x_mean, self.q_x_variance)
|
||||
Kdiag = kern.Kdiag(self.q_x_samples)
|
||||
self.assertAlmostEqual(psi0, np.mean(Kdiag), 1)
|
||||
# print kern.parts[0].name, np.allclose(psi0, np.mean(Kdiag))
|
||||
|
||||
def test_psi1(self):
|
||||
for kern in self.kerns:
|
||||
Nsamples = 100
|
||||
psi1 = kern.psi1(self.Z, self.q_x_mean, self.q_x_variance)
|
||||
K_ = np.zeros((self.N, self.M))
|
||||
diffs = []
|
||||
for i, q_x_sample_stripe in enumerate(np.array_split(self.q_x_samples, self.Nsamples / Nsamples)):
|
||||
K = kern.K(q_x_sample_stripe, self.Z)
|
||||
K_ += K
|
||||
diffs.append(((psi1 - (K_ / (i + 1))) ** 2).mean())
|
||||
K_ /= self.Nsamples / Nsamples
|
||||
# pylab.figure("+".join([p.name for p in kern.parts]) + "psi1")
|
||||
# pylab.plot(diffs)
|
||||
self.assertTrue(np.allclose(psi1.flatten() , K.mean(0), rtol=1e-1))
|
||||
|
||||
def test_psi2(self):
|
||||
for kern in self.kerns:
|
||||
Nsamples = 100
|
||||
psi2 = kern.psi2(self.Z, self.q_x_mean, self.q_x_variance)
|
||||
K_ = np.zeros((self.M, self.M))
|
||||
diffs = []
|
||||
for i, q_x_sample_stripe in enumerate(np.array_split(self.q_x_samples, self.Nsamples / Nsamples)):
|
||||
K = kern.K(q_x_sample_stripe, self.Z)
|
||||
K = (K[:, :, None] * K[:, None, :]).mean(0)
|
||||
K_ += K
|
||||
diffs.append(((psi2 - (K_ / (i + 1))) ** 2).mean())
|
||||
K_ /= self.Nsamples / Nsamples
|
||||
try:
|
||||
# pylab.figure("+".join([p.name for p in kern.parts]) + "psi2")
|
||||
# pylab.plot(diffs)
|
||||
self.assertTrue(np.allclose(psi2.squeeze(), K_,
|
||||
rtol=1e-1, atol=.1),
|
||||
msg="{}: not matching".format("+".join([p.name for p in kern.parts])))
|
||||
except:
|
||||
print "{}: not matching".format(kern.parts[0].name)
|
||||
|
||||
if __name__ == "__main__":
|
||||
import sys;sys.argv = ['',
|
||||
'Test.test_psi0',
|
||||
'Test.test_psi1',
|
||||
'Test.test_psi2']
|
||||
unittest.main()
|
||||
Loading…
Add table
Add a link
Reference in a new issue