mirror of
https://github.com/SheffieldML/GPy.git
synced 2026-05-12 05:22:38 +02:00
LinearCF Psi Stat not working yet, strange bug in psi computations
This commit is contained in:
parent
c502b66ea3
commit
42474f0044
8 changed files with 353 additions and 244 deletions
|
|
@ -5,7 +5,7 @@ Created on 26 Apr 2013
|
|||
'''
|
||||
import unittest
|
||||
import numpy
|
||||
from GPy.inference.conjugate_gradient_descent import CGD
|
||||
from GPy.inference.conjugate_gradient_descent import CGD, RUNNING
|
||||
import pylab
|
||||
import time
|
||||
from scipy.optimize.optimize import rosen, rosen_der
|
||||
|
|
@ -14,17 +14,62 @@ from scipy.optimize.optimize import rosen, rosen_der
|
|||
class Test(unittest.TestCase):
|
||||
|
||||
def testMinimizeSquare(self):
|
||||
f = lambda x: x ** 2 + 2 * x - 2
|
||||
N = 2
|
||||
A = numpy.random.rand(N) * numpy.eye(N)
|
||||
b = numpy.random.rand(N) * 0
|
||||
f = lambda x: numpy.dot(x.T.dot(A), x) - numpy.dot(x.T, b)
|
||||
df = lambda x: numpy.dot(A, x) - b
|
||||
|
||||
opt = CGD()
|
||||
|
||||
restarts = 10
|
||||
for _ in range(restarts):
|
||||
try:
|
||||
x0 = numpy.random.randn(N) * .5
|
||||
res = opt.fmin(f, df, x0, messages=0,
|
||||
maxiter=1000, gtol=1e-10)
|
||||
assert numpy.allclose(res[0], 0, atol=1e-3)
|
||||
break
|
||||
except:
|
||||
# RESTART
|
||||
pass
|
||||
else:
|
||||
raise AssertionError("Test failed for {} restarts".format(restarts))
|
||||
|
||||
def testRosen(self):
|
||||
N = 2
|
||||
f = rosen
|
||||
df = rosen_der
|
||||
x0 = numpy.random.randn(N) * .5
|
||||
|
||||
opt = CGD()
|
||||
|
||||
restarts = 10
|
||||
for _ in range(restarts):
|
||||
try:
|
||||
x0 = numpy.random.randn(N) * .5
|
||||
res = opt.fmin(f, df, x0, messages=0,
|
||||
maxiter=1000, gtol=1e-10)
|
||||
assert numpy.allclose(res[0], 1, atol=1e-5)
|
||||
break
|
||||
except:
|
||||
# RESTART
|
||||
pass
|
||||
else:
|
||||
raise AssertionError("Test failed for {} restarts".format(restarts))
|
||||
|
||||
if __name__ == "__main__":
|
||||
# import sys;sys.argv = ['', 'Test.testMinimizeSquare']
|
||||
# import sys;sys.argv = ['',
|
||||
# 'Test.testMinimizeSquare',
|
||||
# 'Test.testRosen',
|
||||
# ]
|
||||
# unittest.main()
|
||||
|
||||
N = 2
|
||||
A = numpy.random.rand(N) * numpy.eye(N)
|
||||
b = numpy.random.rand(N)
|
||||
# f = lambda x: numpy.dot(x.T.dot(A), x) + numpy.dot(x.T, b)
|
||||
b = numpy.random.rand(N) * 0
|
||||
# f = lambda x: numpy.dot(x.T.dot(A), x) - numpy.dot(x.T, b)
|
||||
# df = lambda x: numpy.dot(A, x) - b
|
||||
|
||||
f = rosen
|
||||
df = rosen_der
|
||||
x0 = numpy.random.randn(N) * .5
|
||||
|
|
@ -48,14 +93,21 @@ if __name__ == "__main__":
|
|||
optplts, = ax.plot3D([x0[0]], [x0[1]], zs=f(x0), marker='o', color='r')
|
||||
|
||||
raw_input("enter to start optimize")
|
||||
res = [0]
|
||||
|
||||
def callback(x, *a, **kw):
|
||||
xopts.append(x.copy())
|
||||
def callback(*r):
|
||||
xopts.append(r[0].copy())
|
||||
# time.sleep(.3)
|
||||
optplts._verts3d = [numpy.array(xopts)[:, 0], numpy.array(xopts)[:, 1], [f(xs) for xs in xopts]]
|
||||
fig.canvas.draw()
|
||||
if r[-1] != RUNNING:
|
||||
res[0] = r
|
||||
|
||||
p, c = opt.fmin_async(f, df, x0.copy(), callback, messages=True, maxiter=1000,
|
||||
report_every=20, gtol=1e-12)
|
||||
|
||||
res = opt.fmin(f, df, x0, callback, messages=True, maxiter=1000, report_every=1)
|
||||
|
||||
pylab.ion()
|
||||
pylab.show()
|
||||
|
||||
pass
|
||||
|
|
|
|||
|
|
@ -9,21 +9,30 @@ import numpy as np
|
|||
import pylab
|
||||
|
||||
__test__ = False
|
||||
np.random.seed(0)
|
||||
|
||||
def ard(p):
|
||||
try:
|
||||
if p.ARD:
|
||||
return "ARD"
|
||||
except:
|
||||
pass
|
||||
return ""
|
||||
|
||||
class Test(unittest.TestCase):
|
||||
D = 9
|
||||
M = 5
|
||||
Nsamples = 3e6
|
||||
M = 3
|
||||
Nsamples = 6e6
|
||||
|
||||
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.rbf(self.D), GPy.kern.rbf(self.D, ARD=True),
|
||||
GPy.kern.linear(self.D, ARD=False), 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.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),
|
||||
# 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))
|
||||
|
|
@ -66,18 +75,21 @@ class Test(unittest.TestCase):
|
|||
K_ += K
|
||||
diffs.append(((psi2 - (K_ / (i + 1))) ** 2).mean())
|
||||
K_ /= self.Nsamples / Nsamples
|
||||
msg = "psi2: {}".format("+".join([p.name + ard(p) for p in kern.parts]))
|
||||
try:
|
||||
# pylab.figure("+".join([p.name for p in kern.parts]) + "psi2")
|
||||
# pylab.plot(diffs)
|
||||
pylab.figure(msg)
|
||||
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])))
|
||||
msg=msg + ": not matching")
|
||||
except:
|
||||
print "{}: not matching".format(kern.parts[0].name)
|
||||
import ipdb;ipdb.set_trace()
|
||||
kern.psi2(self.Z, self.q_x_mean, self.q_x_variance)
|
||||
print msg + ": not matching"
|
||||
|
||||
if __name__ == "__main__":
|
||||
import sys;sys.argv = ['',
|
||||
'Test.test_psi0',
|
||||
'Test.test_psi1',
|
||||
# 'Test.test_psi0',
|
||||
# 'Test.test_psi1',
|
||||
'Test.test_psi2']
|
||||
unittest.main()
|
||||
|
|
|
|||
|
|
@ -106,18 +106,18 @@ if __name__ == "__main__":
|
|||
import sys
|
||||
interactive = 'i' in sys.argv
|
||||
if interactive:
|
||||
N, M, Q, D = 30, 5, 4, 30
|
||||
X = numpy.random.rand(N, Q)
|
||||
k = GPy.kern.linear(Q) + GPy.kern.bias(Q) + GPy.kern.white(Q, 0.00001)
|
||||
K = k.K(X)
|
||||
Y = numpy.random.multivariate_normal(numpy.zeros(N), K, D).T
|
||||
Y -= Y.mean(axis=0)
|
||||
k = GPy.kern.linear(Q) + GPy.kern.bias(Q) + GPy.kern.white(Q, 0.00001)
|
||||
m = GPy.models.Bayesian_GPLVM(Y, Q, kernel=k, M=M)
|
||||
m.ensure_default_constraints()
|
||||
m.randomize()
|
||||
# self.assertTrue(m.checkgrad())
|
||||
|
||||
# N, M, Q, D = 30, 5, 4, 30
|
||||
# X = numpy.random.rand(N, Q)
|
||||
# k = GPy.kern.linear(Q) + GPy.kern.bias(Q) + GPy.kern.white(Q, 0.00001)
|
||||
# K = k.K(X)
|
||||
# Y = numpy.random.multivariate_normal(numpy.zeros(N), K, D).T
|
||||
# Y -= Y.mean(axis=0)
|
||||
# k = GPy.kern.linear(Q) + GPy.kern.bias(Q) + GPy.kern.white(Q, 0.00001)
|
||||
# m = GPy.models.Bayesian_GPLVM(Y, Q, kernel=k, M=M)
|
||||
# m.ensure_default_constraints()
|
||||
# m.randomize()
|
||||
# # self.assertTrue(m.checkgrad())
|
||||
numpy.random.seed(0)
|
||||
Q = 5
|
||||
N = 50
|
||||
M = 10
|
||||
|
|
@ -126,11 +126,11 @@ if __name__ == "__main__":
|
|||
X_var = .5 * numpy.ones_like(X) + .4 * numpy.clip(numpy.random.randn(*X.shape), 0, 1)
|
||||
Z = numpy.random.permutation(X)[:M]
|
||||
Y = X.dot(numpy.random.randn(Q, D))
|
||||
kernel = GPy.kern.bias(Q)
|
||||
|
||||
kernels = [GPy.kern.linear(Q), GPy.kern.rbf(Q), GPy.kern.bias(Q),
|
||||
GPy.kern.linear(Q) + GPy.kern.bias(Q),
|
||||
GPy.kern.rbf(Q) + GPy.kern.bias(Q)]
|
||||
# kernel = GPy.kern.bias(Q)
|
||||
#
|
||||
# kernels = [GPy.kern.linear(Q), GPy.kern.rbf(Q), GPy.kern.bias(Q),
|
||||
# GPy.kern.linear(Q) + GPy.kern.bias(Q),
|
||||
# GPy.kern.rbf(Q) + GPy.kern.bias(Q)]
|
||||
|
||||
# for k in kernels:
|
||||
# m = PsiStatModel('psi1', X=X, X_variance=X_var, Z=Z,
|
||||
|
|
@ -143,11 +143,13 @@ if __name__ == "__main__":
|
|||
# M=M, kernel=kernel)
|
||||
# m1 = PsiStatModel('psi1', X=X, X_variance=X_var, Z=Z,
|
||||
# M=M, kernel=kernel)
|
||||
m2 = PsiStatModel('psi2', X=X, X_variance=X_var, Z=Z,
|
||||
M=M, kernel=GPy.kern.rbf(Q))
|
||||
# m2 = PsiStatModel('psi2', X=X, X_variance=X_var, Z=Z,
|
||||
# M=M, kernel=GPy.kern.rbf(Q))
|
||||
m3 = PsiStatModel('psi2', X=X, X_variance=X_var, Z=Z,
|
||||
M=M, kernel=GPy.kern.linear(Q) + GPy.kern.bias(Q))
|
||||
m4 = PsiStatModel('psi2', X=X, X_variance=X_var, Z=Z,
|
||||
M=M, kernel=GPy.kern.rbf(Q) + GPy.kern.bias(Q))
|
||||
M=M, kernel=GPy.kern.linear(Q))
|
||||
m3.ensure_default_constraints()
|
||||
# + GPy.kern.bias(Q))
|
||||
# m4 = PsiStatModel('psi2', X=X, X_variance=X_var, Z=Z,
|
||||
# M=M, kernel=GPy.kern.rbf(Q) + GPy.kern.bias(Q))
|
||||
else:
|
||||
unittest.main()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue