Почему массив значений формы в объекте объяснения формы имеет форму, отличную от ожидаемой на графиках формы?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему массив значений формы в объекте объяснения формы имеет форму, отличную от ожидаемой на графиках формы?

Сообщение Anonymous »

Я создаю объект объяснения с помощью 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»