Solución:
xgboost.train
es la API de bajo nivel para entrenar el modelo a través del método de aumento de gradiente.
xgboost.XGBRegressor
y xgboost.XGBClassifier
son los envoltoriosEnvoltorios similares a Scikit-Learn, como lo llaman) que preparan el DMatrix
y pasar la función objetivo y los parámetros correspondientes. Al final, el fit
la llamada simplemente se reduce a:
self._Booster = train(params, dmatrix,
self.n_estimators, evals=evals,
early_stopping_rounds=early_stopping_rounds,
evals_result=evals_result, obj=obj, feval=feval,
verbose_eval=verbose)
Esto significa que todo eso se puede hacer con XGBRegressor
y XGBClassifier
es factible a través de subyacente xgboost.train
función. Al revés, obviamente no es cierto, por ejemplo, algunos parámetros útiles de xgboost.train
no son compatibles con XGBModel
API. La lista de diferencias notables incluye:
-
xgboost.train
permite configurar elcallbacks
aplicado al final de cada iteración. -
xgboost.train
permite la continuación del entrenamiento a través dexgb_model
parámetro. -
xgboost.train
permite no solo la minización de la función eval, sino también la maximización.
@Maxim, a partir de xgboost 0.90 (o mucho antes), estas diferencias ya no existen en ese xgboost.XGBClassifier.fit:
- tiene
callbacks
- permite contiunation con el
xgb_model
parámetro - y admite las mismas métricas de evaluación integradas o funciones de evaluación personalizadas
Lo que encuentro es diferente evals_result
, en el sentido de que debe recuperarse por separado después del ajuste (clf.evals_result()
) y el resultante dict
es diferente porque no puede aprovechar el nombre de las evaluaciones en la lista de seguimiento ( watchlist = [(d_train, 'train'), (d_valid, 'valid')]
).