1# Copyright (c) 2012 - 2014 the GPy Austhors (see AUTHORS.txt)
2# Licensed under the BSD 3-clause license (see LICENSE.txt)
3
4import numpy as np
5from ..core import GP
6from .. import likelihoods
7from .. import kern
8from .. import util
9
10class GPCoregionalizedRegression(GP):
11    """
12    Gaussian Process model for heteroscedastic multioutput regression
13
14    This is a thin wrapper around the models.GP class, with a set of sensible defaults
15
16    :param X_list: list of input observations corresponding to each output
17    :type X_list: list of numpy arrays
18    :param Y_list: list of observed values related to the different noise models
19    :type Y_list: list of numpy arrays
20    :param kernel: a GPy kernel ** Coregionalized, defaults to RBF ** Coregionalized
21    :type kernel: None | GPy.kernel defaults
22    :likelihoods_list: a list of likelihoods, defaults to list of Gaussian likelihoods
23    :type likelihoods_list: None | a list GPy.likelihoods
24    :param name: model name
25    :type name: string
26    :param W_rank: number tuples of the corregionalization parameters 'W' (see coregionalize kernel documentation)
27    :type W_rank: integer
28    :param kernel_name: name of the kernel
29    :type kernel_name: string
30    """
31    def __init__(self, X_list, Y_list, kernel=None, likelihoods_list=None, name='GPCR',W_rank=1,kernel_name='coreg'):
32
33        #Input and Output
34        X,Y,self.output_index = util.multioutput.build_XY(X_list,Y_list)
35        Ny = len(Y_list)
36
37        #Kernel
38        if kernel is None:
39            kernel = kern.RBF(X.shape[1]-1)
40
41            kernel = util.multioutput.ICM(input_dim=X.shape[1]-1, num_outputs=Ny, kernel=kernel, W_rank=W_rank,name=kernel_name)
42
43        #Likelihood
44        likelihood = util.multioutput.build_likelihood(Y_list,self.output_index,likelihoods_list)
45
46        super(GPCoregionalizedRegression, self).__init__(X,Y,kernel,likelihood, Y_metadata={'output_index':self.output_index})
47