diff --git a/eli5/sklearn/permutation_importance.py b/eli5/sklearn/permutation_importance.py index ca73d76..0c68cca 100644 --- a/eli5/sklearn/permutation_importance.py +++ b/eli5/sklearn/permutation_importance.py @@ -4,7 +4,7 @@ import numpy as np from sklearn.model_selection import check_cv -from sklearn.utils.metaestimators import if_delegate_has_method +from sklearn.utils.metaestimators import available_if from sklearn.utils import check_array, check_random_state from sklearn.base import ( BaseEstimator, @@ -20,6 +20,12 @@ if pandas_available: import pandas as pd +def _estimator_has(attr): + def check(self): + return hasattr(self.wrapped_estimator_, attr) + + return check + CAVEATS_CV_NONE = """ Feature importances are computed on the same data as used for training, i.e. feature importances don't reflect importance of features for @@ -247,23 +253,23 @@ def caveats_(self): # ============= Exposed methods of a wrapped estimator: - @if_delegate_has_method(delegate='wrapped_estimator_') + @available_if(_estimator_has('score')) def score(self, X, y=None, *args, **kwargs): return self.wrapped_estimator_.score(X, y, *args, **kwargs) - @if_delegate_has_method(delegate='wrapped_estimator_') + @available_if(_estimator_has('predict')) def predict(self, X): return self.wrapped_estimator_.predict(X) - @if_delegate_has_method(delegate='wrapped_estimator_') + @available_if(_estimator_has('predict_proba')) def predict_proba(self, X): return self.wrapped_estimator_.predict_proba(X) - @if_delegate_has_method(delegate='wrapped_estimator_') + @available_if(_estimator_has('predict_log_proba')) def predict_log_proba(self, X): return self.wrapped_estimator_.predict_log_proba(X) - @if_delegate_has_method(delegate='wrapped_estimator_') + @available_if(_estimator_has('decision_function')) def decision_function(self, X): return self.wrapped_estimator_.decision_function(X)