Я пытался выяснить, как использовать дерево SHAP для дальнейшей оценки моих классификаторов XGBoost. Я сталкиваюсь с некоторыми проблемами с данными, которые должны быть ошибкой пользователя. Я не понимаю, что из-за ввода вызывает это ...
Вход: shap.force_plot (объяснение.expect_value, shap_values [0 ,:], X.iloc [0,:])
Настройка:
import shap
import numpy as np
import matplotlib.pylab as pl
# load JS visualization code to notebook
shap.initjs()
Конфигурация для объяснителя и shap_values:
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X)
Создать отображение:
shap.force_plot(explainer.expected_value, shap_values[0,:], X.iloc[0,:])
Ошибка :
Что-то происходит с генерацией shap_values. Я не понимаю, что было бы не так с X (фреймом данных), который я передаю, в отличие от того, который они получают, используя набор данных Бостона в их примере.
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-28-dd74c29cab4f> in <module>
----> 1 shap.force_plot(explainer.expected_value, shap_values[0,:], mean_data.iloc[0,:])
TypeError: list indices must be integers or slices, not tuple
Вывод:
print(explainer.expected_value)
print(shap_values) # Is a list as Robin Niel thought
[- 0,84587, 1.0577996, 1.1045177]
[массив ([[0., 0., 0.,. .., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ... , 0., 0., 0.], ..., [0., 0., 0., ..., 0., 0., 0.], [0., 0., 0.,. .., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.]], dtype = float32), массив ([[0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.], [0., 0. , 0., ..., 0., 0., 0.], ..., [0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.]], dtype = float32), массив ([[0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.] , [0., 0., 0., ..., 0., 0., 0.], ..., [0., 0., 0., ..., 0., 0., 0 .], [0., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.] ], dtype = float32)]
Из README: https://github.com/slundberg/shap/blob/master/README.md
import xgboost
import shap
# load JS visualization code to notebook
shap.initjs()
# train XGBoost model
X,y = shap.datasets.boston()
model = xgboost.train({"learning_rate": 0.01}, xgboost.DMatrix(X, label=y), 100)
# explain the model's predictions using SHAP
# (same syntax works for LightGBM, CatBoost, scikit-learn and spark models)
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X)
# visualize the first prediction's explanation (use matplotlib=True to avoid Javascript)
shap.force_plot(explainer.expected_value, shap_values[0,:], X.iloc[0,:])