Размеры значений формы различаются для RandomForest и XGB, почему / как? Есть ли что-то, что можно с этим сделать? - PullRequest
0 голосов
/ 03 апреля 2020

Значения SHAP, возвращаемые из объяснения дерева .shap_values(some_data), дают различные измерения / результаты для XGB, как для случайного леса. Я пытался разобраться в этом, но, похоже, не могу найти почему или как, или объяснение в любом из учебных пособий Слундберга (чувак SHAP). Итак:

  • Есть ли причина для этого, что я пропускаю?
  • Есть ли какой-нибудь флаг, который возвращает значения shap для XGB для класса, как для других моделей, которые не очевидны или что Мне не хватает?

Ниже приведен пример кода!

import xgboost.sklearn as xgb
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
import shap

bc = load_breast_cancer()
cancer_df = pd.DataFrame(bc['data'], columns=bc['feature_names'])
cancer_df['target'] = bc['target']
cancer_df = cancer_df.iloc[0:50, :]
target = cancer_df['target']
cancer_df.drop(['target'], inplace=True, axis=1)

X_train, X_test, y_train, y_test = train_test_split(cancer_df, target, test_size=0.33, random_state = 42)

xg = xgb.XGBClassifier()
xg.fit(X_train, y_train)
rf = RandomForestClassifier()
rf.fit(X_train, y_train)

xg_pred = xg.predict(X_test)
rf_pred = rf.predict(X_test)

rf_explainer = shap.TreeExplainer(rf, X_train)
xg_explainer = shap.TreeExplainer(xg, X_train)

rf_vals = rf_explainer.shap_values(X_train)
xg_vals = xg_explainer.shap_values(X_train)

print('Random Forest')
print(type(rf_vals))
print(type(rf_vals[0]))
print(rf_vals[0].shape)
print(rf_vals[1].shape)

print('XGBoost')
print(type(xg_vals))
print(xg_vals.shape)

Вывод:

Random Forest
<class 'list'>
<class 'numpy.ndarray'>
(33, 30)
(33, 30)
XGBoost
<class 'numpy.ndarray'>
(33, 30)

Любые мысли полезны! Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...