es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error de XGBoost: el valor para el parámetro excede los límites.

Estoy entrenando un modelo de XGBoost y realizando una optimización de hiperparámetros utilizando randomizedSearchCV. Especifico la distribución de los parámetros de la siguiente manera:

from xgboost import XGBRegressor

# Definir un modelo de regresión xgboost
model = XGBRegressor()

params = {
    "colsample_bytree": uniform(0.1, 0.2), # fracción de columnas a muestrear
    "gamma": uniform(0, 0.3), # mínima reducción de pérdida requerida para la siguiente división
    "learning_rate": uniform(0.02, 0.3), # valor predeterminado 0.1
    "n_estimators": randint(100, 150), # valor predeterminado 100
    "subsample": uniform(0.8, 0.75) # % de filas para usar en la muestra de entrenamiento
}

r = RandomizedSearchCV(model, param_distributions=params, n_iter=100, 
                       scoring="neg_mean_absolute_error", cv=3, n_jobs=1)

Obtengo el siguiente error, a pesar de que el rango que he especificado para subsample se encuentra dentro de los límites [0,1].

raise XGBoostError(py_str(_LIB.XGBGetLastError()))
xgboost.core.XGBoostError: value 1.10671 for Parameter subsample exceed bound [0,1]

  warnings.warn("Estimator fit failed. The score on this train-test"

¿Alguna idea de por qué podría estar sucediendo esto?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el rango especificado para subsample en la distribución de parámetros no es correcto. Los valores especificados para subsample son uniform(0.8, 0.75), lo cual no tiene sentido ya que el límite inferior (0.8) es mayor que el límite superior (0.75). Esto está causando un error en XGBoost ya que el valor 1.10671 excede el límite superior de 1.

    Para solucionar este error, el rango de subsample debe corregirse para asegurarse de que el límite inferior sea menor que el límite superior. Por ejemplo, un rango válido sería uniform(0.75, 0.8).

Comments are closed.