2
import shap
import pandas as pd
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor

dataset = fetch_california_housing(as_frame=True)
X = dataset["data"]
y = dataset["target"]
X_train, X_test, y_train, y_test = train_test_split(X, y,  test_size=0.2)

model = RandomForestRegressor()

model.fit(X_train, y_train)

explainer = shap.Explainer(model.predict, X_test)
shap_values = explainer(X_test)
shap_values = explainer.shap_values(X)
AttributeError: 'Exact' object has no attribute 'shap_values'

In order to know the SHAP values, even though I entered the above code, the above error occurs at the last line.

When I look at the example codes, it seems to work without any problem, but the SHAP library version is updated and the problem seems to have occurred.

What code can I use instead of .shap_values?

1 Answer 1

2

If you check out explainer object:

dir(explainer)

['__call__',
 '__class__',
 '__delattr__',
 '__dict__',
 '__dir__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__gt__',
 '__hash__',
 '__init__',
 '__init_subclass__',
 '__le__',
 '__lt__',
 '__module__',
 '__ne__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 '__weakref__',
 '_cached_gray_codes',
 '_compute_main_effects',
 '_gray_code_cache',
 '_instantiated_load',
 'explain_row',
 'feature_names',
 'linearize_link',
 'link',
 'load',
 'masker',
 'model',
 'output_names',
 'save',
 'supports_model_with_masker']

you'll find out the object doesn't have shap_values method or attribute. Hence your error.

However, you already have shap_values object with everything you need:

shap_values

.values =
array([[-3.35735356e-01, -7.13048075e-02,  1.72043493e-02, ...,
         4.34819130e-01, -7.32259144e-01,  1.33657838e-01],
       [ 6.52537977e-01,  1.13007470e-01,  9.42159765e-03, ...,
         2.27540128e-01,  2.63606641e-01,  3.19787969e-02],
       [-5.21078654e-01,  1.27421958e-02, -6.97000846e-02, ...,
         6.47177548e-05,  7.54791715e-02,  1.12118219e-01],
       ...,
       [ 7.92578890e-02, -5.45558945e-03,  1.97615869e-02, ...,
        -2.96984576e-01,  1.09652257e-01, -6.13352645e-01],
       [-9.01863457e-02, -4.94473246e-02,  1.27294579e-01, ...,
         2.32800011e-02, -7.88081199e-01,  1.23530401e-01],
       [ 2.62943083e-01, -2.16743690e-02,  4.10964201e-02, ...,
        -3.23427676e-01,  3.72933299e-01, -6.50382792e-02]])

.base_values =
array([2.0767511, 2.0767511, 2.0767511, ..., 2.0767511, 2.0767511,
       2.0767511])

.data =
array([[   3.089     ,   18.        ,    3.99712644, ...,    1.61091954,
          38.58      , -121.41      ],
       [   5.1718    ,   31.        ,    5.67641682, ...,    2.48446069,
          34.16      , -118.23      ],
       [   2.6893    ,   26.        ,    5.35526316, ...,    2.59962406,
          34.45      , -119.29      ],
       ...,
       [   4.3676    ,   28.        ,    6.39285714, ...,    3.1047619 ,
          34.18      , -117.3       ],
       [   3.9722    ,   17.        ,   20.90078329, ...,    2.60835509,
          38.93      , -120.        ],
       [   5.0091    ,   33.        ,    5.88377193, ...,    3.33333333,
          33.77      , -118.02      ]])
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.