Assuming outputs with , each is expressed as: where are scalar coefficients and the independent functions have zero mean and covariance cov if and 0 otherwise. The cross covariance between any two functions and can then be written as: where the functions , with and have zero mean and covariance cov if and . But is given by . Thus the kernel can now be expressed as where each is known as a coregionalization matrix. Therefore, the kernel derived from LMC is a sum of the products of two covariance functions, one that models the dependence between the outputs, independently of the input vector (the coregionalization matrix ), and one that models the input dependence, independently of (the covariance function ). Intrinsic coregionalization model (ICM) The ICM is a simplified version of the LMC, with . ICM assumes that the elements of the coregionalization matrix can be written as , for some suitable coefficients . With this form for : where In this case, the coefficients and the kernel matrix for multiple outputs becomes . ICM is much more restrictive than the LMC since it assumes that each basic covariance contributes equally to the construction of the autocovariances and cross covariances for the outputs. However, the computations required for the inference are greatly simplified. Semiparametric latent factor model (SLFM) Another simplified version of the LMC is the semiparametric latent factor model (SLFM), which corresponds to setting (instead of as in ICM). Thus each latent function has its own covariance. Non-separable While simple, the structure of separable kernels can be too limiting for some problems. Notable examples of non-separable kernels in the regularization literature include: Matrix-valued exponentiated quadratic (EQ) kernels designed to estimate divergence-free or curl-free vector fields (or a convex combination of the two) Kernels defined by transformations In the Bayesian perspective, LMC produces a separable kernel because the output functions evaluated at a point only depend on the values of the latent functions at . A non-trivial way to mix the latent functions is by convolving a base process with a smoothing kernel. If the base process is a Gaussian process, the convolved process is Gaussian as well. We can therefore exploit convolutions to construct covariance functions. This method of producing non-separable kernels is known as process convolution. Process convolutions were introduced for multiple outputs in the machine learning community as "dependent Gaussian processes". Implementation When implementing an algorithm