Gaussian Processes for Regression:
A Quick Introduction

M. Ebden, August 2008
Comments to mebden@gmail.com

 

1 Motivation

Figure 1 illustrates a typical example of a prediction problem: given some noisy observations of a dependent variable at certain values of the independent variable x, what is our best estimate of the dependent variable at a new value, x?

If we expect the underlying function f(x) to be linear, and can make some assumptions about the input data, we might use a least-squares method to fit a straight line (linear regression). Moreover, if we suspect f(x) may also be quadratic, cubic, or even nonpolynomial, we can use the principles of model selection to choose among the various possibilities.

Gaussian process regression (GPR) is an even finer approach than this. Rather than claiming f(x) relates to some specific models (e.g. f(x)=mx+c), a Gaussian process can represent f(x) obliquely, but rigorously, by letting the data ‘speak’ more clearly for themselves. GPR is still a form of supervised learning, but the training data are harnessed in a subtler way.

As such, GPR is a less ‘parametric’ tool. However, it’s not completely free-form, and if we’re unwilling to make even basic assumptions about f(x), then more general techniques should be considered, including those underpinned by the principle of maximum entropy; Chapter 6 of Sivia and Skilling (2006) offers an introduction.

Refer to caption
Figure 1: Given six noisy data points (error bars are indicated with vertical lines), we are interested in estimating a seventh at x=0.2.

2 Definition of a Gaussian Process

Gaussian processes (GPs) extend multivariate Gaussian distributions to infinite dimensionality. Formally, a Gaussian process generates data located throughout some domain such that any finite subset of the range follows a multivariate Gaussian distribution. Now, the n observations in an arbitrary data set, 𝐲={y1,,yn}, can always be imagined as a single point sampled from some multivariate (n-variate) Gaussian distribution, after enough thought. Hence, working backwards, this data set can be partnered with a GP. Thus GPs are as universal as they are simple.

Very often, it’s assumed that the mean of this partner GP is zero everywhere. What relates one observation to another in such cases is just the covariance function, k(x,x). A popular choice is the ‘squared exponential’,

k(x,x)=σf2exp[(xx)22l2], (1)

where the maximum allowable covariance is defined as σf2 — this should be high for functions which cover a broad range on the y axis. If xx, then k(x,x) approaches this maximum, meaning f(x) is nearly perfectly correlated with f(x). This is good: for our function to look smooth, neighbours must be alike. Now if x is distant from x, we have instead k(x,x)0, i.e. the two points cannot ‘see’ each other. So, for example, during interpolation at new x values, distant observations will have negligible effect. How much effect this separation has will depend on the length parameter, l, so there is much flexibility built into (1).

Not quite enough flexibility though: the data are often noisy as well, from measurement errors and so on. Each observation y can be thought of as related to an underlying function f(x) through a Gaussian noise model:

y=f(x)+𝒩(0,σn2), (2)

something which should look familiar to those who’ve done regression before. Regression is the search for f(x). Purely for simplicity of exposition in the next page, we take the novel approach of folding the noise into k(x,x), by writing

k(x,x)=σf2exp[(xx)22l2]+σn2δ(x,x), (3)

where δ(x,x) is the Kronecker delta function. (When most people use Gaussian processes, they keep σn separate from k(x,x). However, our redefinition of k(x,x) is equally suitable for working with problems of the sort posed in Figure 1. So, given n observations 𝐲, our objective is to predict y, not the ‘actual’ f; their expected values are identical according to (2), but their variances differ owing to the observational noise process. e.g. in Figure 1, the expected value of y, and of f, is the dot at x.)

To prepare for GPR, we calculate the covariance function, (3), among all possible combinations of these points, summarizing our findings in three matrices:

K=[k(x1,x1)k(x1,x2)k(x1,xn)k(x2,x1)k(x2,x2)k(x2,xn)k(xn,x1)k(xn,x2)k(xn,xn)] (4)
K=[k(x,x1)k(x,x2)k(x,xn)]K=k(x,x). (5)

Confirm for yourself that the diagonal elements of K are σf2+σn2, and that its extreme off-diagonal elements tend to zero when x spans a large enough domain.

3 How to Regress using Gaussian Processes

Since the key assumption in GP modelling is that our data can be represented as a sample from a multivariate Gaussian distribution, we have that

[𝐲y]𝒩(𝟎,[KKTKK]), (6)

where T indicates matrix transposition. We are of course interested in the conditional probability p(y|𝐲): “given the data, how likely is a certain prediction for y?”. As explained more slowly in the Appendix, the probability follows a Gaussian distribution:

y|𝐲𝒩(KK1𝐲,KKK1KT). (7)

Our best estimate for y is the mean of this distribution:

y¯=KK1𝐲, (8)

and the uncertainty in our estimate is captured in its variance:

var(y)=KKK1KT. (9)

We’re now ready to tackle the data in Figure 1.

  1. 1.

    There are n=6 observations 𝐲, at

    𝐱=[1.501.000.750.400.250.00].

    We know σn=0.3 from the error bars. With judicious choices of σf and l (more on this later), we have enough to calculate a covariance matrix using (4):

    K=[1.701.421.210.870.720.511.421.701.561.341.210.971.211.561.701.511.421.210.871.341.511.701.591.480.721.211.421.591.701.560.510.971.211.481.561.70].

    From (5) we also have K=1.70 and

    K=[0.380.791.031.351.461.58].
  2. 2.

    From (8) and (9), y¯=0.95 and var(y)=0.21.

  3. 3.

    Figure 1 shows a data point with a question mark underneath, representing the estimation of the dependent variable at x=0.2.

We can repeat the above procedure for various other points spread over some portion of the x axis, as shown in Figure 2. (In fact, equivalently, we could avoid the repetition by performing the above procedure once with suitably larger K and K matrices. In this case, since there are 1,000 test points spread over the x axis, K would be of size 1,000 × 1,000.) Rather than plotting simple error bars, we’ve decided to plot y¯±1.96var(y), giving a 95% confidence interval.

Refer to caption
Figure 2: The solid line indicates an estimation of y for 1,000 values of x. Pointwise 95% confidence intervals are shaded.

4 GPR in the Real World

The reliability of our regression is dependent on how well we select the covariance function. Clearly if its parameters — call them 𝜽={l,σf,σn} — are not chosen sensibly, the result is nonsense. Our maximum a posteriori estimate of 𝜽 occurs when p(𝜽|𝐱,𝐲) is at its greatest. Bayes’ theorem tells us that, assuming we have little prior knowledge about what 𝜽 should be, this corresponds to maximizing logp(𝐲|𝐱,𝜽), given by

logp(𝐲|𝐱,𝜽)=12𝐲TK1𝐲12log|K|n2log2π. (10)

Simply run your favourite multivariate optimization algorithm (e.g. conjugate gradients, Nelder-Mead simplex, etc.) on this equation and you’ve found a pretty good choice for 𝜽; in our example, l=1 and σf=1.27.

It’s only “pretty good” because, of course, Thomas Bayes is rolling in his grave. Why commend just one answer for 𝜽, when you can integrate everything over the many different possible choices for 𝜽? Chapter 5 of Rasmussen and Williams (2006) presents the equations necessary in this case.

Finally, if you feel you’ve grasped the toy problem in Figure 2, the next two examples handle more complicated cases. Figure 3(a), in addition to a long-term downward trend, has some fluctuations, so we might use a more sophisticated covariance function:

k(x,x)=σf12exp[(xx)22l12]+σf22exp[(xx)22l22]+σn2δ(x,x). (11)

The first term takes into account the small vicissitudes of the dependent variable, and the second term has a longer length parameter (l26l1) to represent its long-term trend. Covariance functions can be grown in this way ad infinitum, to suit the complexity of your particular data.

Refer to caption
Figure 3:  Estimation of y (solid line) for a function with (a) short-term and long-term dynamics, and (b) long-term dynamics and a periodic element. Observations are shown as crosses.

The function looks as if it might contain a periodic element, but it’s difficult to be sure. Let’s consider another function, which we’re told has a periodic element. The solid line in Figure 3(b) was regressed with the following covariance function:

k(x,x)=σf2exp[(xx)22l2]+exp{2sin2[νπ(xx)]}+σn2δ(x,x). (12)

The first term represents the hill-like trend over the long term, and the second term gives periodicity with frequency ν. This is the first time we’ve encountered a case where x and x can be distant and yet still ‘see’ each other (that is, k(x,x)0 for xx).

What if the dependent variable has other dynamics which, a priori, you expect to appear? There’s no limit to how complicated k(x,x) can be, provided K is positive definite. Chapter 4 of Rasmussen and Williams (2006) offers a good outline of the range of covariance functions you should keep in your toolkit.

