class_docstr: Gaussian Process Regression.
  
  This is a vanilla implementation of GP regression with a Gaussian
  likelihood.  Multiple columns of Y are treated independently.
  
  The log likelihood of this model is given by
  
  .. math::
     \log p(Y \,|\, \mathbf f) =
          \mathcal N(Y \,|\, 0, \sigma_n^2 \mathbf{I})
  
  To train the model, we maximise the log _marginal_ likelihood
  w.r.t. the likelihood variance and kernel hyperparameters theta.
  The marginal likelihood is found by integrating the likelihood
  over the prior, and has the form
  
  .. math::
     \log p(Y \,|\, \sigma_n, \theta) =
          \mathcal N(Y \,|\, 0, \mathbf{K} + \sigma_n^2 \mathbf{I})
  
  For a use example see :doc:`../../../../notebooks/getting_started/basic_usage`.
class_docstr_tok: ["Gaussian","Process","Regression",".","This","is","a","vanilla","implementation","of","GP","regression","with","a","Gaussian","likelihood",".","Multiple","columns","of","Y","are","treated","independently",".","The","log","likelihood","of","this","model","is","given","by","..","math",":",":","\\log","p","(","Y","\\",",","|\\",",","\\mathbf","f",")","=","\\mathcal","N","(","Y","\\",",","|\\",",","0",",","\\sigma_n^2","\\mathbf","{","I","}",")","To","train","the","model",",","we","maximise","the","log","_marginal_","likelihood","w.r.t",".","the","likelihood","variance","and","kernel","hyperparameters","theta",".","The","marginal","likelihood","is","found","by","integrating","the","likelihood","over","the","prior",",","and","has","the","form","..","math",":",":","\\log","p","(","Y","\\",",","|\\",",","\\sigma_n",",","\\theta",")","=","\\mathcal","N","(","Y","\\",",","|\\",",","0",",","\\mathbf","{","K","}","+","\\sigma_n^2","\\mathbf","{","I","}",")","For","a","use","example","see",":","doc",":","`","..","\/","..","\/","..","\/","..","\/notebooks\/getting_started\/basic_usage","`","."]
code: def __init__(
      self,
      data: RegressionData,
      kernel: Kernel,
      mean_function: Optional[MeanFunction] = None,
      noise_variance: Optional[TensorData] = None,
      likelihood: Optional[Gaussian] = None,
  ):
      assert (noise_variance is None) or (
          likelihood is None
      ), "Cannot set both `noise_variance` and `likelihood`."
      if likelihood is None:
          if noise_variance is None:
              noise_variance = 1.0
          likelihood = gpflow.likelihoods.Gaussian(noise_variance)
      _, Y_data = data
      super().__init__(
          kernel,
          likelihood,
          mean_function,
          num_latent_gps=Y_data.shape[-1],
      )
      self.data = data_input_to_tensor(data)
  
imports: from typing import Optional
  import tensorflow
  from check_shapes import check_shapes, inherit_check_shapes
  import gpflow
  from ..None import posteriors
  from ..base import InputData, MeanAndVariance, RegressionData, TensorData
  from ..kernels import Kernel
  from ..likelihoods import Gaussian
  from ..logdensities import multivariate_normal
  from ..mean_functions import MeanFunction
  from ..utilities import add_likelihood_noise_cov, assert_params_false
  from .model import GPModel
  from .training_mixins import InternalDataTrainingLossMixin
  from .util import data_input_to_tensor
label_desc: Use image node_id 1 to create a new GPR_deprecated object from inherited base classes: GPModel, InternalDataTrainingLossMixin with example: obj = GPR_deprecated(data, kernel, mean_function, noise_variance, likelihood)