From a4eab75a0d5f298830fd73cf6f411d9de9cb02da Mon Sep 17 00:00:00 2001 From: Benjamin Bengfort Date: Tue, 10 Mar 2020 09:35:03 -0400 Subject: [PATCH] initial implementation of #1047 --- .../test_rfecv/test_numpy_integration.png | Bin 13775 -> 19649 bytes .../test_rfecv/test_pandas_integration.png | Bin 13775 -> 19649 bytes .../test_rfecv/test_quick_method.png | Bin 21777 -> 12679 bytes .../test_rfecv/test_rfecv_step.png | Bin 22163 -> 22162 bytes yellowbrick/model_selection/rfecv.py | 217 ++++++++++++++---- 5 files changed, 168 insertions(+), 49 deletions(-) diff --git a/tests/baseline_images/test_model_selection/test_rfecv/test_numpy_integration.png b/tests/baseline_images/test_model_selection/test_rfecv/test_numpy_integration.png index d7fd4325b9413c345ef3c0f51689091d6b6c7fc7..9d3f5ef1143276960ec5f7c9a6e957dfbb1ef1c0 100644 GIT binary patch literal 19649 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 literal 21777 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 diff --git a/tests/baseline_images/test_model_selection/test_rfecv/test_rfecv_step.png b/tests/baseline_images/test_model_selection/test_rfecv/test_rfecv_step.png index 81ee594dec2f684e9161fc4d1f1641e4a475ccbd..23173eb4ff7e86f10f45bc9c44aed75f2717ba2c 100644 GIT binary patch delta 31 ncmbQdmT}Tr#tEK`78AYXS&j7!^^7LwOR%VRFZ9~j%@GCwppXgH delta 32 ocmbQVmT~f0#tEK`mJ_|?*%XZQjPy(<=1H);b=k3YV;4sl0IpmL^8f$< diff --git a/yellowbrick/model_selection/rfecv.py b/yellowbrick/model_selection/rfecv.py index 1386e4f5d..8235b03ce 100644 --- a/yellowbrick/model_selection/rfecv.py +++ b/yellowbrick/model_selection/rfecv.py @@ -22,16 +22,28 @@ from yellowbrick.base import ModelVisualizer from yellowbrick.exceptions import YellowbrickValueError +# TODO: does this require a minimum sklearn version? from sklearn.utils import check_X_y -from sklearn.feature_selection import RFE -from sklearn.model_selection import cross_val_score +from sklearn.metrics import check_scoring +from sklearn.model_selection import check_cv +from sklearn.base import is_classifier, clone +from sklearn.feature_selection._rfe import RFECV as skRFECV +from sklearn.feature_selection._rfe import RFE, _rfe_single_fit + +try: + # TODO: do we need to make joblib an optional dependency? + from joblib import Parallel, delayed, effective_n_jobs +except ImportError: + Parallel, delayed = None, None + + def effective_n_jobs(*args, **kwargs): + return 1 ########################################################################## ## Recursive Feature Elimination ########################################################################## - class RFECV(ModelVisualizer): """ Recursive Feature Elimination, Cross-Validated (RFECV) feature selection. @@ -69,6 +81,11 @@ class RFECV(ModelVisualizer): then step corresponds to the percentage (rounded down) of features to remove at each iteration. + min_features_to_select : int (default=1) + The minimum number of features to be selected. This number of features will + always be scored, even if the difference between the original feature count and + min_features_to_select isn’t divisible by step. + groups : array-like, with shape (n_samples,), optional Group labels for the samples used while splitting the dataset into train/test set. @@ -91,6 +108,13 @@ class RFECV(ModelVisualizer): ``scorer(estimator, X, y)``. See scikit-learn model evaluation documentation for names of possible metrics. + verbose : int, default: 0 + Controls verbosity of output. + + n_jobs : int or None, optional (default=None) + Number of cores to run in parallel while fitting across folds. None means 1 + unless in a joblib.parallel_backend context. -1 means using all processors. + kwargs : dict Keyword arguments that are passed to the base class and may influence the visualization as defined in other Visualizers. @@ -111,6 +135,10 @@ class RFECV(ModelVisualizer): The cross-validation scores for each subset of features and splits in the cross-validation strategy. + 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. + rfe_estimator_ : sklearn.feature_selection.RFE A fitted RFE estimator wrapping the original estimator. All estimator functions such as ``predict()`` and ``score()`` are passed through to @@ -138,14 +166,15 @@ class RFECV(ModelVisualizer): """ def __init__( - self, model, ax=None, step=1, groups=None, cv=None, scoring=None, **kwargs + self, model, ax=None, step=1, groups=None, cv=None, scoring=None, min_features_to_select=1, **kwargs ): # Initialize the model visualizer super(RFECV, self).__init__(model, ax=ax, **kwargs) # Set parameters - self.set_params(step=step, groups=groups, cv=cv, scoring=scoring) + # TODO: update these parameters + self.set_params(step=step, groups=groups, cv=cv, scoring=scoring, min_features_to_select=min_features_to_select) def fit(self, X, y=None): """ @@ -166,51 +195,22 @@ def fit(self, X, y=None): self : instance Returns the instance of the RFECV visualizer. """ - X, y = check_X_y(X, y, "csr") - n_features = X.shape[1] - - # This check is kind of unnecessary since RFE will do it, but it's - # nice to get it out of the way ASAP and raise a meaningful error. - if 0.0 < self.step < 1.0: - step = int(max(1, self.step * n_features)) - else: - step = int(self.step) + # Create and fit the RFECV model + self.rfe_estimator_ = _RFECV(self.estimator) + self.rfe_estimator_.set_params(**self.get_rfecv_params()) + self.rfe_estimator_.fit(X, y, groups=self.groups) - if step <= 0: - raise YellowbrickValueError("step must be >0") - - # Create the RFE model - rfe = RFE(self.estimator, step=step) - self.n_feature_subsets_ = np.arange(1, n_features + step, step) - - # Create the cross validation params - # TODO: handle random state - cv_params = {key: self.get_params()[key] for key in ("groups", "cv", "scoring")} - - # Perform cross-validation for each feature subset - scores = [] - for n_features_to_select in self.n_feature_subsets_: - rfe.set_params(n_features_to_select=n_features_to_select) - scores.append(cross_val_score(rfe, X, y, **cv_params)) - - # Convert scores to array - self.cv_scores_ = np.array(scores) - - # Find the best RFE model - bestidx = self.cv_scores_.mean(axis=1).argmax() - self.n_features_ = self.n_feature_subsets_[bestidx] - - # Fit the final RFE model for the number of features - self.rfe_estimator_ = rfe - self.rfe_estimator_.set_params(n_features_to_select=self.n_features_) - self.rfe_estimator_.fit(X, y) + # HACK: this is wrong and needs to be fixed + n_features = X.shape[1] + step = int(self.step) + self.n_feature_subsets_ = np.arange(1, np.ceil((n_features - self.min_features_to_select) / step) + 1) - # Rewrap the visualizer to use the rfe estimator - self._wrapped = self.rfe_estimator_ + # Modify the internal estimator to be the final fitted estimator + self._wrapped = self.rfe_estimator_.estimator_ # Hoist the RFE params to the visualizer - self.support_ = self.rfe_estimator_.support_ - self.ranking_ = self.rfe_estimator_.ranking_ + for attr in ("cv_scores_", "n_features_", "support_", "ranking_", "grid_scores_"): + setattr(self, attr, getattr(self.rfe_estimator_, attr)) self.draw() return self @@ -256,13 +256,29 @@ def finalize(self, **kwargs): self.ax.set_xlabel("Number of Features Selected") self.ax.set_ylabel("Score") + def get_rfecv_params(self): + params = self.get_params() + for param in ("model", "ax", "kwargs", "groups"): + if param in params: + del params[param] + return params + ########################################################################## ## Quick Methods ########################################################################## - -def rfecv(model, X, y, ax=None, step=1, groups=None, cv=None, scoring=None, show=True, **kwargs): +# TODO: update the quick method params +def rfecv( + model, X, y, + ax=None, + step=1, + groups=None, + cv=None, + scoring=None, + show=True, + **kwargs +): """ Performs recursive feature elimination with cross-validation to determine an optimal number of features for a model. Visualizes the feature subsets @@ -335,7 +351,9 @@ def rfecv(model, X, y, ax=None, step=1, groups=None, cv=None, scoring=None, show Returns the fitted, finalized visualizer. """ # Initialize the visualizer - oz = RFECV(model, ax=ax, step=step, groups=groups, cv=cv, scoring=scoring, show=show) + oz = RFECV( + model, ax=ax, step=step, groups=groups, cv=cv, scoring=scoring, show=show + ) # Fit and show the visualizer oz.fit(X, y) @@ -347,3 +365,104 @@ def rfecv(model, X, y, ax=None, step=1, groups=None, cv=None, scoring=None, show # Return the visualizer object return oz + + +########################################################################## +## _RFECV +########################################################################## + +class _RFECV(skRFECV): + """ + A minor reimplementation of the :class:`~sklearn.feature_selection.RFECV` to store + the cv scores so that we can compute the mean and standard deviation of the RFECV + for visualization purposes. + """ + + def fit(self, X, y, groups=None): + """ + Fit the RFE model and automatically tune the number of selected features. + + Parameters + ---------- + X : {array-like, sparse matrix} of 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 of shape (n_samples,) + Target values (integers for classification, real numbers for + regression). + groups : array-like of shape (n_samples,) or None + Group labels for the samples used while splitting the dataset into + train/test set. Only used in conjunction with a "Group" :term:`cv` + instance (e.g., :class:`~sklearn.model_selection.GroupKFold`). + """ + X, y = check_X_y(X, y, "csr", ensure_min_features=2, + force_all_finite=False) + + # Initialization + cv = check_cv(self.cv, y, is_classifier(self.estimator)) + scorer = check_scoring(self.estimator, scoring=self.scoring) + n_features = X.shape[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 YellowbrickValueError("step must be >0") + + # Build an RFE object, which will evaluate and score each possible + # feature count, down to self.min_features_to_select + rfe = RFE(estimator=self.estimator, + n_features_to_select=self.min_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 effective_n_jobs(self.n_jobs) == 1: + parallel, func = list, _rfe_single_fit + else: + parallel = Parallel(n_jobs=self.n_jobs) + func = delayed(_rfe_single_fit) + + scores = parallel( + func(rfe, self.estimator, X, y, train, test, scorer) + for train, test in cv.split(X, y, groups)) + + # THIS IS THE NEW ADDITION + self.cv_scores_ = np.asarray(scores) + + scores = np.sum(scores, axis=0) + scores_rev = scores[::-1] + argmax_idx = len(scores) - np.argmax(scores_rev) - 1 + n_features_to_select = max( + n_features - (argmax_idx * step), + self.min_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, + verbose=self.verbose) + + 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, groups) + return self