class_docstr: Meta-estimator for parallel predict and transform.
  
  Parameters
  ----------
  estimator : Estimator
      The underlying estimator that is fit.
  
  scoring : string or callable, optional
      A single string (see :ref:`scoring_parameter`) or a callable
      (see :ref:`scoring`) to evaluate the predictions on the test set.
  
      For evaluating multiple metrics, either give a list of (unique)
      strings or a dict with names as keys and callables as values.
  
      NOTE that when using custom scorers, each scorer should return a
      single value. Metric functions returning a list/array of values
      can be wrapped into multiple scorers that return one value each.
  
      See :ref:`multimetric_grid_search` for an example.
  
      .. warning::
  
         If None, the estimator's default scorer (if available) is used.
         Most scikit-learn estimators will convert large Dask arrays to
         a single NumPy array, which may exhaust the memory of your worker.
         You probably want to always specify `scoring`.
  
  predict_meta: pd.Series, pd.DataFrame, np.array deafult: None(infer)
      An empty ``pd.Series``, ``pd.DataFrame``, ``np.array`` that matches the output
      type of the estimators ``predict`` call.
      This meta is necessary for  for some estimators to work with
      ``dask.dataframe`` and ``dask.array``
  
  predict_proba_meta: pd.Series, pd.DataFrame, np.array deafult: None(infer)
      An empty ``pd.Series``, ``pd.DataFrame``, ``np.array`` that matches the output
      type of the estimators ``predict_proba`` call.
      This meta is necessary for  for some estimators to work with
      ``dask.dataframe`` and ``dask.array``
  
  transform_meta: pd.Series, pd.DataFrame, np.array deafult: None(infer)
      An empty ``pd.Series``, ``pd.DataFrame``, ``np.array`` that matches the output
      type of the estimators ``transform`` call.
      This meta is necessary for  for some estimators to work with
      ``dask.dataframe`` and ``dask.array``
  
  Notes
  -----
  
  .. warning::
  
     This class is not appropriate for parallel or distributed *training*
     on large datasets. For that, see :class:`Incremental`, which provides
     distributed (but sequential) training. If you're doing distributed
     hyperparameter optimization on larger-than-memory datasets, see
     :class:`dask_ml.model_selection.IncrementalSearch`.
  
  This estimator does not parallelize the training step. This simply calls
  the underlying estimators's ``fit`` method called and copies over the
  learned attributes to ``self`` afterwards.
  
  It is helpful for situations where your training dataset is relatively
  small (fits on a single machine) but you need to predict or transform
  a much larger dataset. ``predict``, ``predict_proba`` and ``transform``
  will be done in parallel (potentially distributed if you've connected
  to a ``dask.distributed.Client``).
  
  Note that many scikit-learn estimators already predict and transform in
  parallel. This meta-estimator may still be useful in those cases when your
  dataset is larger than memory, as the distributed scheduler will ensure the
  data isn't all read into memory at once.
  
  See Also
  --------
  Incremental
  dask_ml.model_selection.IncrementalSearch
  
  Examples
  --------
  >>> from sklearn.ensemble import GradientBoostingClassifier
  >>> import sklearn.datasets
  >>> import dask_ml.datasets
  
  Make a small 1,000 sample 2 training dataset and fit normally.
  
  >>> X, y = sklearn.datasets.make_classification(n_samples=1000,
  ...                                             random_state=0)
  >>> clf = ParallelPostFit(estimator=GradientBoostingClassifier(),
  ...                       scoring='accuracy')
  >>> clf.fit(X, y)
  ParallelPostFit(estimator=GradientBoostingClassifier(...))
  
  >>> clf.classes_
  array([0, 1])
  
  Transform and predict return dask outputs for dask inputs.
  
  >>> X_big, y_big = dask_ml.datasets.make_classification(n_samples=100000,
                                                          random_state=0)
  
  >>> clf.predict(X)
  dask.array<predict, shape=(10000,), dtype=int64, chunksize=(1000,)>
  
  Which can be computed in parallel.
  
  >>> clf.predict_proba(X).compute()
  array([[0.99141094, 0.00858906],
         [0.93178389, 0.06821611],
         [0.99129105, 0.00870895],
         ...,
         [0.97996652, 0.02003348],
         [0.98087444, 0.01912556],
         [0.99407016, 0.00592984]])