“Hang on a minute,” you ask, “isn’t choosing a covariance function from a toolkit a lot like choosing a model type, such as linear versus cubic — which we discussed at the outset?” Well, there are indeed similarities. In fact, there is no way to perform regression without imposing at least a modicum of structure on the data set; such is the nature of generative modelling. However, it’s worth repeating that Gaussian processes do allow the data to speak very clearly. For example, there exists excellent theoretical justification for the use of (1) in many settings (Rasmussen and Williams (2006), Section 4.3). You will still want to investigate carefully which covariance functions are appropriate for your data set. Essentially, choosing among alternative functions is a way of reflecting various forms of prior knowledge about the physical process under investigation.

5 Discussion

We’ve presented a brief outline of the mathematics of GPR, but practical implementation of the above ideas requires the solution of a few algorithmic hurdles as opposed to those of data analysis. If you aren’t a good computer programmer, then the code for Figures 1 and 2 is at github.com/mebden/GPtutorial, and more general code can be found at www.gaussianprocess.org/gpml.

We’ve merely scratched the surface of a powerful technique (MacKay, 1998). First, although the focus has been on one-dimensional inputs, it’s simple to accept those of higher dimension. Whereas x would then change from a scalar to a vector, k(x,x) would remain a scalar and so the maths overall would be virtually unchanged. Second, the zero vector representing the mean of the multivariate Gaussian distribution in (6) can be replaced with functions of x. Third, in addition to their use in regression, GPs are applicable to integration, global optimization, mixture-of-experts models, unsupervised learning models, and more — see Chapter 9 of Rasmussen and Williams (2006). The next tutorial will focus on their use in classification.

References

  • MacKay (1998) MacKay, D. (1998). In C.M. Bishop (Ed.), Neural networks and machine learning. (NATO ASI Series, Series F, Computer and Systems Sciences, Vol. 168, pp. 133-166.) Dordrecht: Kluwer Academic Press.
  • Rasmussen and Williams (2006) Rasmussen, C. and C. Williams (2006). Gaussian Processes for Machine Learning. MIT Press.
  • Sivia and Skilling (2006) Sivia, D. and J. Skilling (2006). Data Analysis: A Bayesian Tutorial (second ed.). Oxford Science Publications.

Appendix

Imagine a data sample 𝐝 taken from some multivariate Gaussian distribution with zero mean and a covariance given by matrix D. Now decompose 𝐝 arbitrarily into two consecutive subvectors 𝐚 and 𝐛 — in other words, writing 𝐝𝒩(𝟎,D) would be the same as writing

[𝐚𝐛]𝒩(𝟎,[ACTCB]), (13)

where A, B, and C are the corresponding bits and pieces that make up D.

Interestingly, the conditional distribution of 𝐛 given 𝐚 is itself Gaussian-distributed. If the covariance matrix D were diagonal or even block diagonal, then knowing 𝐚 wouldn’t tell us anything about 𝐛: specifically, 𝐛|𝐚𝒩(𝟎,B). On the other hand, if C were nonzero, then some matrix algebra leads us to

𝐛|𝐚𝒩(CA1𝐚,BCA1CT). (14)

The mean, CA1𝐚, is known as the ‘matrix of regression coefficients’, and the variance, BCA1CT, is the ‘Schur complement of A in D’.

In summary, if we know some of 𝐝, we can use that to inform our estimate of what the rest of 𝐝 might be, thanks to the revealing off-diagonal elements of D.

 

Gaussian Processes for Classification:
A Quick Introduction

M. Ebden, August 2008
Prerequisite reading: Gaussian Processes for Regression

 

1 Overview

As mentioned in the previous document, GPs can be applied to problems other than regression. For example, if the output of a GP is squashed onto the range [0,1], it can represent the probability of a data point belonging to one of say two types, and voilà, we can ascertain classifications. This is the subject of the current document.

The big difference between GPR and GPC is how the output data, 𝐲, are linked to the underlying function outputs, 𝐟. They are no longer connected simply via a noise process as in (2) in the previous document, but are instead now discrete: say y=1 precisely for one class and y=1 for the other. In principle, we could try fitting a GP that produces an output of approximately 1 for some values of x and approximately 1 for others, simulating this discretization. Instead, we interpose the GP between the data and a squashing function; then, classification of a new data point x involves two steps instead of one:

  1. 1.

    Evaluate a ‘latent function’ f which models qualitatively how the likelihood of one class versus the other changes over the x axis. This is the GP.

  2. 2.

    Squash the output of this latent function onto [0,1] using any sigmoidal function, π(f)=prob(y=1|f).

