```

GP:  Bayesian modelling using Gaussian processes.

The 'gp' programs implement Bayesian models for regression and
classification tasks that are based on Gaussian process priors over
functions.  For details, see Carl Rasmussen's thesis, Evaluation of
Gaussian Process and Other Methods for Non-linear Regression, and my
technical report on "Monte Carlo implementation of Gaussian process
models for Bayesian regression and classification".

A Gaussian process specifies a distribution over functions from some
number of inputs to some number of real outputs.  (For the Gaussian
processes implemented here, the functions for different outputs are
independent.)  In the Bayesian models based on these Gaussian
processes, the functions in question are used to define a model for
the target attributes in training and test cases given the values of
nthe input attributes in these cases.  The Gaussian process gives the
prior distribution over these functions.

A Gaussian process is specified by giving its covariance function,
which is expressed in terms of "hyperparameters", which are themselves
given prior distributions.  (The means for the Gaussian processes
implemented here are always zero.)  To see how the form of the
covariance function and the priors for the hyperparameters are
specified, see gp-spec.doc.

The models based on these Gaussian processes are described using a
general scheme that is also used for neural network models, see
model-spec.doc for details.  Survival models are not allowed.  The
conditional distribution of the targets is specified in terms of
values derived from the outputs of the Gaussian process.  For "real",
"binary", and "count" models, the number of values needed is the same
as the number of targets.  These values define the conditional means
for "real" targets, the logit of the probability of class 1 for
"binary" targets, and the log of the Poisson mean for "count" targets.
For "class" models, there must be only one target, and the number of
values needed is the same as the number of classes.  These values are
equal to the logs of the probabilities of the various classes, plus an
arbitrary constant.

The values used to define the target distributions can simply be equal
to the outputs of the Gaussian process, if the number of outputs
matches the number of required values.  Alternatively, there can be
more outputs than required values, provided the number of outputs is
an integer multiple of the number of required values.  These outputs
are taken to define the required values by taking the log of the sum
of the exponentials of all outputs in a group associated with that
value.  Specifically, if the model requires k values, v_0,...,v_{k-1}
(eg, for the conditional means of k real targets), and there are kq
outputs of the Gaussian process, o_0, ... o_{kq-1}, then v_i will be
computed as

v_i = log (exp(v_{iq}) + exp(v_{iq+1} + ... + exp(v_{iq+q-1}) )