У меня была такая же проблема, и я изменил файл в git, который вы комментируете.
В моем случае я использую windows, поэтому файл находится в C: \ Users \ my_user \ AppData \ Local \ Continuum \ anaconda3 \ Lib \ site-packages \ shap \ объяснить, но вы можете дважды щелкнуть по сообщению об ошибке, и файл будет открыт.
Следующим шагом является добавление еще одного elif
в ответе справки git. В моем случае я сделал это из строки 404
следующим образом:
1) Измените исходный код.
...
self.objective = objective_name_map.get(model.criterion, None)
self.tree_output = "probability"
elif str(type(model)).endswith("sklearn.ensemble.weight_boosting.AdaBoostClassifier'>"): #From this line I have modified the code
scaling = 1.0 / len(model.estimators_) # output is average of trees
self.trees = [Tree(e.tree_, normalize=True, scaling=scaling) for e in model.estimators_]
self.objective = objective_name_map.get(model.base_estimator_.criterion, None) #This line is done to get the decision criteria, for example gini.
self.tree_output = "probability" #This is the last line I added
elif str(type(model)).endswith("sklearn.ensemble.forest.ExtraTreesClassifier'>"): # TODO: add unit test for this case
scaling = 1.0 / len(model.estimators_) # output is average of trees
self.trees = [Tree(e.tree_, normalize=True, scaling=scaling) for e in model.estimators_]
...
Обратите внимание, что в других моделях для кода shap требуется атрибут 'criterion'
что у классификатора AdaBoost нет прямого пути. Таким образом, в этом случае этот атрибут получен из "слабых" классификаторов с помощью AdaBoost, поэтому я добавляю model.base_estimator_.criterion
.
Наконец, вам нужно снова импортировать библиотеку, обучить вашу модель и получить Shap значения. Я оставляю пример:
2) Импортируйте снова библиотеку и попробуйте:
from sklearn import datasets
from sklearn.ensemble import AdaBoostClassifier
import shap
# import some data to play with
iris = datasets.load_iris()
X = iris.data
y = iris.target
ADABoost_model = AdaBoostClassifier()
ADABoost_model.fit(X, y)
shap_values = shap.TreeExplainer(ADABoost_model).shap_values(X)
shap.summary_plot(shap_values, X, plot_type="bar")
, которая генерирует следующее:
3) Получите ваши новые результаты:
![enter image description here](https://i.stack.imgur.com/JU6qF.png)