class_docstr: CrossValidatorModel contains the model with the highest average cross-validation
  metric across folds and uses this model to transform input data. CrossValidatorModel
  also tracks the metrics for each param map evaluated.
  
  .. versionadded:: 3.5.0
class_docstr_tok: ["CrossValidatorModel","contains","the","model","with","the","highest","average","cross-validation","metric","across","folds","and","uses","this","model","to","transform","input","data",".","CrossValidatorModel","also","tracks","the","metrics","for","each","param","map","evaluated",".","..","versionadded",":",":","3.5.0"]
docstr: Creates a copy of this instance with a randomly generated uid
  and some extra params. This copies the underlying bestModel,
  creates a deep copy of the embedded paramMap, and
  copies the embedded and extra parameters over.
  It does not copy the extra Params into the subModels.
  
  .. versionadded:: 3.5.0
  
  Parameters
  ----------
  extra : dict, optional
      Extra parameters to copy to the new instance
  
  Returns
  -------
  :py:class:`CrossValidatorModel`
      Copy of this instance
code: def copy(
      self, extra: Optional["ParamMap"] = None
  ) -> "CrossValidatorModel":
      """
      Creates a copy of this instance with a randomly generated uid
      and some extra params. This copies the underlying bestModel,
      creates a deep copy of the embedded paramMap, and
      copies the embedded and extra parameters over.
      It does not copy the extra Params into the subModels.
  
      .. versionadded:: 3.5.0
  
      Parameters
      ----------
      extra : dict, optional
          Extra parameters to copy to the new instance
  
      Returns
      -------
      :py:class:`CrossValidatorModel`
          Copy of this instance
      """
      if extra is None:
          extra = dict()
      bestModel = self.bestModel.copy(extra)
      avgMetrics = list(self.avgMetrics)
      stdMetrics = list(self.stdMetrics)
  
      return self._copyValues(
          CrossValidatorModel(
              bestModel, avgMetrics=avgMetrics, stdMetrics=stdMetrics
          ),
          extra=extra,
      )
  
imports: from multiprocessing.pool import ThreadPool
  from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union, cast, TYPE_CHECKING
  import numpy
  import pandas
  from pyspark import keyword_only, since, inheritable_thread_target
  from pyspark.ml.connect import Estimator, Model
  from pyspark.ml.connect.base import Evaluator
  from pyspark.ml.connect.io_utils import MetaAlgorithmReadWrite, ParamsReadWrite
  from pyspark.ml.param import Params, Param, TypeConverters
  from pyspark.ml.param.shared import HasParallelism, HasSeed
  from pyspark.sql.functions import col, lit, rand
  from pyspark.sql.dataframe import DataFrame
  from pyspark.sql import SparkSession
  from pyspark.sql.utils import is_remote
label_desc: Use image node_id 3 for calling the CrossValidatorModel obj's underlying member method code with example usage: obj.copy(extra) and returns: self