Writing these two steps schematically,

data, x GP latent function, f|x sigmoid class probability, π(f).

The next section will walk you through more slowly how such a classifier operates. Section 3 explains how to train the classifier, so perhaps we’re presenting things in reverse order! Section 4 handles classification when there are more than two classes.

Before we get started, a quick note on π(f). Although other forms will do, here we will prescribe it to be the cumulative Gaussian distribution, Φ(f). This S-shaped function satisfies our needs, mapping high f into π(f)1, and low f into π(f)0.

A second quick note, revisiting (6) and (7) in the first document: confirm for yourself that, if there were no noise (σn=0), the two equations could be rewritten as

[𝐟f]𝒩(𝟎,[KKTKK]) (1)

and

f|𝐟𝒩(KK1𝐟,KKK1KT). (2)

2 Using the Classifier

Suppose we’ve trained a classifier from n input data, 𝐱, and their corresponding expert-labelled output data, 𝐲. And suppose that in the process we formed some GP outputs 𝐟 corresponding to these data, which have some uncertainty but mean values given by 𝐟^. We’re now ready to input a new data point, x, in the left side of our schematic, in order to determine at the other end the probability π of its class membership.

In the first step, finding the probability p(f|𝐟) is similar to GPR, i.e. we adapt (2):

p(f|𝐟)=𝒩(KK1𝐟^,KK(K)1KT). (3)

(K will be explained soon, but for now consider it to be very similar to K.) In the second step, we squash f to find the probability of class membership, π=π(f)=Φ(f). The expected value is

π¯=π(f)p(f|𝐟)𝑑f. (4)

This is the integral of a cumulative Gaussian times a Gaussian, which can be solved analytically. By Section 3.9 of Rasmussen and Williams (2006), the solution is:

π¯=Φ(f¯1+var(f)). (5)

An example is depicted in Figure 1.

Refer to caption
Figure 1: (a) Toy classification dataset, where circles and crosses indicate class membership of the input (training) data 𝐲, at locations 𝐱. 𝐲 is 1 for one class and 1 for another, but for illustrative purposes we pretend y=0 instead of 1 in this figure. The solid line is the (mean) probability π¯=prob(y=1|x), i.e. the ‘answer’ to our problem after successfully performing GPC. (b) The corresponding distribution of the latent function f, not constrained to lie between 0 and 1.

3 Training the GP in the Classifier

Our objective now is to find 𝐟^ and K, so that we know everything about the GP producing (3), the first step of the classifier. The second step of the classifier does not require training as it’s a fixed sigmoidal function.

Among the many GPs which could be partnered with our data set, naturally we’d like to compare their usefulness quantitatively. Considering the outputs 𝐟 of a certain GP, how likely they are to be appropriate for the training data can be decomposed using Bayes’ theorem:

p(𝐟|𝐱,𝐲)=p(𝐲|𝐟)p(𝐟|𝐱)p(𝐲|𝐱). (6)

Let’s focus on the two factors in the numerator. Assuming the data set is i.i.d.,

p(𝐲|𝐟)=i=1np(yi|fi). (7)

Dropping the subscripts in the product, p(y|f) is informed by our sigmoid function, π(f). Specifically, p(y=1|f) is π(f) by definition, and to complete the picture, p(y=1|f)=1π(f). A terse way of combining these two cases is to write p(y|f)=Φ(yf).

The second factor in the numerator is p(𝐟|𝐱). This is related to the output of the first step of our schematic drawing, but first we’re interested in the value of p(𝐟|𝐱) which maximizes the posterior probability p(𝐟|𝐱,𝐲). This occurs when the derivative of (6) with respect to 𝐟 is zero, or equivalently and more simply, when the derivative of its logarithm is zero. Doing this, and using the same logic that produced (10) in the previous document, we find that

𝐟^=Klogp(𝐲|𝐟^), (8)

where 𝐟^ is the best 𝐟 for our problem. Unfortunately, 𝐟^ appears on both sides of the equation, so we make an initial guess (zero is fine) and go through a few iterations. The answer to (8) can be used directly in (3), so we’ve found one of the two quantities we seek therein.

The variance of 𝐟 is given by the negative second derivative of the logarithm of (6), which turns out to be (K1+W)1, with W=logp(𝐲|𝐟). Making a Laplace approximation, we pretend p(𝐟|𝐱,𝐲) is Gaussian distributed, i.e.

p(𝐟|𝐱,𝐲)q(𝐟|𝐱,𝐲)=𝒩(𝐟^,(K1+W)1). (9)

(This assumption is occasionally inaccurate, so if it yields poor classifications, better ways of characterizing the uncertainty in 𝐟 should be considered, for example via expectation propagation.)

Now for a subtle point. The fact that 𝐟 can vary means that using (2) directly is inappropriate: in particular, its mean is correct but its variance no longer tells the whole story. This is why we use the adapted version, (3), with K instead of K. Since the varying quantity in (2), 𝐟, is being multiplied by KK1, we add KK1cov(𝐟)K1KT to the variance in (2). Simplification leads to (3), in which K=K+W1.

With the GP now completely specified, we’re ready to use the classifier as described in the previous section.

GPC in the Real World
As with GPR, the reliability of our classification is dependent on how well we select the covariance function in the GP in our first step.
The parameters are 𝜽={l,σf}, one fewer now because σn=0. However, as usual, 𝜽 is optimized by maximizing p(𝐲|𝐱,𝜽), or (omitting 𝜽 on the righthand side of the equation),

p(𝐲|𝐱,𝜽)=p(𝐲|𝐟)p(𝐟|𝐱)𝑑𝐟. (10)

This can be simplified, using a Laplace approximation, to yield

p(𝐲|𝐱,𝜽)=12𝐟^TK1𝐟^+logp(𝐲|𝐟^)12log(|K||K1+W|). (11)

This is the equation to run your favourite optimizer on, as performed in GPR.

4 Multi-Class GPC

We’ve described binary classification, where the number of possible classes, C, is just two. In the case of C>2 classes, one approach is to fit an f for each class. In the first of the two steps of classification, our GP values are concatenated as

𝐟=(f11,,fn1,f12,,fn2,,f1C,,fnC)T. (12)

Let 𝐲 be a vector of the same length as 𝐟 which, for each i=1,,n, is 1 for the class which is the label and 0 for the other C1 entries. Let K grow to being block diagonal in the matrices K1,,KC. So the first change we see for C>2 is a lengthening of the GP. Section 3.5 of Rasmussen and Williams (2006) offers hints on keeping the computations manageable.

The second change is that the (merely one-dimensional) cumulative Gaussian distribution is no longer sufficient to describe the squashing function in our classifier; instead we use the softmax function. For the ith data point,

p(yic|𝐟i)=πic=exp(fic)cexp(fic) (13)

where 𝐟i is a nonconsecutive subset of 𝐟, viz. 𝐟i={fi1,fi2,,fiC}. We can summarize our results with 𝝅={π11,,πn1,π12,,πn2,,π1C,,πnC}.

Now that we’ve presented the two big changes needed to go from binary- to multi-class GPC, we continue as before. Setting to zero the derivative of the logarithm of the components in (6), we replace (8) with

𝐟^=K(𝐲𝝅^). (14)

The corresponding variance is (K1+W)1 as before, but now W=diag(𝝅)ΠΠT, where Π is a Cn×n matrix obtained by stacking vertically the diagonal matrices diag(𝝅c), if 𝝅c is the subvector of 𝝅 pertaining to class c.

With these quantities estimated, we have enough to generalize (3) to

p(fc|𝐟)=𝒩(Kc(Kc)1𝐟^c,diag(K)(Kc)T(Kc+(Wc)1)1(Kc)T), (15)

where fc, Kc, and Wc represent the class-relevant information only. Finally, (11) is replaced with

p(𝐲|𝐱,𝜽)=12𝐟^TK1𝐟^+𝐲T𝐟^i=1nlog[c=1Cexpf^ic]12log(|K||K1+W|). (16)

We won’t present an example of multi-class GPC, but hopefully you get the idea.

5 Discussion

As with GPR, classification can be extended to accept x values with multiple dimensions, while keeping most of the mathematics unchanged. Other possible extensions include using the expectation propagation method in lieu of the Laplace approximation as mentioned previously, putting confidence intervals on the classification probabilities, calculating the derivatives of (16) to aid the optimizer, or using the variational Gaussian process classifiers described in MacKay (1998), to name but four extensions.

Second, we repeat the Bayesian call from the previous document to integrate over a range of possible covariance function parameters. This should be done regardless of how much prior knowledge is available — see for example Chapter 5 of Sivia and Skilling (2006) on how to choose priors in the most opaque situations.

