1
resposta

Incompatibilidade entre versões do scikit-learn e do xgboost

Na aula 4 do curso "Regressão: aprimorando os resultados com XGBoost" o GridSearchCV não consegue chamar adequadamente o Xgboost, se o scikit-learn e o Xgboost forem carregados em sua versão mais atual!!!

Para o exercício funcionar, é necessário utilizar versões anteriores de ambos :

!pip install scikit-learn==1.2.2
!pip install xgboost==2.0.1

Minha dúvida é o que poderia ser alterado no código, de modo a ser possível trabalhar com as bibliotecas mais recentes do scikit-learn e do xgboost.

Por exemplo, no código abaixo, na aula 4 item 02:

from sklearn.model_selection import GridSearchCV
import numpy as np

param_grid = {
    'colsample_bytree': [0.6, 1],  # Define quantas colunas, featuras serão consideradas 
    'subsample': [0.5, 0.8, 1],  # Número de linhas (amostras) que serão utilizadas
    'max_depth': [3, 5, 10]
}

gbm = xgb.XGBRegressor(enable_categorical=True)

grid = GridSearchCV(
    estimator = gbm,
    param_grid = param_grid,
    scoring = 'neg_mean_squared_error',
    cv = 5,
    verbose = 1
)

grid.fit(X, y) 

print('Melhores hiperparâmetros encontrados: ', grid.best_params_)
print('Menor RMSE encontrado: ', np.sqrt(np.abs(grid.best_score_)))

No código acima, no método grid.fit(X, y) ocorre um erro, se as versões forem as mais atuais do scikit-learn e do Xgboost.

Enfim, o que alterar no código acima para ser possível utilizar o GridSearchCV com XGBoost, ambos em suas versões mais recentes.

1 resposta

Oii, Vagner! Tudo bem?

Agradeço por aguardar o nosso retorno.

Algumas mudanças podem ser necessárias devido a atualizações nas APIs dessas bibliotecas. Deixo abaixo sugestões que podem te ajudar:

  • Veja se todos os parâmetros passados para XGBRegressor são compatíveis com a versão atual do xgboost. Por exemplo, o parâmetro enable_categorical é relativamente novo e pode não ser necessário ou suportado em todas as versões.
  • Revise o parâmetro do método tree_method, pois nas versões recentes, usar algo como 'hist' ou 'auto' pode resolver a incompatibilidade.
  • Às vezes na mensagem de erro pode fornecer pistas sobre o que precisa ser ajustado e com o link da documentação.
  • Uma alternativa é usar o RandomizedSearchCV como alternativa ao GridSearchCV, que pode ter melhor suporte em versões mais recentes.

Deixo aqui as documentações de ambos para você te auxiliar nos estudos:

Se você quiser compartilhar o erro específico que está recebendo, isso pode ajudar a trazer uma solução de ajuste mais assertivo.

Espero ter ajudado e bons estudos!