mirror of
https://github.com/SheffieldML/GPy.git
synced 2026-05-07 11:02:38 +02:00
Fixed deg free gradient
This commit is contained in:
parent
75ebe4bf10
commit
1acbcd2593
2 changed files with 29 additions and 29 deletions
|
|
@ -36,9 +36,6 @@ class StudentT(Likelihood):
|
||||||
|
|
||||||
self.log_concave = False
|
self.log_concave = False
|
||||||
|
|
||||||
#def parameters_changed(self):
|
|
||||||
#self.variance = (self.v / float(self.v - 2)) * self.sigma2
|
|
||||||
|
|
||||||
def update_gradients(self, grads):
|
def update_gradients(self, grads):
|
||||||
"""
|
"""
|
||||||
Pull out the gradients, be careful as the order must match the order
|
Pull out the gradients, be careful as the order must match the order
|
||||||
|
|
@ -231,8 +228,8 @@ class StudentT(Likelihood):
|
||||||
df = float(self.v[:])
|
df = float(self.v[:])
|
||||||
s2 = float(self.sigma2[:])
|
s2 = float(self.sigma2[:])
|
||||||
dlogpdf_dv = 0.5*digamma(0.5*(df+1)) - 0.5*digamma(0.5*df) - 1.0/(2*df)
|
dlogpdf_dv = 0.5*digamma(0.5*(df+1)) - 0.5*digamma(0.5*df) - 1.0/(2*df)
|
||||||
dlogpdf_dv += (1.0/(2*df))*(df+1)*e/(e2 + s2*df)
|
dlogpdf_dv += 0.5*(df+1)*e2/(df*(e2 + s2*df))
|
||||||
dlogpdf_dv -= np.log(1 + e2/(s2*df))
|
dlogpdf_dv -= 0.5*np.log1p(e2/(s2*df))
|
||||||
return dlogpdf_dv
|
return dlogpdf_dv
|
||||||
|
|
||||||
def dlogpdf_dlink_dv(self, inv_link_f, y, Y_metadata=None):
|
def dlogpdf_dlink_dv(self, inv_link_f, y, Y_metadata=None):
|
||||||
|
|
@ -248,9 +245,8 @@ class StudentT(Likelihood):
|
||||||
e2 = np.square(e)
|
e2 = np.square(e)
|
||||||
df = float(self.v[:])
|
df = float(self.v[:])
|
||||||
s2 = float(self.sigma2[:])
|
s2 = float(self.sigma2[:])
|
||||||
#derivative of hess = ((self.v + 1)*(e**2 - self.v*self.sigma2)) / ((self.sigma2*self.v + e**2)**2)
|
|
||||||
e2_s2v = e**2 + s2*df
|
e2_s2v = e**2 + s2*df
|
||||||
d2logpdf_df2_dv = (e2 - s2*df - s2*(df + 1))/e2_s2v**2 - 2*s2*(df+1)*(e2 - s2*df)/e2_s2v
|
d2logpdf_df2_dv = (-s2*(df+1) + e2 - s2*df)/e2_s2v**2 - 2*s2*(df+1)*(e2 - s2*df)/e2_s2v**3
|
||||||
return d2logpdf_df2_dv
|
return d2logpdf_df2_dv
|
||||||
|
|
||||||
def dlogpdf_link_dtheta(self, f, y, Y_metadata=None):
|
def dlogpdf_link_dtheta(self, f, y, Y_metadata=None):
|
||||||
|
|
|
||||||
|
|
@ -93,6 +93,9 @@ def dparam_checkgrad(func, dfunc, params, params_names, args, constraints=None,
|
||||||
if not grad.checkgrad(verbose=True):
|
if not grad.checkgrad(verbose=True):
|
||||||
gradchecking = False
|
gradchecking = False
|
||||||
|
|
||||||
|
if not grad.checkgrad(verbose=True):
|
||||||
|
gradchecking = False
|
||||||
|
|
||||||
return gradchecking
|
return gradchecking
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -116,6 +119,7 @@ class TestNoiseModels(object):
|
||||||
self.integer_Y = np.where(tmp > 0, tmp, 0)
|
self.integer_Y = np.where(tmp > 0, tmp, 0)
|
||||||
|
|
||||||
self.var = 0.2
|
self.var = 0.2
|
||||||
|
self.deg_free = 4.0
|
||||||
|
|
||||||
#Make a bigger step as lower bound can be quite curved
|
#Make a bigger step as lower bound can be quite curved
|
||||||
self.step = 1e-4
|
self.step = 1e-4
|
||||||
|
|
@ -135,56 +139,56 @@ class TestNoiseModels(object):
|
||||||
}
|
}
|
||||||
"""
|
"""
|
||||||
self.noise_models = {"Student_t_default": {
|
self.noise_models = {"Student_t_default": {
|
||||||
"model": GPy.likelihoods.StudentT(deg_free=5, sigma2=self.var),
|
"model": GPy.likelihoods.StudentT(deg_free=self.deg_free, sigma2=self.var),
|
||||||
"grad_params": {
|
"grad_params": {
|
||||||
"names": [".*t_scale2"],
|
"names": [".*t_scale2", ".*deg_free"],
|
||||||
"vals": [self.var],
|
"vals": [self.var, self.deg_free],
|
||||||
"constraints": [(".*t_scale2", self.constrain_positive), (".*deg_free", self.constrain_fixed)]
|
"constraints": [(".*t_scale2", self.constrain_positive), (".*deg_free", self.constrain_positive)]
|
||||||
},
|
},
|
||||||
"laplace": True
|
"laplace": True
|
||||||
},
|
},
|
||||||
"Student_t_1_var": {
|
"Student_t_1_var": {
|
||||||
"model": GPy.likelihoods.StudentT(deg_free=5, sigma2=self.var),
|
"model": GPy.likelihoods.StudentT(deg_free=self.deg_free, sigma2=self.var),
|
||||||
"grad_params": {
|
"grad_params": {
|
||||||
"names": [".*t_scale2"],
|
"names": [".*t_scale2", ".*deg_free"],
|
||||||
"vals": [1.0],
|
"vals": [1.0, 8.0],
|
||||||
"constraints": [(".*t_scale2", self.constrain_positive), (".*deg_free", self.constrain_fixed)]
|
"constraints": [(".*t_scale2", self.constrain_positive), (".*deg_free", self.constrain_positive)]
|
||||||
},
|
},
|
||||||
"laplace": True
|
"laplace": True
|
||||||
},
|
},
|
||||||
"Student_t_small_deg_free": {
|
"Student_t_small_deg_free": {
|
||||||
"model": GPy.likelihoods.StudentT(deg_free=1.5, sigma2=self.var),
|
"model": GPy.likelihoods.StudentT(deg_free=1.5, sigma2=self.var),
|
||||||
"grad_params": {
|
"grad_params": {
|
||||||
"names": [".*t_scale2"],
|
"names": [".*t_scale2", ".*deg_free"],
|
||||||
"vals": [self.var],
|
"vals": [self.var, 1.5],
|
||||||
"constraints": [(".*t_scale2", self.constrain_positive), (".*deg_free", self.constrain_fixed)]
|
"constraints": [(".*t_scale2", self.constrain_positive), (".*deg_free", self.constrain_positive)]
|
||||||
},
|
},
|
||||||
"laplace": True
|
"laplace": True
|
||||||
},
|
},
|
||||||
"Student_t_small_var": {
|
"Student_t_small_var": {
|
||||||
"model": GPy.likelihoods.StudentT(deg_free=5, sigma2=self.var),
|
"model": GPy.likelihoods.StudentT(deg_free=self.deg_free, sigma2=self.var),
|
||||||
"grad_params": {
|
"grad_params": {
|
||||||
"names": [".*t_scale2"],
|
"names": [".*t_scale2", ".*deg_free"],
|
||||||
"vals": [0.001],
|
"vals": [0.001, self.deg_free],
|
||||||
"constraints": [(".*t_scale2", self.constrain_positive), (".*deg_free", self.constrain_fixed)]
|
"constraints": [(".*t_scale2", self.constrain_positive), (".*deg_free", self.constrain_positive)]
|
||||||
},
|
},
|
||||||
"laplace": True
|
"laplace": True
|
||||||
},
|
},
|
||||||
"Student_t_large_var": {
|
"Student_t_large_var": {
|
||||||
"model": GPy.likelihoods.StudentT(deg_free=5, sigma2=self.var),
|
"model": GPy.likelihoods.StudentT(deg_free=self.deg_free, sigma2=self.var),
|
||||||
"grad_params": {
|
"grad_params": {
|
||||||
"names": [".*t_scale2"],
|
"names": [".*t_scale2", ".*deg_free"],
|
||||||
"vals": [10.0],
|
"vals": [10.0, self.deg_free],
|
||||||
"constraints": [(".*t_scale2", self.constrain_positive), (".*deg_free", self.constrain_fixed)]
|
"constraints": [(".*t_scale2", self.constrain_positive), (".*deg_free", self.constrain_positive)]
|
||||||
},
|
},
|
||||||
"laplace": True
|
"laplace": True
|
||||||
},
|
},
|
||||||
"Student_t_approx_gauss": {
|
"Student_t_approx_gauss": {
|
||||||
"model": GPy.likelihoods.StudentT(deg_free=1000, sigma2=self.var),
|
"model": GPy.likelihoods.StudentT(deg_free=1000, sigma2=self.var),
|
||||||
"grad_params": {
|
"grad_params": {
|
||||||
"names": [".*t_scale2"],
|
"names": [".*t_scale2", ".*deg_free"],
|
||||||
"vals": [self.var],
|
"vals": [self.var, 1000],
|
||||||
"constraints": [(".*t_scale2", self.constrain_positive), (".*deg_free", self.constrain_fixed)]
|
"constraints": [(".*t_scale2", self.constrain_positive), (".*deg_free", self.constrain_positive)]
|
||||||
},
|
},
|
||||||
"laplace": True
|
"laplace": True
|
||||||
},
|
},
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue