code: def make_scorer(
      score_func,
      greater_is_better=True,
      needs_proba=False,
      needs_threshold=False,
      **kwargs,
  ):
      """Make a scorer from a performance metric or loss function.
  
      This factory function wraps scoring functions for use in GridSearchCV
      and cross_val_score. It takes a score function, such as ``accuracy_score``,
      ``mean_squared_error``, ``adjusted_rand_index`` or ``average_precision``
      and returns a callable that scores an estimator's output.
  
      Read more in the :ref:`User Guide <scoring>`.
  
      Parameters
      ----------
      score_func : callable,
          Score function (or loss function) with signature
          ``score_func(y, y_pred, **kwargs)``.
  
      greater_is_better : boolean, default=True
          Whether score_func is a score function (default), meaning high is good,
          or a loss function, meaning low is good. In the latter case, the
          scorer object will sign-flip the outcome of the score_func.
  
      needs_proba : boolean, default=False
          Whether score_func requires predict_proba to get probability estimates
          out of a classifier.
  
      needs_threshold : boolean, default=False
          Whether score_func takes a continuous decision certainty.
          This only works for binary classification using estimators that
          have either a decision_function or predict_proba method.
  
          For example ``average_precision`` or the area under the roc curve
          can not be computed using discrete predictions alone.
  
      **kwargs : additional arguments
          Additional parameters to be passed to score_func.
  
      Returns
      -------
      scorer : callable
          Callable object that returns a scalar score; greater is better.
  
      Examples
      --------
      >>> from sklearn.metrics import fbeta_score, make_scorer
      >>> ftwo_scorer = make_scorer(fbeta_score, beta=2)
      >>> ftwo_scorer
      make_scorer(fbeta_score, beta=2)
      >>> from sklearn.model_selection import GridSearchCV
      >>> from sklearn.svm import LinearSVC
      >>> grid = GridSearchCV(LinearSVC(), param_grid={'C': [1, 10]},
      ...                     scoring=ftwo_scorer)
      """
      sign = 1 if greater_is_better else -1
      if needs_proba and needs_threshold:
          raise ValueError(
              "Set either needs_proba or needs_threshold to True,"
              " but not both."
          )
      if needs_proba:
          cls = _ProbaScorer
      elif needs_threshold:
          cls = _ThresholdScorer
      else:
          cls = _PredictScorer
      return cls(score_func, sign, kwargs)
  
imports: from abc import ABCMeta, abstractmethod
  import warnings
  import numpy
  from .None import r2_score, median_absolute_error, mean_absolute_error, mean_squared_error, accuracy_score, f1_score, roc_auc_score, average_precision_score, precision_score, recall_score, log_loss
  from .cluster import adjusted_rand_score
  from ..utils.multiclass import type_of_target
  from ..externals import six
  from ..base import is_regressor
label_desc: Use image node_id 4 for calling a global function with example usage: make_scorer(score_func, greater_is_better, needs_proba, needs_threshold) and returns: cls