'Fit Gaussian process classification model
Parameters
X : array-like, shape = (n_samples, n_features)
Training data
y : array-like, shape = (n_samples,)
Target values, must be binary
Returns
self : returns an instance of self.'

def fit(self, X, y):

    (X, y) = check_X_y(X, y, multi_output=False)
    self.base_estimator_ = _BinaryGaussianProcessClassifierLaplace(self.kernel, self.optimizer, self.n_restarts_optimizer, self.max_iter_predict, self.warm_start, self.copy_X_train, self.random_state)
    self.classes_ = np.unique(y)
    self.n_classes_ = self.classes_.size
    if (self.n_classes_ == 1):
        raise ValueError(('GaussianProcessClassifier    requires    2    or    more    distinct    classes.    Only    class    %s    present.' % self.classes_[0]))
    if (self.n_classes_ > 2):
        if (self.multi_class == 'one_vs_rest'):
            self.base_estimator_ = OneVsRestClassifier(self.base_estimator_, n_jobs=self.n_jobs)
        elif (self.multi_class == 'one_vs_one'):
            self.base_estimator_ = OneVsOneClassifier(self.base_estimator_, n_jobs=self.n_jobs)
        else:
            raise ValueError(('Unknown    multi-class    mode    %s' % self.multi_class))
    self.base_estimator_.fit(X, y)
    if (self.n_classes_ > 2):
        self.log_marginal_likelihood_value_ = np.mean([estimator.log_marginal_likelihood() for estimator in self.base_estimator_.estimators_])
    else:
        self.log_marginal_likelihood_value_ = self.base_estimator_.log_marginal_likelihood()
    return self
