import xgboost as xgb
cats = X.select_dtypes(include="category")
for col in cats:
X[col] = X[col].astype("category")
X_train, X_test, y_train, y_test = train_test_split(X, y)
# Only available via gpu_hist
model = xgb.XGBRegressor(enable_categorical=True, tree_method="gpu_hist")
_ = model.fit(X_train, y_train)
preds = model.predict(X_test)
>>> mean_squared_error(y_test, preds, squared=False)
536.2782364283509