chg: added polynomial basis func kernel

This commit is contained in:
mzwiessele 2016-10-13 12:19:59 +01:00
parent 59be79e962
commit 747d24d2fa

View file

@ -102,6 +102,26 @@ class BasisFuncKernel(Kern):
phi2 = phi2[:, None] phi2 = phi2[:, None]
return phi1.dot(phi2.T) return phi1.dot(phi2.T)
class PolinomialBasisFuncKernel(BasisFuncKernel):
def __init__(self, input_dim, degree, variance=1., active_dims=None, ARD=True, name='polinomial_basis'):
"""
A linear segment transformation. The segments start at start, \
are then linear to stop and constant again. The segments are
normalized, so that they have exactly as much mass above
as below the origin.
Start and stop can be tuples or lists of starts and stops.
Behaviour of start stop is as np.where(X<start) would do.
"""
self.degree = degree
super(PolinomialBasisFuncKernel, self).__init__(input_dim, variance, active_dims, ARD, name)
@Cache_this(limit=3, ignore_args=())
def _phi(self, X):
phi = np.empty((X.shape[0], self.degree+1))
for i in range(self.degree+1):
phi[:, [i]] = X**i
return phi
class LinearSlopeBasisFuncKernel(BasisFuncKernel): class LinearSlopeBasisFuncKernel(BasisFuncKernel):
def __init__(self, input_dim, start, stop, variance=1., active_dims=None, ARD=False, name='linear_segment'): def __init__(self, input_dim, start, stop, variance=1., active_dims=None, ARD=False, name='linear_segment'):