code: def explained_variance_score(
      y_true, y_pred, sample_weight=None, multioutput="uniform_average"
  ):
      """Explained variance regression score function
  
      Best possible score is 1.0, lower values are worse.
  
      Read more in the :ref:`User Guide <explained_variance_score>`.
  
      Parameters
      ----------
      y_true : array-like of shape = (n_samples) or (n_samples, n_outputs)
          Ground truth (correct) target values.
  
      y_pred : array-like of shape = (n_samples) or (n_samples, n_outputs)
          Estimated target values.
  
      sample_weight : array-like of shape = (n_samples), optional
          Sample weights.
  
      multioutput : string in ['raw_values', 'uniform_average', \
                  'variance_weighted'] or array-like of shape (n_outputs)
          Defines aggregating of multiple output scores.
          Array-like value defines weights used to average scores.
  
          'raw_values' :
              Returns a full set of scores in case of multioutput input.
  
          'uniform_average' :
              Scores of all outputs are averaged with uniform weight.
  
          'variance_weighted' :
              Scores of all outputs are averaged, weighted by the variances
              of each individual output.
  
      Returns
      -------
      score : float or ndarray of floats
          The explained variance or ndarray if 'multioutput' is 'raw_values'.
  
      Notes
      -----
      This is not a symmetric function.
  
      Examples
      --------
      >>> from sklearn.metrics import explained_variance_score
      >>> y_true = [3, -0.5, 2, 7]
      >>> y_pred = [2.5, 0.0, 2, 8]
      >>> explained_variance_score(y_true, y_pred)  # doctest: +ELLIPSIS
      0.957...
      >>> y_true = [[0.5, 1], [-1, 1], [7, -6]]
      >>> y_pred = [[0, 2], [-1, 2], [8, -5]]
      >>> explained_variance_score(y_true, y_pred, multioutput='uniform_average')
      ... # doctest: +ELLIPSIS
      0.983...
  
      """
      y_type, y_true, y_pred, multioutput = _check_reg_targets(
          y_true, y_pred, multioutput
      )
  
      y_diff_avg = np.average(
          y_true - y_pred, weights=sample_weight, axis=0
      )
      numerator = np.average(
          (y_true - y_pred - y_diff_avg) ** 2,
          weights=sample_weight,
          axis=0,
      )
  
      y_true_avg = np.average(y_true, weights=sample_weight, axis=0)
      denominator = np.average(
          (y_true - y_true_avg) ** 2, weights=sample_weight, axis=0
      )
  
      nonzero_numerator = numerator != 0
      nonzero_denominator = denominator != 0
      valid_score = nonzero_numerator & nonzero_denominator
      output_scores = np.ones(y_true.shape[1])
  
      output_scores[valid_score] = 1 - (
          numerator[valid_score] / denominator[valid_score]
      )
      output_scores[nonzero_numerator & ~nonzero_denominator] = 0.0
      if isinstance(multioutput, string_types):
          if multioutput == "raw_values":
              # return scores individually
              return output_scores
          elif multioutput == "uniform_average":
              # passing to np.average() None as weights results is uniform mean
              avg_weights = None
          elif multioutput == "variance_weighted":
              avg_weights = denominator
      else:
          avg_weights = multioutput
  
      return np.average(output_scores, weights=avg_weights)
  
file_path: catboost/contrib/python/scikit-learn/py2/sklearn/metrics/regression.py
imports: from __future__ import division
  import numpy
  from ..utils.validation import check_array, check_consistent_length
  from ..utils.validation import column_or_1d
  from ..externals.six import string_types
  import warnings
label_desc: Use image node_id 5 for calling a global function with example usage: explained_variance_score(y_true, y_pred, sample_weight, multioutput) and returns: np, output_scores