Я создаю объект объяснения с помощью 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
Программы на Python
1736329220
Anonymous
Я создаю объект объяснения с помощью SHAP. Этот объект содержит значения формы, базовые значения и фактические данные. Моя проблема заключается в том, что массив значений формы в объекте объяснения имеет форму, отличную от той, которую ожидают графики формы. Кто-нибудь знает, почему это происходит?
Ссылка: https://shap.readthedocs.io/en/latest/example_notebooks/api_examples/migrating-to-new-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/example_notebooks/api_examples/plots/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[i]]) for i in range(num_features-1, len(values[0]))])
221 values[:,feature_order[num_features-1]] = np.sum([values[:,feature_order[i]] 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)
Подробнее здесь: [url]https://stackoverflow.com/questions/79338599/why-has-the-shap-value-array-in-a-shap-explanation-object-a-different-shape-than[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия