Based on Nguyen et al. Collaborative Multi-output Gaussian Processes, 2014
Observed data:
y1 = sin(x), y2 = -sin(x)
Prediction model:
Training the model and predicting y1(x) and y2(x), source code:
val data: DenseMatrix[Double] = loadToyModelDataIncomplete()
val x = data(::, 0)
val y = data(::, 1 to 2)
val z = x(0 until x.size by 10) // inducing points for u and v inducing variables
val initialToyModel = createCogpToyModel(x, y, z)
val trainedToyModel = cogpTrain(x, y, initialToyModel, iterNum = 500)
val predictedY:DenseMatrix[UnivariateGaussian] = cogpPredict(x, trainedToyModel)
Prediction plots