docs: def cross_val_score(estimator, X, y=None, scoring=None, cv=None, n_jobs=1,
                      verbose=0, fit_params=None, pre_dispatch='2*n_jobs'):
      """Evaluate a score by cross-validation
  
      Parameters
      ----------
      estimator : estimator object implementing 'fit'
          The object to use to fit the data.
  
      X : array-like
          The data to fit. Can be, for example a list, or an array at least 2d.
  
      y : array-like, optional, default: None
          The target variable to try to predict in the case of
          supervised learning.
  
      scoring : string, callable or None, optional, default: None
          A string (see model evaluation documentation) or
          a scorer callable object / function with signature
          ``scorer(estimator, X, y)``.
  
      cv : cross-validation generator or int, optional, default: None
          A cross-validation generator to use. If int, determines
          the number of folds in StratifiedKFold if y is binary
          or multiclass and estimator is a classifier, or the number
          of folds in KFold otherwise. If None, it is equivalent to cv=3.
  
      n_jobs : integer, optional
          The number of CPUs to use to do the computation. -1 means
          'all CPUs'.
  
      verbose : integer, optional
          The verbosity level.
  
      fit_params : dict, optional
          Parameters to pass to the fit method of the estimator.
  
      pre_dispatch : int, or string, optional
          Controls the number of jobs that get dispatched during parallel
          execution. Reducing this number can be useful to avoid an
          explosion of memory consumption when more jobs get dispatched
          than CPUs can process. This parameter can be:
  
              - None, in which case all the jobs are immediately
                created and spawned. Use this for lightweight and
                fast-running jobs, to avoid delays due to on-demand
                spawning of the jobs
  
              - An int, giving the exact number of total jobs that are
                spawned
  
              - A string, giving an expression as a function of n_jobs,
                as in '2*n_jobs'
  
      Returns
      -------
      scores : array of float, shape=(len(list(cv)),)
          Array of scores of the estimator for each run of the cross validation.
      """
      X, y = indexable(X, y)
  
      cv = _check_cv(cv, X, y, classifier=is_classifier(estimator))
      scorer = check_scoring(estimator, scoring=scoring)
      # We clone the estimator to make sure that all the folds are
      # independent, and that it is pickle-able.
      parallel = Parallel(n_jobs=n_jobs, verbose=verbose,
                          pre_dispatch=pre_dispatch)
      scores = parallel(delayed(_fit_and_score)(clone(estimator), X, y, scorer,
                                                train, test, verbose, None,
                                                fit_params)
                        for train, test in cv)
      return np.array(scores)[:, 0]