mirror of
https://github.com/SheffieldML/GPy.git
synced 2026-06-08 15:05:15 +02:00
matern 32 grad
This commit is contained in:
parent
3d146a2133
commit
ff77d316ac
1 changed files with 37 additions and 0 deletions
37
GPy/kern/_src/materngrad.py
Normal file
37
GPy/kern/_src/materngrad.py
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
|
||||
from stationary import Matern32 #from kern import Matern32
|
||||
import numpy as np
|
||||
from GPy.util.linalg import tdot
|
||||
from GPy import util
|
||||
|
||||
|
||||
class Matern32grad(Matern32):
|
||||
"""
|
||||
Matern 3/2 kernel:
|
||||
|
||||
.. math::
|
||||
|
||||
k(r) = \\sigma^2 (1 + \\sqrt{3} r) \exp(- \sqrt{3} r) \\ \\ \\ \\ \\text{ where } r = \sqrt{\sum_{i=1}^input_dim \\frac{(x_i-y_i)^2}{\ell_i^2} }
|
||||
|
||||
"""
|
||||
def __init__(self, input_dim, variance=1., lengthscale=None, ARD=False, active_dims=None, name='Mat32'):
|
||||
#super(Matern32, self).__init__(input_dim, variance, lengthscale, ARD, active_dims, name)
|
||||
super(Matern32grad, self).__init__(input_dim, variance, lengthscale, ARD, active_dims, name)
|
||||
|
||||
def dK_dtheta(self, X):
|
||||
"""
|
||||
Compute the Euclidean distance between each pair of rows of X.
|
||||
"""
|
||||
Xsq = np.sum(np.square(X),1)
|
||||
r2 = -2.*tdot(X) + (Xsq[:,None] + Xsq[None,:])
|
||||
util.diag.view(r2)[:,]= 0. # force diagnoal to be zero: sometime numerically a little negative
|
||||
r2 = np.clip(r2, 0, np.inf)
|
||||
dist = np.sqrt(r2)
|
||||
le2 = self.lengthscale**2
|
||||
dkdl = self.variance * ( np.sqrt(3)*dist*(-1)/le2*np.exp(-np.sqrt(3*r2/le2)) \
|
||||
+(1.+np.sqrt(3.*r2/le2)) *np.exp(-np.sqrt(3.*r2/le2) )*np.sqrt(3*r2)/le2 )
|
||||
|
||||
return dkdl #self.variance * (1. + np.sqrt(3.) * r) * np.exp(-np.sqrt(3.) * r)
|
||||
|
||||
## self.kern = kern.Matern32(1,lengthscale=1) self.kern.dkdl(X)
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue