mirror of
https://github.com/SheffieldML/GPy.git
synced 2026-05-09 12:02:38 +02:00
ENH: Adding SDE representation of addition, sumation and standard periodic kernel.
All changes have been tested tests are added in later commits.
This commit is contained in:
parent
00e95f957d
commit
06a7fedd22
8 changed files with 477 additions and 82 deletions
|
|
@ -723,7 +723,7 @@ class DescreteStateSpace(object):
|
|||
v*v / S)
|
||||
log_likelihood_update = log_likelihood_update[0,0] # to make int
|
||||
if np.isnan(log_likelihood_update):
|
||||
pass
|
||||
raise ValueError("Errrrr 1")
|
||||
LL = None; islower = None
|
||||
else:
|
||||
LL,islower = linalg.cho_factor(S)
|
||||
|
|
@ -806,7 +806,7 @@ class DescreteStateSpace(object):
|
|||
P_upd = K.dot(S).dot(K.T)
|
||||
P_upd = 0.5*(P_upd + P_upd.T)
|
||||
P_upd = P_pred - P_upd# this update matrix is symmetric
|
||||
|
||||
|
||||
return m_upd, P_upd, log_likelihood_update, dm_upd, dP_upd, d_log_likelihood_update
|
||||
|
||||
@staticmethod
|
||||
|
|
@ -1278,7 +1278,7 @@ class ContDescrStateSpace(DescreteStateSpace):
|
|||
dQc = None
|
||||
dH = None
|
||||
dR = None
|
||||
|
||||
|
||||
|
||||
# TODO: Defaults for m_init, P_init, dm_init, dP_init. !!!
|
||||
# Also for dH, dR and probably for all derivatives
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ import pylab as pb
|
|||
from GPy.core.parameterization.param import Param
|
||||
|
||||
import GPy
|
||||
from .. import likelihoods
|
||||
import GPy.models.state_space_main as ssm
|
||||
#import state_space_main as ssm
|
||||
reload(ssm)
|
||||
|
|
@ -45,17 +46,16 @@ class StateSpace(Model):
|
|||
self.Y = Y[sort_index]
|
||||
|
||||
# Noise variance
|
||||
self.sigma2 = Param('Gaussian_noise', sigma2)
|
||||
self.link_parameter(self.sigma2)
|
||||
|
||||
self.likelihood = likelihoods.Gaussian()
|
||||
|
||||
# Default kernel
|
||||
if kernel is None:
|
||||
self.kern = kern.Matern32(1)
|
||||
else:
|
||||
self.kern = kernel
|
||||
self.link_parameter(self.kern)
|
||||
|
||||
self.sigma2.constrain_positive()
|
||||
self.link_parameter(self.likelihood)
|
||||
self.posterior = None
|
||||
|
||||
# Assert that the kernel is supported
|
||||
if not hasattr(self.kern, 'sde'):
|
||||
|
|
@ -98,7 +98,7 @@ class StateSpace(Model):
|
|||
grad_calc_params['dR'] = dR
|
||||
|
||||
(filter_means, filter_covs, log_likelihood,
|
||||
grad_log_likelihood,SmootherMatrObject) = ssm.ContDescrStateSpace.cont_discr_kalman_filter(F,L,Qc,H,self.sigma2,P_inf,self.X,self.Y,m_init=None,
|
||||
grad_log_likelihood,SmootherMatrObject) = ssm.ContDescrStateSpace.cont_discr_kalman_filter(F,L,Qc,H,self.Gaussian_noise.variance,P_inf,self.X,self.Y,m_init=None,
|
||||
P_init=None, calc_log_likelihood=True,
|
||||
calc_grad_log_likelihood=True,
|
||||
grad_params_no=grad_params_no,
|
||||
|
|
@ -106,9 +106,10 @@ class StateSpace(Model):
|
|||
|
||||
self._log_marginal_likelihood = log_likelihood
|
||||
#gradients = self.compute_gradients()
|
||||
self.sigma2.gradient_full[:] = grad_log_likelihood[-1,0]
|
||||
self.kern.gradient_full[:] = grad_log_likelihood[:-1,0]
|
||||
|
||||
self.likelihood.update_gradients(grad_log_likelihood[-1,0])
|
||||
|
||||
self.kern.sde_update_gradient_full(grad_log_likelihood[:-1,0])
|
||||
|
||||
def log_likelihood(self):
|
||||
return self._log_marginal_likelihood
|
||||
|
||||
|
|
@ -319,4 +320,4 @@ class StateSpace(Model):
|
|||
f[:,:,k] = A.dot(f[:,:,k-1]) + np.dot(np.linalg.cholesky(Q),np.random.randn(A.shape[0],size))
|
||||
|
||||
# Return values
|
||||
return f
|
||||
return f
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue