class_docstr: Feature ranking with recursive feature elimination and cross-validated
  selection of the best number of features.
  
  Read more in the :ref:`User Guide <rfe>`.
  
  Parameters
  ----------
  estimator : object
      A supervised learning estimator with a `fit` method that updates a
      `coef_` attribute that holds the fitted parameters. Important features
      must correspond to high absolute values in the `coef_` array.
  
      For instance, this is the case for most supervised learning
      algorithms such as Support Vector Classifiers and Generalized
      Linear Models from the `svm` and `linear_model` modules.
  
  step : int or float, optional (default=1)
      If greater than or equal to 1, then `step` corresponds to the (integer)
      number of features to remove at each iteration.
      If within (0.0, 1.0), then `step` corresponds to the percentage
      (rounded down) of features to remove at each iteration.
  
  cv : int, cross-validation generator or an iterable, optional
      Determines the cross-validation splitting strategy.
      Possible inputs for cv are:
  
      - None, to use the default 3-fold cross-validation,
      - integer, to specify the number of folds.
      - An object to be used as a cross-validation generator.
      - An iterable yielding train/test splits.
  
      For integer/None inputs, if ``y`` is binary or multiclass,
      :class:`sklearn.model_selection.StratifiedKFold` is used. If the 
      estimator is a classifier or if ``y`` is neither binary nor multiclass, 
      :class:`sklearn.model_selection.KFold` is used.
  
      Refer :ref:`User Guide <cross_validation>` for the various
      cross-validation strategies that can be used here.
  
  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)``.
  
  verbose : int, default=0
      Controls verbosity of output.
  
  n_jobs : int, default 1
      Number of cores to run in parallel while fitting across folds.
      Defaults to 1 core. If `n_jobs=-1`, then number of jobs is set
      to number of cores.
  
  Attributes
  ----------
  n_features_ : int
      The number of selected features with cross-validation.
  
  support_ : array of shape [n_features]
      The mask of selected features.
  
  ranking_ : array of shape [n_features]
      The feature ranking, such that `ranking_[i]`
      corresponds to the ranking
      position of the i-th feature.
      Selected (i.e., estimated best)
      features are assigned rank 1.
  
  grid_scores_ : array of shape [n_subsets_of_features]
      The cross-validation scores such that
      ``grid_scores_[i]`` corresponds to
      the CV score of the i-th subset of features.
  
  estimator_ : object
      The external estimator fit on the reduced dataset.
  
  Notes
  -----
  The size of ``grid_scores_`` is equal to ceil((n_features - 1) / step) + 1,
  where step is the number of features removed at each iteration.
  
  Examples
  --------
  The following example shows how to retrieve the a-priori not known 5
  informative features in the Friedman #1 dataset.
  
  >>> from sklearn.datasets import make_friedman1
  >>> from sklearn.feature_selection import RFECV
  >>> from sklearn.svm import SVR
  >>> X, y = make_friedman1(n_samples=50, n_features=10, random_state=0)
  >>> estimator = SVR(kernel="linear")
  >>> selector = RFECV(estimator, step=1, cv=5)
  >>> selector = selector.fit(X, y)
  >>> selector.support_ # doctest: +NORMALIZE_WHITESPACE
  array([ True,  True,  True,  True,  True,
          False, False, False, False, False], dtype=bool)
  >>> selector.ranking_
  array([1, 1, 1, 1, 1, 6, 4, 3, 2, 5])
  
  References
  ----------
  
  .. [1] Guyon, I., Weston, J., Barnhill, S., & Vapnik, V., "Gene selection
         for cancer classification using support vector machines",
         Mach. Learn., 46(1-3), 389--422, 2002.
class_docstr_tok: ["Feature","ranking","with","recursive","feature","elimination","and","cross-validated","selection","of","the","best","number","of","features",".","Read","more","in","the",":","ref",":","`","User","Guide","<","rfe",">","`",".","Parameters","--","--","--","--","--","estimator",":","object","A","supervised","learning","estimator","with","a","`","fit","`","method","that","updates","a","`","coef_","`","attribute","that","holds","the","fitted","parameters",".","Important","features","must","correspond","to","high","absolute","values","in","the","`","coef_","`","array",".","For","instance",",","this","is","the","case","for","most","supervised","learning","algorithms","such","as","Support","Vector","Classifiers","and","Generalized","Linear","Models","from","the","`","svm","`","and","`","linear_model","`","modules",".","step",":","int","or","float",",","optional","(","default=1",")","If","greater","than","or","equal","to","1",",","then","`","step","`","corresponds","to","the","(","integer",")","number","of","features","to","remove","at","each","iteration",".","If","within","(","0.0",",","1.0",")",",","then","`","step","`","corresponds","to","the","percentage","(","rounded","down",")","of","features","to","remove","at","each","iteration",".","cv",":","int",",","cross-validation","generator","or","an","iterable",",","optional","Determines","the","cross-validation","splitting","strategy",".","Possible","inputs","for","cv","are",":","-","None",",","to","use","the","default","3-fold","cross-validation",",","-","integer",",","to","specify","the","number","of","folds",".","-","An","object","to","be","used","as","a","cross-validation","generator",".","-","An","iterable","yielding","train\/test","splits",".","For","integer\/None","inputs",",","if","``","y","``","is","binary","or","multiclass",",",":","class",":","`","sklearn.model_selection.StratifiedKFold","`","is","used",".","If","the","estimator","is","a","classifier","or","if","``","y","``","is","neither","binary","nor","multiclass",",",":","class",":","`","sklearn.model_selection.KFold","`","is","used",".","Refer",":","ref",":","`","User","Guide","<","cross_validation",">","`","for","the","various","cross-validation","strategies","that","can","be","used","here",".","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",")","``",".","verbose",":","int",",","default=0","Controls","verbosity","of","output",".","n_jobs",":","int",",","default","1","Number","of","cores","to","run","in","parallel","while","fitting","across","folds",".","Defaults","to","1","core",".","If","`","n_jobs=-1","`",",","then","number","of","jobs","is","set","to","number","of","cores",".","Attributes","--","--","--","--","--","n_features_",":","int","The","number","of","selected","features","with","cross-validation",".","support_",":","array","of","shape","[","n_features","]","The","mask","of","selected","features",".","ranking_",":","array","of","shape","[","n_features","]","The","feature","ranking",",","such","that","`","ranking_","[","i","]","`","corresponds","to","the","ranking","position","of","the","i-th","feature",".","Selected","(","i.e.",",","estimated","best",")","features","are","assigned","rank","1.","grid_scores_",":","array","of","shape","[","n_subsets_of_features","]","The","cross-validation","scores","such","that","``","grid_scores_","[","i","]","``","corresponds","to","the","CV","score","of","the","i-th","subset","of","features",".","estimator_",":","object","The","external","estimator","fit","on","the","reduced","dataset",".","Notes","--","--","-","The","size","of","``","grid_scores_","``","is","equal","to","ceil","(","(","n_features","-","1",")","\/","step",")","+","1",",","where","step","is","the","number","of","features","removed","at","each","iteration",".","Examples","--","--","--","--","The","following","example","shows","how","to","retrieve","the","a-priori","not","known","5","informative","features","in","the","Friedman","#","1","dataset",".",">",">",">","from","sklearn.datasets","import","make_friedman1",">",">",">","from","sklearn.feature_selection","import","RFECV",">",">",">","from","sklearn.svm","import","SVR",">",">",">","X",",","y","=","make_friedman1","(","n_samples=50",",","n_features=10",",","random_state=0",")",">",">",">","estimator","=","SVR","(","kernel=","''","linear","''",")",">",">",">","selector","=","RFECV","(","estimator",",","step=1",",","cv=5",")",">",">",">","selector","=","selector.fit","(","X",",","y",")",">",">",">","selector.support_","#","doctest",":","+NORMALIZE_WHITESPACE","array","(","[","True",",","True",",","True",",","True",",","True",",","False",",","False",",","False",",","False",",","False","]",",","dtype=bool",")",">",">",">","selector.ranking_","array","(","[","1",",","1",",","1",",","1",",","1",",","6",",","4",",","3",",","2",",","5","]",")","References","--","--","--","--","--","..","[","1","]","Guyon",",","I.",",","Weston",",","J.",",","Barnhill",",","S.",",","&","Vapnik",",","V.",",","``","Gene","selection","for","cancer","classification","using","support","vector","machines","''",",","Mach",".","Learn.",",","46","(","1-3",")",",","389","--","422",",","2002","."]
docstr: Fit the RFE model and automatically tune the number of selected
     features.
  
  Parameters
  ----------
  X : {array-like, sparse matrix}, shape = [n_samples, n_features]
      Training vector, where `n_samples` is the number of samples and
      `n_features` is the total number of features.
  
  y : array-like, shape = [n_samples]
      Target values (integers for classification, real numbers for
      regression).
docstr_tok: ["Fit","the","RFE","model","and","automatically","tune","the","number","of","selected","features",".","Parameters","--","--","--","--","--","X",":","{","array-like",",","sparse","matrix","}",",","shape","=","[","n_samples",",","n_features","]","Training","vector",",","where","`","n_samples","`","is","the","number","of","samples","and","`","n_features","`","is","the","total","number","of","features",".","y",":","array-like",",","shape","=","[","n_samples","]","Target","values","(","integers","for","classification",",","real","numbers","for","regression",")","."]
code: def fit(self, X, y):
      """Fit the RFE model and automatically tune the number of selected
         features.
  
      Parameters
      ----------
      X : {array-like, sparse matrix}, shape = [n_samples, n_features]
          Training vector, where `n_samples` is the number of samples and
          `n_features` is the total number of features.
  
      y : array-like, shape = [n_samples]
          Target values (integers for classification, real numbers for
          regression).
      """
      X, y = check_X_y(X, y, "csr")
  
      # Initialization
      cv = check_cv(self.cv, y, is_classifier(self.estimator))
      scorer = check_scoring(self.estimator, scoring=self.scoring)
      n_features = X.shape[1]
      n_features_to_select = 1
  
      if 0.0 < self.step < 1.0:
          step = int(max(1, self.step * n_features))
      else:
          step = int(self.step)
      if step <= 0:
          raise ValueError("Step must be >0")
  
      rfe = RFE(
          estimator=self.estimator,
          n_features_to_select=n_features_to_select,
          step=self.step,
          verbose=self.verbose,
      )
  
      # Determine the number of subsets of features by fitting across
      # the train folds and choosing the "features_to_select" parameter
      # that gives the least averaged error across all folds.
  
      # Note that joblib raises a non-picklable error for bound methods
      # even if n_jobs is set to 1 with the default multiprocessing
      # backend.
      # This branching is done so that to
      # make sure that user code that sets n_jobs to 1
      # and provides bound methods as scorers is not broken with the
      # addition of n_jobs parameter in version 0.18.
  
      if self.n_jobs == 1:
          parallel, func = list, _rfe_single_fit
      else:
          (
              parallel,
              func,
          ) = Parallel(
              n_jobs=self.n_jobs
          ), delayed(_rfe_single_fit)
  
      scores = parallel(
          func(rfe, self.estimator, X, y, train, test, scorer)
          for train, test in cv.split(X, y)
      )
  
      scores = np.sum(scores, axis=0)
      n_features_to_select = max(
          n_features - (np.argmax(scores) * step), n_features_to_select
      )
  
      # Re-execute an elimination with best_k over the whole set
      rfe = RFE(
          estimator=self.estimator,
          n_features_to_select=n_features_to_select,
          step=self.step,
      )
  
      rfe.fit(X, y)
  
      # Set final attributes
      self.support_ = rfe.support_
      self.n_features_ = rfe.n_features_
      self.ranking_ = rfe.ranking_
      self.estimator_ = clone(self.estimator)
      self.estimator_.fit(self.transform(X), y)
  
      # Fixing a normalization error, n is equal to get_n_splits(X, y) - 1
      # here, the scores are normalized by get_n_splits(X, y)
      self.grid_scores_ = scores[::-1] / cv.get_n_splits(X, y)
      return self
  
imports: import numpy
  from ..utils import check_X_y, safe_sqr
  from ..utils.metaestimators import if_delegate_has_method
  from ..base import BaseEstimator
  from ..base import MetaEstimatorMixin
  from ..base import clone
  from ..base import is_classifier
  from ..externals.joblib import Parallel, delayed
  from ..model_selection import check_cv
  from ..model_selection._validation import _safe_split, _score
  from ..metrics.scorer import check_scoring
  from .base import SelectorMixin
label_desc: Use image node_id 2 for calling the RFECV obj's underlying member method code with example usage: obj.fit(X, y) and returns: self