#python-3.x #machine-learning #xgboost
Вопрос:
Я обучил XGB набору данных с int, поплавками и объектами. Теперь я хочу построить значение функции, используя значения Shap. Однако я сталкиваюсь с ошибкой, которая гласит:
ValueError: DataFrame.dtypes for data must be int, float, bool or category. When
categorical type is supplied, DMatrix parameter `enable_categorical` must be
set to `True`
Вот мой код:
from sklearn.pipeline import Pipeline
from xgboost import XGBClassifier
import shap
model = XGBClassifier()
pipeline = Pipeline([
("preprocessing", preprocessing_pipeline),
("classifier", model)
])
trained_pipeline = pipeline.fit(X_train, y_train)
y_pred_test = trained_pipeline.predict_proba(X_test)[:, 1]
y_pred_train = trained_pipeline.predict_proba(X_train)[:, 1]
#evaluate model on test set
X_eval = X_test.copy()
X_eval.insert(0, 'TARGET', y_test)
X_eval.insert(1, 'PREDICTION', y_pred_test)
X_eval.insert(2, 'ACCURATE', X_eval["TARGET"] == (X_eval["PREDICTION"] > 0.5))
X_eval = X_eval.reset_index()
#plot feature importance using Shap values
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_eval)
Комментарии:
1. Я думаю, что в вашем наборе данных есть некоторые категориальные особенности. Вам нужно пометить, закодировать их. Можете ли вы показать нам свой
preprocessing_pipeline
иmodel
? И, пожалуйста, поделитесь также 10 первыми строками ваших данных.