From e6e8840ac1e0654cd041cd186df0b0e6f971c2da Mon Sep 17 00:00:00 2001 From: Ricardo Date: Fri, 14 Nov 2014 21:24:06 +0000 Subject: [PATCH] New file, sparse one vs all classification --- GPy/models/__init__.py | 1 + .../one_vs_all_sparse_classification.py | 40 +++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 GPy/models/one_vs_all_sparse_classification.py diff --git a/GPy/models/__init__.py b/GPy/models/__init__.py index 6f0d5459..c6abb5de 100644 --- a/GPy/models/__init__.py +++ b/GPy/models/__init__.py @@ -20,3 +20,4 @@ from ss_mrd import SSMRD from gp_kronecker_gaussian_regression import GPKroneckerGaussianRegression from gp_var_gauss import GPVariationalGaussianApproximation from one_vs_all_classification import OneVsAllClassification +from one_vs_all_sparse_classification import OneVsAllSparseClassification diff --git a/GPy/models/one_vs_all_sparse_classification.py b/GPy/models/one_vs_all_sparse_classification.py new file mode 100644 index 00000000..3db382ec --- /dev/null +++ b/GPy/models/one_vs_all_sparse_classification.py @@ -0,0 +1,40 @@ +# Copyright (c) 2013, the GPy Authors (see AUTHORS.txt) +# Licensed under the BSD 3-clause license (see LICENSE.txt) + +import numpy as np +import GPy + +class OneVsAllSparseClassification(object): + """ + Gaussian Process classification: One vs all + + This is a thin wrapper around the models.GPClassification class, with a set of sensible defaults + + :param X: input observations + :param Y: observed values, can be None if likelihood is not None + :param kernel: a GPy kernel, defaults to rbf + + .. Note:: Multiple independent outputs are not allowed + + """ + + def __init__(self, X, Y, kernel=None,Y_metadata=None,messages=True): + if kernel is None: + kernel = GPy.kern.RBF(X.shape[1]) + + likelihood = GPy.likelihoods.Bernoulli() + + assert Y.shape[1] == 1, 'Y should be 1 column vector' + + labels = np.unique(Y.flatten()) + + self.results = {} + for yj in labels: + print 'Class %s vs all' %yj + Ynew = Y.copy() + Ynew[Y.flatten()!=yj] = 0 + Ynew[Y.flatten()==yj] = 1 + + m = GPy.models.SparseGPClassification(X,Ynew,kernel=kernel,Y_metadata=Y_metadata) + m.optimize(messages=messages) + self.results[yj] = m.predict(X)[0]