class_docstr_tok: ["Meta-estimator","for","parallel","predict","and","transform",".","Parameters","--","--","--","--","--","estimator",":","Estimator","The","underlying","estimator","that","is","fit",".","scoring",":","string","or","callable",",","optional","A","single","string","(","see",":","ref",":","`","scoring_parameter","`",")","or","a","callable","(","see",":","ref",":","`","scoring","`",")","to","evaluate","the","predictions","on","the","test","set",".","For","evaluating","multiple","metrics",",","either","give","a","list","of","(","unique",")","strings","or","a","dict","with","names","as","keys","and","callables","as","values",".","NOTE","that","when","using","custom","scorers",",","each","scorer","should","return","a","single","value",".","Metric","functions","returning","a","list\/array","of","values","can","be","wrapped","into","multiple","scorers","that","return","one","value","each",".","See",":","ref",":","`","multimetric_grid_search","`","for","an","example",".","..","warning",":",":","If","None",",","the","estimator","'s","default","scorer","(","if","available",")","is","used",".","Most","scikit-learn","estimators","will","convert","large","Dask","arrays","to","a","single","NumPy","array",",","which","may","exhaust","the","memory","of","your","worker",".","You","probably","want","to","always","specify","`","scoring","`",".","predict_meta",":","pd.Series",",","pd.DataFrame",",","np.array","deafult",":","None","(","infer",")","An","empty","``","pd.Series","``",",","``","pd.DataFrame","``",",","``","np.array","``","that","matches","the","output","type","of","the","estimators","``","predict","``","call",".","This","meta","is","necessary","for","for","some","estimators","to","work","with","``","dask.dataframe","``","and","``","dask.array","``","predict_proba_meta",":","pd.Series",",","pd.DataFrame",",","np.array","deafult",":","None","(","infer",")","An","empty","``","pd.Series","``",",","``","pd.DataFrame","``",",","``","np.array","``","that","matches","the","output","type","of","the","estimators","``","predict_proba","``","call",".","This","meta","is","necessary","for","for","some","estimators","to","work","with","``","dask.dataframe","``","and","``","dask.array","``","transform_meta",":","pd.Series",",","pd.DataFrame",",","np.array","deafult",":","None","(","infer",")","An","empty","``","pd.Series","``",",","``","pd.DataFrame","``",",","``","np.array","``","that","matches","the","output","type","of","the","estimators","``","transform","``","call",".","This","meta","is","necessary","for","for","some","estimators","to","work","with","``","dask.dataframe","``","and","``","dask.array","``","Notes","--","--","-","..","warning",":",":","This","class","is","not","appropriate","for","parallel","or","distributed","*","training","*","on","large","datasets",".","For","that",",","see",":","class",":","`","Incremental","`",",","which","provides","distributed","(","but","sequential",")","training",".","If","you","'re","doing","distributed","hyperparameter","optimization","on","larger-than-memory","datasets",",","see",":","class",":","`","dask_ml.model_selection.IncrementalSearch","`",".","This","estimator","does","not","parallelize","the","training","step",".","This","simply","calls","the","underlying","estimators","'s","``","fit","``","method","called","and","copies","over","the","learned","attributes","to","``","self","``","afterwards",".","It","is","helpful","for","situations","where","your","training","dataset","is","relatively","small","(","fits","on","a","single","machine",")","but","you","need","to","predict","or","transform","a","much","larger","dataset",".","``","predict","``",",","``","predict_proba","``","and","``","transform","``","will","be","done","in","parallel","(","potentially","distributed","if","you","'ve","connected","to","a","``","dask.distributed.Client","``",")",".","Note","that","many","scikit-learn","estimators","already","predict","and","transform","in","parallel",".","This","meta-estimator","may","still","be","useful","in","those","cases","when","your","dataset","is","larger","than","memory",",","as","the","distributed","scheduler","will","ensure","the","data","is","n't","all","read","into","memory","at","once",".","See","Also","--","--","--","--","Incremental","dask_ml.model_selection.IncrementalSearch","Examples","--","--","--","--",">",">",">","from","sklearn.ensemble","import","GradientBoostingClassifier",">",">",">","import","sklearn.datasets",">",">",">","import","dask_ml.datasets","Make","a","small","1,000","sample","2","training","dataset","and","fit","normally",".",">",">",">","X",",","y","=","sklearn.datasets.make_classification","(","n_samples=1000",",","...","random_state=0",")",">",">",">","clf","=","ParallelPostFit","(","estimator=GradientBoostingClassifier","(",")",",","...","scoring='accuracy","'",")",">",">",">","clf.fit","(","X",",","y",")","ParallelPostFit","(","estimator=GradientBoostingClassifier","(","...",")",")",">",">",">","clf.classes_","array","(","[","0",",","1","]",")","Transform","and","predict","return","dask","outputs","for","dask","inputs",".",">",">",">","X_big",",","y_big","=","dask_ml.datasets.make_classification","(","n_samples=100000",",","random_state=0",")",">",">",">","clf.predict","(","X",")","dask.array","<","predict",",","shape=","(","10000",",",")",",","dtype=int64",",","chunksize=","(","1000",",",")",">","Which","can","be","computed","in","parallel",".",">",">",">","clf.predict_proba","(","X",")",".compute","(",")","array","(","[","[","0.99141094",",","0.00858906","]",",","[","0.93178389",",","0.06821611","]",",","[","0.99129105",",","0.00870895","]",",","...",",","[","0.97996652",",","0.02003348","]",",","[","0.98087444",",","0.01912556","]",",","[","0.99407016",",","0.00592984","]","]",")"]
docstr: Fit the underlying estimator.
  
  Parameters
  ----------
  X, y : array-like
  **kwargs
      Additional fit-kwargs for the underlying estimator.
  
  Returns
  -------
  self : object
docstr_tok: ["Fit","the","underlying","estimator",".","Parameters","--","--","--","--","--","X",",","y",":","array-like","*","*","kwargs","Additional","fit-kwargs","for","the","underlying","estimator",".","Returns","--","--","--","-","self",":","object"]
code: def fit(self, X, y=None, **kwargs):
      """Fit the underlying estimator.
  
      Parameters
      ----------
      X, y : array-like
      **kwargs
          Additional fit-kwargs for the underlying estimator.
  
      Returns
      -------
      self : object
      """
      logger.info("Starting fit")
      with _timer("fit", _logger=logger):
          result = self.estimator.fit(X, y, **kwargs)
  
      # Copy over learned attributes
      copy_learned_attributes(result, self)
      copy_learned_attributes(result, self.estimator)
      return self
  
imports: import logging
  import warnings
  import dask.array
  import dask.dataframe
  import dask.delayed
  import numpy
  import sklearn.base
  import sklearn.metrics
  from sklearn.utils.validation import check_is_fitted
  from dask_ml.utils import _timer
  from ._partial import fit
  from ._utils import copy_learned_attributes
  from .metrics import check_scoring, get_scorer
label_desc: Use image node_id 4 for calling the ParallelPostFit obj's underlying member method code with example usage: obj.fit(X, y) and returns: self