From a7b1f30c467badccb0f5b93b112de08eec32b933 Mon Sep 17 00:00:00 2001 From: Zhenwen Dai Date: Thu, 6 Mar 2014 10:24:19 +0000 Subject: [PATCH] [SSGPLVM] support linear kernel with ARD off --- GPy/kern/_src/linear.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/GPy/kern/_src/linear.py b/GPy/kern/_src/linear.py index 8ed7733f..60645d11 100644 --- a/GPy/kern/_src/linear.py +++ b/GPy/kern/_src/linear.py @@ -110,6 +110,7 @@ class Linear(Kern): gamma = variational_posterior.binary_prob mu = variational_posterior.mean S = variational_posterior.variance + return np.einsum('q,nq,nq->n',self.variances,gamma,np.square(mu)+S) # return (self.variances*gamma*(np.square(mu)+S)).sum(axis=1) else: @@ -150,7 +151,10 @@ class Linear(Kern): _dpsi2_dvariance, _, _, _, _ = linear_psi_comp._psi2computations(self.variances, Z, mu, S, gamma) grad = np.einsum('n,nq,nq->q',dL_dpsi0,gamma,mu2S) + np.einsum('nm,nq,mq,nq->q',dL_dpsi1,gamma,Z,mu) +\ np.einsum('nmo,nmoq->q',dL_dpsi2,_dpsi2_dvariance) - self.variances.gradient = grad + if self.ARD: + self.variances.gradient = grad + else: + self.variances.gradient = grad.sum() else: #psi1 self.update_gradients_full(dL_dpsi1, variational_posterior.mean, Z)