yellowbrick icon indicating copy to clipboard operation
yellowbrick copied to clipboard

'RandomForestClassifier' object has no attribute 'absolute'

Open leokaplun opened this issue 3 years ago • 1 comments

Describe the bug I'm running the code from the Feature Importance example on the website.

Here is the code I used:

X = pd.DataFrame({'BILL_AMT3': {0: 689, 1: 2682, 2: 13559, 3: 49291, 4: 35835},
 'BILL_AMT5': {0: 0, 1: 3455, 2: 14948, 3: 28959, 4: 19146},
 'AGE': {0: 24, 1: 26, 2: 34, 3: 37, 4: 57},
 'LIMIT_BAL': {0: 20000, 1: 120000, 2: 90000, 3: 50000, 4: 50000},
 'PAY_AMT1': {0: 0, 1: 0, 2: 1518, 3: 2000, 4: 2000},
 'MARRIAGE': {0: 1, 1: 2, 2: 2, 3: 1, 4: 1}})
y = pd.Series({0: 1, 1: 1, 2: 0, 3: 0, 4: 0})


from sklearn.ensemble import RandomForestClassifier
from yellowbrick.model_selection import FeatureImportances
model = RandomForestClassifier(n_estimators=10)
viz = FeatureImportances(model,is_fitted=True)
viz.fit(X, y)
viz.show()

Traceback

I---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Input In [96], in <cell line: 13>()
     11 from yellowbrick.model_selection import FeatureImportances
     12 model = RandomForestClassifier(n_estimators=10)
---> 13 viz = FeatureImportances(model,is_fitted=True)
     14 viz.fit(X, y)
     15 viz.show()

File ~/opt/anaconda3/lib/python3.8/site-packages/yellowbrick/model_selection/importances.py:139, in FeatureImportances.__init__(self, model, ax, labels, relative, absolute, xlabel, stack, colors, colormap, is_fitted, **kwargs)
    134 super(FeatureImportances, self).__init__(
    135     model, ax=ax, is_fitted=is_fitted, **kwargs
    136 )
    138 # Data Parameters
--> 139 self.set_params(
    140     labels=labels,
    141     relative=relative,
    142     absolute=absolute,
    143     xlabel=xlabel,
    144     stack=stack,
    145     colors=colors,
    146     colormap=colormap,
    147 )

File ~/opt/anaconda3/lib/python3.8/site-packages/sklearn/base.py:239, in BaseEstimator.set_params(self, **params)
    236 if not params:
    237     # Simple optimization to gain speed (inspect is slow)
    238     return self
--> 239 valid_params = self.get_params(deep=True)
    241 nested_params = defaultdict(dict)  # grouped by prefix
    242 for key, value in params.items():

File ~/opt/anaconda3/lib/python3.8/site-packages/sklearn/base.py:211, in BaseEstimator.get_params(self, deep)
    209 out = dict()
    210 for key in self._get_param_names():
--> 211     value = getattr(self, key)
    212     if deep and hasattr(value, "get_params"):
    213         deep_items = value.get_params().items()

File ~/opt/anaconda3/lib/python3.8/site-packages/yellowbrick/utils/wrapper.py:42, in Wrapper.__getattr__(self, attr)
     40 def __getattr__(self, attr):
     41     # proxy to the wrapped object
---> 42     return getattr(self._wrapped, attr)

AttributeError: 'RandomForestClassifier' object has no attribute 'absolute'

Desktop (please complete the following information):

  • OS: MAC OS 10.13
  • Python Version 3.8.8
  • Yellowbrick Version 1.2
  • sklearn Version 1.1.1

leokaplun avatar Jul 24 '22 08:07 leokaplun

@leokaplun Thank you for using Yellowbrick. Can you try to change is_fitted to False?

lwgray avatar Jul 28 '22 01:07 lwgray

@leokaplun we just released Yellowbrick v1.5 which fixes an AttributeError bug that is likely related to the one you're experiencing, please update Yellowbrick to the latest version for the fix!

bbengfort avatar Aug 21 '22 13:08 bbengfort