Я создаю объект объяснения с помощью SHAP. Этот объект содержит значения формы, базовые значения и фактические данные. Моя проблема заключается в том, что массив значений формы в объекте объяснения имеет форму, отличную от той, которую ожидают графики формы. Кто-нибудь знает, почему это происходит?
Ссылка: https://shap.readthedocs.io/en/latest/e ... w-api.html
import pandas as pd
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
import shap
# Create a dataset with 5 features and 1 binary target
X, y = make_classification(n_samples=1000, n_features=5, n_informative=3, n_redundant=0, n_clusters_per_class=1, random_state=42)
# Split the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Build a random forest classifier, fit to training data
model = RandomForestClassifier(n_estimators=75,
random_state=42,
max_depth=4,
min_samples_split = 30)
model.fit(X_train, y_train)
# Create an Explanation object
explainer = shap.TreeExplainer(model, X_test)
explanation = explainer(X_test)
Тогда мы сможем просмотреть объект объяснения
print(explanation.values.shape)
print(explanation.base_values.shape)
print(explanation.data.shape)
Output:
(200, 5, 2)
(200, 2)
(200, 5)
Теперь этот объект объяснения не работает из-за формы массива объяснений.values (значения формы).
Приведенный ниже код должен работать согласно документации Shap, но возвращает ошибку.
Ссылка: https://shap.readthedocs.io/en/latest/e ... s/bar.html
shap.plots.bar(explanation)
Output:
TypeError: only integer scalar arrays can be converted to a scalar index
File , line 1
----> 1 shap.plots.bar(explanation)
File /local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.11/site-packages/shap/plots/_bar.py:220, in (.0)
218 # see how many individual (vs. grouped at the end) features we are plotting
219 if num_features < len(values[0]):
--> 220 num_cut = np.sum([len(orig_inds[feature_order]) for i in range(num_features-1, len(values[0]))])
221 values[:,feature_order[num_features-1]] = np.sum([values[:,feature_order] for i in range(num_features-1, len(values[0]))], 0)
223 # build our y-tick labels
Однако, если я проделаю эту операцию, она сработает. Хотя вряд ли это так должно работать. Есть ли у кого-нибудь какие-нибудь идеи по этой проблеме?
explanation.values = explanation.values[:, :, 1]
shap.plots.bar(explanation)
Подробнее здесь: https://stackoverflow.com/questions/793 ... shape-than
Почему массив значений формы в объекте объяснения формы имеет форму, отличную от ожидаемой на графиках формы? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Тот же цвет для значений переменных, но на 2 графиках (такую же рис.) [Дубликат]
Anonymous » » в форуме Python - 0 Ответы
- 6 Просмотры
-
Последнее сообщение Anonymous
-