'Average of the decision functions of the base classifiers.
Parameters
X : {array-like, sparse matrix} of shape = [n_samples, n_features]
The training input samples. Sparse matrices are accepted only if
they are supported by the base estimator.
Returns
score : array, shape = [n_samples, k]
The decision function of the input samples. The columns correspond
to the classes in sorted order, as they appear in the attribute
``classes_``. Regression and binary classification are special
cases with ``k == 1``, otherwise ``k==n_classes``.'

@if_delegate_has_method(delegate='base_estimator')
def decision_function(self, X):

    check_is_fitted(self, 'classes_')
    X = check_array(X, accept_sparse=['csr', 'csc'])
    if (self.n_features_ != X.shape[1]):
        raise ValueError('Number    of    features    of    the    model    must    match    the    input.    Model    n_features    is    {0}    and    input    n_features    is    {1}    '.format(self.n_features_, X.shape[1]))
    (n_jobs, n_estimators, starts) = _partition_estimators(self.n_estimators, self.n_jobs)
    all_decisions = Parallel(n_jobs=n_jobs, verbose=self.verbose)((delayed(_parallel_decision_function)(self.estimators_[starts[i]:starts[(i + 1)]], self.estimators_features_[starts[i]:starts[(i + 1)]], X) for i in range(n_jobs)))
    decisions = (sum(all_decisions) / self.n_estimators)
    return decisions
