From 3a106fc792eb8e70e1fd078e351ba42487d3214d Mon Sep 17 00:00:00 2001
From: fukatani <nannyakannya@gmail.com>
Date: Mon, 26 Sep 2016 03:48:04 +0900
Subject: [PATCH] Fix _get_importances. (#7487)

Not to use hasattr.
---
 sklearn/feature_selection/from_model.py | 7 +++----
 sklearn/feature_selection/rfe.py        | 4 ++--
 2 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/sklearn/feature_selection/from_model.py b/sklearn/feature_selection/from_model.py
index bbd379c9d1..c8a0679247 100644
--- a/sklearn/feature_selection/from_model.py
+++ b/sklearn/feature_selection/from_model.py
@@ -14,17 +14,16 @@ from ..exceptions import NotFittedError
 
 def _get_feature_importances(estimator):
     """Retrieve or aggregate feature importances from estimator"""
-    if hasattr(estimator, "feature_importances_"):
-        importances = estimator.feature_importances_
+    importances = getattr(estimator, "feature_importances_", None)
 
-    elif hasattr(estimator, "coef_"):
+    if importances is None and hasattr(estimator, "coef_"):
         if estimator.coef_.ndim == 1:
             importances = np.abs(estimator.coef_)
 
         else:
             importances = np.sum(np.abs(estimator.coef_), axis=0)
 
-    else:
+    elif importances is None:
         raise ValueError(
             "The underlying estimator %s has no `coef_` or "
             "`feature_importances_` attribute. Either pass a fitted estimator"
diff --git a/sklearn/feature_selection/rfe.py b/sklearn/feature_selection/rfe.py
index bbe0cda392..42b7a12c0a 100644
--- a/sklearn/feature_selection/rfe.py
+++ b/sklearn/feature_selection/rfe.py
@@ -171,9 +171,9 @@ class RFE(BaseEstimator, MetaEstimatorMixin, SelectorMixin):
             # Get coefs
             if hasattr(estimator, 'coef_'):
                 coefs = estimator.coef_
-            elif hasattr(estimator, 'feature_importances_'):
-                coefs = estimator.feature_importances_
             else:
+                coefs = getattr(estimator, 'feature_importances_', None)
+            if coefs is None:
                 raise RuntimeError('The classifier does not expose '
                                    '"coef_" or "feature_importances_" '
                                    'attributes')
-- 
GitLab