38 lines
994 B
Python
Executable File
38 lines
994 B
Python
Executable File
import numpy as np
|
|
|
|
|
|
class GaussianProcessClassifier(object):
|
|
|
|
def __init__(self, kernel, noise_level=1e-4):
|
|
"""
|
|
construct gaussian process classifier
|
|
|
|
Parameters
|
|
----------
|
|
kernel
|
|
kernel function to be used to compute Gram matrix
|
|
noise_level : float
|
|
parameter to ensure the matrix to be positive
|
|
"""
|
|
self.kernel = kernel
|
|
self.noise_level = noise_level
|
|
|
|
def _sigmoid(self, a):
|
|
return np.tanh(a * 0.5) * 0.5 + 0.5
|
|
|
|
def fit(self, X, t):
|
|
if X.ndim == 1:
|
|
X = X[:, None]
|
|
self.X = X
|
|
self.t = t
|
|
Gram = self.kernel(X, X)
|
|
self.covariance = Gram + np.eye(len(Gram)) * self.noise_level
|
|
self.precision = np.linalg.inv(self.covariance)
|
|
|
|
def predict(self, X):
|
|
if X.ndim == 1:
|
|
X = X[:, None]
|
|
K = self.kernel(X, self.X)
|
|
a_mean = K @ self.precision @ self.t
|
|
return self._sigmoid(a_mean)
|