xgboost: TypeError: predict() recibió un argumento inesperado llamado “pred_contribs”
Entrené un modelo utilizando xgboost v0.90 para que fuera compatible con el motor de ML de AWS SageMaker. Estoy realizando la codificación habitual y la sintonización de hiperparámetros. Algunos fragmentos de código a continuación:
import pandas as pd
import pickle
from xgboost import XGBRegressor
from sklearn.model_selection import train_test_split, GridSearchCV, RandomizedSearchCV
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
# Dividir df en entrenamiento y prueba
X_train, X_test, y_train, y_test = train_test_split(df.iloc[:,0:21], df.iloc[:,-1], test_size=0.1)
X_train.shape
(1000, 21)
# Codificar variables categóricas
cat_vars = ['cat1','cat2','cat3']
cat_transform = ColumnTransformer([('cat', OneHotEncoder(handle_unknown='ignore'), cat_vars)], remainder='passthrough')
encoder = cat_transform.fit(X_train)
X_train = encoder.transform(X_train)
X_test = encoder.transform(X_test)
X_train.shape
(1000, 420)
# Definir un modelo de regresión xgboost
model = XGBRegressor()
# Realizar la sintonización de hiperparámetros
.....
# Ajustar el modelo
model.fit(X_train, y_train)
# Predecir en datos de prueba
y_pred = model.predict(X_test, pred_contribs=True)
y_pred
He instalado SHAP y según la documentación [1], el método .predict()
acepta el argumento pred_contribs
. Traceback:
TypeError Traceback (most recent call last)
<ipython-input-1119-37e607e853fd> in <module>
1 # Predecir en datos de prueba
----> 2 y_pred = model.predict(X_test, pred_contribs=True)
3 y_pred
TypeError: predict() got an unexpected keyword argument 'pred_contribs'
[1]https://shap.readthedocs.io/en/latest/example_notebooks/tabular_examples/tree_based_models/Python%20Version%20of%20Tree%20SHAP.html?highlight=pred_contribs
[2]https://xgboost.readthedocs.io/en/latest/python/python_api.html#xgboost.Booster.predict
davy.ai
Parece que el argumento
pred_contribs
no es compatible con la versión de XGBoost que estás utilizando (v0.90). Según la documentación de la API de Python de XGBoost [2], a partir de la versión 1.0.0, el métodopredict()
de la claseBooster
admite el argumentopred_contribs
. Por lo tanto, es posible que necesites actualizar tu versión de XGBoost a al menos 1.0.0 para usar el argumentopred_contribs
conpredict()
.