Third, we’ve again spared you a few practical algorithmic details; computer code is available at www.gaussianprocess.org/gpml, with examples.

Acknowledgments

Thanks are due to Prof Stephen Roberts and members of the Pattern Analysis Research Group, as well as the ALADDIN project (www.aladdinproject.org).

References

  • MacKay (1998) MacKay, D. (1998). In C.M. Bishop (Ed.), Neural networks and machine learning. (NATO ASI Series, Series F, Computer and Systems Sciences, Vol. 168, pp. 133-166.) Dordrecht: Kluwer Academic Press.
  • Rasmussen and Williams (2006) Rasmussen, C. and C. Williams (2006). Gaussian Processes for Machine Learning. MIT Press.
  • Sivia and Skilling (2006) Sivia, D. and J. Skilling (2006). Data Analysis: A Bayesian Tutorial (second ed.). Oxford Science Publications.

 

Gaussian Processes for Dimensionality Reduction:
A Quick Introduction

M. Ebden, August 2015

Prerequisite reading: Gaussian processes for regression

 

Suppose you wanted to learn a low-dimensional representation of a dataset for ease of interpretation, sort of like how your shadow is a simplified, two-dimensional representation of a three-dimensional object. Let the original data be matrix 𝐘 with n rows (observations) of d dimensions each, and let the new representation be 𝐗 with n rows of q dimensions each (q<d).

To learn this low-dimensional representation, we’ll assume that for the ith dimension of 𝐘 the n elements in 𝐲:,i are a sample from a Gaussian process based on the low-dimensional space. Specifically, we’ll use a zero-mean Gaussian process, 𝒢𝒫(𝟎n×1,k(𝐱,𝐱)), keeping the same model for each dimension of 𝐘. We’ll choose for k() the squared exponential kernel (a.ka. RBF kernel) in order to ensure that points close in 𝐗 will be close in 𝐘. Renaming the noise variance from σn2 (in the first report) to 1/β, the kernel is:

k(𝐱,𝐱)=σ2exp[|𝐱𝐱|22l2]+δ(x,x)β.

The covariance matrix 𝐊 for this GP is constructed as per (4) in the first report, and we have no need for a 𝐊 or 𝐊 from (5) because there are no points in 𝐘 to predict. The tuple of kernel parameters this time is 𝜽={σ,l,β}.

We’ll further assume that the GPs behind each of the d dimensions have been sampled independently. Therefore, the likelihood of the observed values in 𝐘 is the product of d independent GPs:

p(𝐘|𝐗,𝜽)=i=1dexp[12𝐲:,iT𝐊1𝐲:,i](2π)n/2|𝐊|1/2.

Then we can adjust 𝐗 and 𝜽 to maximize this likelihood. If we were only adjusting 𝐗, it would be akin to determining the shadow which is most likely to correspond to your body’s shape. Because we’re adjusting 𝜽 as well, imagine manipulating the light source and the surface for the shadow to appear on as well.

Figure 1 gives an example outcome of the most likely 𝐗 for a certain 𝐘, with n=17, d=2, and q=1. 𝐘 was preprocessed to have zero mean and the same variance in each dimension. Using an optimizer based on scaled conjugate gradients, the optimal 𝜽 and 𝐗 were then found. The former is {σ,l,β}={1.05,3.3×104,93} and the latter is given in Figure 1(b). In this example, 𝐗 is more than just a ‘shadow’ (simple projection) of 𝐘: the above method of dimensionality reduction is powerful enough to have learned that the points in the left curve in Figure 1(a) should be grouped together while the points in the right curve form a separate group; no simple lamplight projection can achieve this. The price we pay for this flexibility is in the high number of parameters being fit: the total here is 3+17×1=20, i.e. 𝜽 plus the one-dimensional values in 𝐗. Usually 𝐗 are referred to as latent variables rather than parameters, and our overall setup is called the ‘Gaussian process latent variable model’ (GP-LVM). The technique was first presented by Neil Lawrence in 2004; he examined a set of oil-flow data in which n=1000 and d=12, which we reduce to q=2 in Figure 2.

This tutorial on the GP-LVM is provided by Mind Foundry, a technology spin-out from the University of Oxford.

Refer to caption
Figure 1: (a) Seventeen data points, 𝐘, each of two dimensions.
d (b) A one-dimensional projection, 𝐗, of those points.
Refer to caption
Figure 2: Although the GP-LVM algorithm uses unsupervised learning, the three classes of data in this originally 12-D dataset generally occupy different regions.