mirror of
https://github.com/SheffieldML/GPy.git
synced 2026-05-08 11:32:39 +02:00
numerical stable implementation of rational qudratic
This commit is contained in:
parent
67ba9b60c6
commit
1b85b45a7e
1 changed files with 9 additions and 6 deletions
|
|
@ -489,18 +489,21 @@ class RatQuad(Stationary):
|
||||||
self.link_parameters(self.power)
|
self.link_parameters(self.power)
|
||||||
|
|
||||||
def K_of_r(self, r):
|
def K_of_r(self, r):
|
||||||
r2 = np.power(r, 2.)
|
r2 = np.square(r)
|
||||||
return self.variance*np.power(1. + r2/2., -self.power)
|
# return self.variance*np.power(1. + r2/2., -self.power)
|
||||||
|
return self.variance*np.exp(-self.power*np.log1p(r2/2.))
|
||||||
|
|
||||||
def dK_dr(self, r):
|
def dK_dr(self, r):
|
||||||
r2 = np.power(r, 2.)
|
r2 = np.square(r)
|
||||||
return -self.variance*self.power*r*np.power(1. + r2/2., - self.power - 1.)
|
# return -self.variance*self.power*r*np.power(1. + r2/2., - self.power - 1.)
|
||||||
|
return-self.variance*self.power*r*np.exp(-(self.power+1)*np.log1p(r2/2.))
|
||||||
|
|
||||||
def update_gradients_full(self, dL_dK, X, X2=None):
|
def update_gradients_full(self, dL_dK, X, X2=None):
|
||||||
super(RatQuad, self).update_gradients_full(dL_dK, X, X2)
|
super(RatQuad, self).update_gradients_full(dL_dK, X, X2)
|
||||||
r = self._scaled_dist(X, X2)
|
r = self._scaled_dist(X, X2)
|
||||||
r2 = np.power(r, 2.)
|
r2 = np.square(r)
|
||||||
dK_dpow = -self.variance * np.power(2., self.power) * np.power(r2 + 2., -self.power) * np.log(0.5*(r2+2.))
|
# dK_dpow = -self.variance * np.power(2., self.power) * np.power(r2 + 2., -self.power) * np.log(0.5*(r2+2.))
|
||||||
|
dK_dpow = -self.variance * np.exp(self.power*(np.log(2.)-np.log1p(r2+1)))*np.log1p(r2/2.)
|
||||||
grad = np.sum(dL_dK*dK_dpow)
|
grad = np.sum(dL_dK*dK_dpow)
|
||||||
self.power.gradient = grad
|
self.power.gradient = grad
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue