mirror of
https://github.com/SheffieldML/GPy.git
synced 2026-05-12 13:32:39 +02:00
bugfix: cross term psi1 bias + linear
This commit is contained in:
parent
743112c448
commit
389a04d2b5
4 changed files with 28 additions and 11 deletions
|
|
@ -455,10 +455,15 @@ class kern(parameterised):
|
||||||
p2.dpsi1_dtheta(dL_dpsi2.sum(1) * p1._psi1 * 2., Z, mu, S, target[ps2])
|
p2.dpsi1_dtheta(dL_dpsi2.sum(1) * p1._psi1 * 2., Z, mu, S, target[ps2])
|
||||||
# linear X bias
|
# linear X bias
|
||||||
elif p1.name == 'bias' and p2.name == 'linear':
|
elif p1.name == 'bias' and p2.name == 'linear':
|
||||||
p2.dpsi1_dtheta(dL_dpsi2.sum(1) * p1.variance * 2., Z, mu, S, target)
|
p2.dpsi1_dtheta(dL_dpsi2.sum(1) * p1.variance * 2., Z, mu, S, target[ps2]) # [ps1])
|
||||||
|
psi1 = np.zeros((mu.shape[0], Z.shape[0]))
|
||||||
|
p2.psi1(Z, mu, S, psi1)
|
||||||
|
p1.dpsi1_dtheta(dL_dpsi2.sum(1) * psi1 * 2., Z, mu, S, target[ps1])
|
||||||
elif p2.name == 'bias' and p1.name == 'linear':
|
elif p2.name == 'bias' and p1.name == 'linear':
|
||||||
p1.dpsi1_dtheta(dL_dpsi2.sum(1) * p2.variance * 2., Z, mu, S, target)
|
p1.dpsi1_dtheta(dL_dpsi2.sum(1) * p2.variance * 2., Z, mu, S, target[ps1])
|
||||||
pass
|
psi1 = np.zeros((mu.shape[0], Z.shape[0]))
|
||||||
|
p1.psi1(Z, mu, S, psi1)
|
||||||
|
p2.dpsi1_dtheta(dL_dpsi2.sum(1) * psi1 * 2., Z, mu, S, target[ps2])
|
||||||
# rbf X linear
|
# rbf X linear
|
||||||
elif p1.name == 'linear' and p2.name == 'rbf':
|
elif p1.name == 'linear' and p2.name == 'rbf':
|
||||||
raise NotImplementedError # TODO
|
raise NotImplementedError # TODO
|
||||||
|
|
|
||||||
|
|
@ -114,7 +114,7 @@ class linear(kernpart):
|
||||||
|
|
||||||
def psi1(self,Z,mu,S,target):
|
def psi1(self,Z,mu,S,target):
|
||||||
"""the variance, it does nothing"""
|
"""the variance, it does nothing"""
|
||||||
self.K(mu,Z,target)
|
self._psi1 = self.K(mu, Z, target)
|
||||||
|
|
||||||
def dpsi1_dtheta(self,dL_dpsi1,Z,mu,S,target):
|
def dpsi1_dtheta(self,dL_dpsi1,Z,mu,S,target):
|
||||||
"""the variance, it does nothing"""
|
"""the variance, it does nothing"""
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,7 @@ class BGPLVMTests(unittest.TestCase):
|
||||||
|
|
||||||
#@unittest.skip('psi2 cross terms are NotImplemented for this combination')
|
#@unittest.skip('psi2 cross terms are NotImplemented for this combination')
|
||||||
def test_linear_bias_kern(self):
|
def test_linear_bias_kern(self):
|
||||||
N, M, Q, D = 10, 3, 2, 4
|
N, M, Q, D = 30, 5, 4, 30
|
||||||
X = np.random.rand(N, Q)
|
X = np.random.rand(N, Q)
|
||||||
k = GPy.kern.linear(Q) + GPy.kern.bias(Q) + GPy.kern.white(Q, 0.00001)
|
k = GPy.kern.linear(Q) + GPy.kern.bias(Q) + GPy.kern.white(Q, 0.00001)
|
||||||
K = k.K(X)
|
K = k.K(X)
|
||||||
|
|
|
||||||
|
|
@ -105,6 +105,18 @@ if __name__ == "__main__":
|
||||||
import sys
|
import sys
|
||||||
interactive = 'i' in sys.argv
|
interactive = 'i' in sys.argv
|
||||||
if interactive:
|
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())
|
||||||
|
|
||||||
Q = 5
|
Q = 5
|
||||||
N = 50
|
N = 50
|
||||||
M = 10
|
M = 10
|
||||||
|
|
@ -119,17 +131,17 @@ if __name__ == "__main__":
|
||||||
GPy.kern.linear(Q) + GPy.kern.bias(Q),
|
GPy.kern.linear(Q) + GPy.kern.bias(Q),
|
||||||
GPy.kern.rbf(Q) + GPy.kern.bias(Q)]
|
GPy.kern.rbf(Q) + GPy.kern.bias(Q)]
|
||||||
|
|
||||||
for k in kernels:
|
# for k in kernels:
|
||||||
m = PsiStatModel('psi1', X=X, X_variance=X_var, Z=Z,
|
# m = PsiStatModel('psi1', X=X, X_variance=X_var, Z=Z,
|
||||||
M=M, kernel=k)
|
# M=M, kernel=k)
|
||||||
assert m.checkgrad(), "{} x psi1".format("+".join(map(lambda x: x.name, k.parts)))
|
# assert m.checkgrad(), "{} x psi1".format("+".join(map(lambda x: x.name, k.parts)))
|
||||||
#
|
#
|
||||||
# m0 = PsiStatModel('psi0', X=X, X_variance=X_var, Z=Z,
|
# m0 = PsiStatModel('psi0', X=X, X_variance=X_var, Z=Z,
|
||||||
# M=M, kernel=GPy.kern.linear(Q))
|
# M=M, kernel=GPy.kern.linear(Q))
|
||||||
# m1 = PsiStatModel('psi1', X=X, X_variance=X_var, Z=Z,
|
# m1 = PsiStatModel('psi1', X=X, X_variance=X_var, Z=Z,
|
||||||
# M=M, kernel=kernel)
|
# M=M, kernel=kernel)
|
||||||
m1 = PsiStatModel('psi1', X=X, X_variance=X_var, Z=Z,
|
# m1 = PsiStatModel('psi1', X=X, X_variance=X_var, Z=Z,
|
||||||
M=M, kernel=kernel)
|
# M=M, kernel=kernel)
|
||||||
m2 = PsiStatModel('psi2', X=X, X_variance=X_var, Z=Z,
|
m2 = PsiStatModel('psi2', X=X, X_variance=X_var, Z=Z,
|
||||||
M=M, kernel=GPy.kern.rbf(Q))
|
M=M, kernel=GPy.kern.rbf(Q))
|
||||||
m3 = PsiStatModel('psi2', X=X, X_variance=X_var, Z=Z,
|
m3 = PsiStatModel('psi2', X=X, X_variance=X_var, Z=Z,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue