Cómo ajustar los parámetros del modelo XGBoost
Nota de traducción: existen algunas diferencias entre el código proporcionado en el artículo y los resultados en ejecución, por lo que puede descargar el código completo desde aquí como referencia. Además, cuando seguí el tutorial, descubrí que mi biblioteca no podía analizar las características del tipo de cadena, por lo que solo utilicé algunas de las características. Los valores específicos son diferentes de los del artículo, pero. puede ayudar a entender el artículo. Así que puedes modificar ligeramente el código, no es necesario que sigas el tutorial exactamente~^0^
Bibliotecas que deben instalarse con anticipación:
Introducción
Si el rendimiento del modelado predictivo es un poco insatisfactorio, utilice XGBoost. El algoritmo XGBoost se ha convertido ahora en un arma importante en el arsenal de muchos ingenieros de datos. Este es un algoritmo muy complejo que puede manejar una variedad de datos irregulares.
Construir un modelo usando XGBoost es muy sencillo. Sin embargo, mejorar las prestaciones de este modelo es algo complicado (al menos a mí me resulta muy tedioso). El algoritmo utiliza múltiples parámetros. Por tanto, para mejorar el rendimiento del modelo, es necesario ajustar los parámetros. Al resolver problemas reales, algunas preguntas son difíciles de responder: ¿qué parámetros es necesario ajustar? ¿A qué valores se deben ajustar estos parámetros para lograr el resultado deseado?
Este artículo es más adecuado para principiantes en XGBoost. En este artículo, aprenderemos las técnicas de ajuste de parámetros, así como algunos conocimientos útiles relacionados con XGboost. Además, practicaremos el algoritmo en un conjunto de datos usando Python.
Lo que necesitas saber
XGBoost (eXtreme Gradient Boosting) es una versión optimizada del algoritmo de aumento de gradiente.
Agradecimiento especial: estoy personalmente agradecido por el apoyo del gran Sr. Sudalai Rajkumar, también conocido como SRK, quien actualmente ocupa el segundo lugar en AV Rank. Sin su ayuda, este artículo no habría sido posible. Con su ayuda, hemos señalado el camino a innumerables científicos de datos. ¡Le tenemos un gran respeto!
Lista de contenidos
1. Ventajas de XGBoost
2. Comprender los parámetros de XGBoost
3.
1. Ventajas de XGBoost
El algoritmo XGBoost puede mejorar la capacidad del modelado predictivo. A medida que aprendí más sobre su rendimiento y los principios detrás de su alta precisión, descubrí que tiene muchas ventajas:
1. Regularización
GBM estándar La implementación no tiene un paso de regularización. como XGBoost. La regularización también ayuda a reducir el sobreajuste. De hecho, XGBoost es famoso por su tecnología de "impulso regularizado".
2. Procesamiento paralelo
XGBoost admite el procesamiento paralelo, lo que supone un salto en velocidad en comparación con GBM. Sin embargo, como todos sabemos, el algoritmo Boosting se procesa secuencialmente, entonces, ¿cómo procesarlo en paralelo? Cada lección sobre la construcción de árboles depende del árbol anterior, entonces, ¿qué nos permite exactamente construir un árbol en un procesador multinúcleo? Espero que entiendas lo que esto significa.
2.XGBoost también admite la implementación de Hadoop.
3. Altamente flexible
XGBoost permite a los usuarios personalizar los objetivos de optimización y los criterios de evaluación. Agrega una dimensión completamente nueva al modelo, por lo que no hay limitaciones en lo que podemos hacer.
4. Manejo de valores faltantes
XGBoost tiene reglas integradas para manejar valores faltantes. El usuario debe proporcionar un valor que sea diferente de las otras muestras y luego pasarlo como parámetro como valor del valor faltante. XGBoost utiliza diferentes métodos de manejo cuando se encuentran valores faltantes en diferentes nodos y aprende cómo manejar los valores faltantes cuando los encuentra en el futuro.
5. Poda
Cuando se encuentra una pérdida negativa durante el proceso de división, GBM dejará de dividirse. Por lo tanto, GBM es en realidad un algoritmo codicioso. XGBoost continuará dividiéndose hasta alcanzar la profundidad máxima especificada (máx_profundidad), luego regresará y podará.
Si no hay más valores positivos después de un nodo, elimina esa división. La ventaja de este enfoque se hace evidente cuando a una pérdida negativa (por ejemplo, -2) le sigue una pérdida positiva (por ejemplo, +10). GBM se detiene en -2 porque encontró un valor negativo. Pero XGBoost sigue dividiéndose, luego se da cuenta de que las dos divisiones suman +8, por lo que mantiene ambas divisiones.
6. Validación cruzada incorporada
XGBoost permite el uso de validación cruzada en cada iteración de impulso. Por lo tanto, se puede obtener fácilmente el número óptimo de iteraciones de refuerzo. GBM, por otro lado, utiliza la búsqueda en cuadrícula y solo puede detectar un número limitado de valores.
7. Continuar entrenando en el modelo existente
XGBoost puede continuar entrenando en función de los resultados de la ronda anterior. Esta característica puede ser una gran ventaja en determinadas aplicaciones. La implementación de GBM en sklearn también tiene esta funcionalidad y los dos algoritmos son consistentes en este sentido.
Creo que ya tienes cierta comprensión de las potentes funciones de XGBoost. Tenga en cuenta que estos son los puntos clave que yo mismo resumí; si tiene más ideas, no dude en señalarlas en los comentarios a continuación y actualizaré esta lista.
2. Parámetros de XGBoost
El autor de XGBoost divide todos los parámetros en tres categorías:
1. Parámetros generales: control de funciones macro.
2. Parámetros del potenciador: controla el potenciador (árbol/regresión) en cada paso.
3. Parámetros del objetivo de aprendizaje: controla el rendimiento del objetivo de entrenamiento.
Aquí lo explicaré por analogía con GBM como conocimiento básico.
Parámetros generales
Estos parámetros se utilizan para controlar las funciones macro de XGBoost.
1. booster
#Imprimir informe del modelo:
imprimir "(nInforme de modelo)"
imprimir "Precisión: %.4g " % metrics.accuracy_score(dtrain['Disbursed'].values, dtrain_predictions)
imprimir "Puntuación AUC (Tren): %f" % metrics.roc_auc_score(dtrain['Disbursed'], dtrain_predprob)
feat_imp = pd.Series(alg.booster().get_fscore()).sort_values(ascending=False)
feat_imp.plot(kind='bar', title=' Importancia de la característica')
plt.ylabel('Puntuación de importancia de la característica')
Esta función es ligeramente diferente de la utilizada en GBM. Pero el objetivo de este artículo es explicar conceptos importantes, no escribir código. Si no entiende algo, deje un comentario a continuación y no se sienta presionado. Tenga en cuenta que el paquete sklearn para xgboost no tiene la medida "feature_importance", pero la función get_fscore() hace lo mismo.
Métodos generales de ajuste de parámetros.
Utilizaremos un enfoque similar al GBM. Se deben seguir los siguientes pasos:
1. Elija una tasa de aprendizaje más alta (tasa de aprendizaje). Normalmente, la tasa de aprendizaje tiene un valor de 0,1, pero para diferentes problemas, la tasa de aprendizaje ideal a veces fluctúa entre 0,05 y 0,3. Para elegir el número ideal de árboles de decisión correspondientes a esta tasa de aprendizaje, XGBoost proporciona una función útil llamada "cv" que utiliza validación cruzada en cada iteración y devuelve el número ideal de árboles de decisión.
2. Realice ajustes de parámetros específicos del árbol de decisión (max_ Depth, min_child_weight, gamma, subsample, colsample_bytree) para una tasa de aprendizaje y un número de árboles de decisión determinados. Durante la determinación del árbol podemos elegir diferentes parámetros, que ilustraré más adelante con ejemplos.
3. Ajustar los parámetros de regularización de xgboost. (lambda, alfa). Estos parámetros reducen la complejidad del modelo, mejorando así su rendimiento.
4. Reducir la tasa de aprendizaje y determinar los parámetros ideales.
Completemos estas tareas en detalle paso a paso.
Paso 1: Determinar la tasa de aprendizaje y el número de estimadores para el ajuste de parámetros basado en árboles.
Para determinar los parámetros de elevación, necesitamos dar un valor inicial a otros parámetros. Comencemos con los siguientes valores:
1. max_ Depth = 5: El valor ideal para este parámetro debe estar entre 3 y 10. El valor inicial que elegí es 5, pero puedes elegir otros valores. Un valor inicial entre 4 y 6 es una buena opción.
2. min_child_weight = 1: aquí se elige un valor menor porque se trata de un problema de clasificación extremadamente desequilibrado. Por lo tanto, los valores debajo de algunos nodos de hoja serán menores.
3. gamma = 0: También puedes elegir otros valores más pequeños como valor inicial, entre 0,1 y 0,2. Este parámetro también deberá ajustarse más adelante.
4. subsample,colsample_bytree = 0,8: este es el valor inicial más utilizado. Los valores típicos oscilan entre 0,5 y 0,9.
5. scale_pos_weight = 1: Este valor se debe a que la categoría está muy desequilibrada.
Tenga en cuenta que los valores de estos parámetros son solo estimaciones iniciales y deberán ajustarse más adelante. La tasa de aprendizaje aquí se establece en 0,1 de forma predeterminada y luego se utiliza la función cv en xgboost para determinar el número óptimo de árboles de decisión. La función de la sección anterior logra esto.
#Elija todos los predictores excepto target & IDcols
predictores = [x para x en train.columns si x no está en [target,IDcol]]
xgb1 = XGBClassifier(
tasa_de_aprendizaje =0.1,
n_estimators=1000,
profundidad_max=5,
min_child_weight=1,
gamma=0,
subsample=0.8,
colsample_bytree=0.8,
objetivo= 'binary:logistic',
nthread=4,
scale_pos_weight=1,
semilla=27)
modelfit(xgb1, tren, predictores)
Como puede ver en el resultado, cuando la tasa de aprendizaje es 0,1, el número ideal de árboles de decisión es 140. Para usted, este número puede ser mayor, pero, por supuesto, depende del rendimiento de su sistema.
Nota: En AUC(prueba), puede ver el valor AUC del conjunto de prueba. Pero si ejecuta estos comandos en su propio sistema, este valor no se mostrará. Esto se debe a que los datos no son públicos. Los valores proporcionados aquí son sólo de referencia. Se ha eliminado la parte del código que genera este valor.
/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjwvYmxvY2txdW90ZT4NCjxoMSBpZD0="Paso 2: ajuste de parámetros de profundidad máxima y peso mínimo">Paso 2: ajuste de parámetros de profundidad máxima y peso mínimo
Ajustamos estos dos parámetros primero, ya que tienen un gran impacto en el resultado final. Primero, ajustamos los parámetros en un rango grande y luego los ajustamos en un rango pequeño. Nota: En esta sección, realizaré una búsqueda masiva en la cuadrícula, que tomará entre 15 y 30 minutos o más, dependiendo del rendimiento de su sistema
param_test1 = {
'max_ Depth. ':range(3,10,2),
'min_child_weight':range(1,6,2)
}
gsearch1 = GridSearchCV( estimador = XGBClassifier( tasa_de_aprendizaje =0,1, n_estimadores=140, profundidad_máxima=5,
min_child_weight=1, gamma=0, submuestra=0,8, colsample_ bytree= 0,8,
objetivo= 'binario :logistic', nthread=4, scale_pos_weight=1, seed=27),
param_grid = param_test1, scoring='roc_auc ',n_jobs=4 ,iid=False, cv=5)
gsearch1.fit(entrenar[predictores],entrenar[objetivo])
gsearch1.grid_scores_, gsearch1.best_params_, gsearch1.best_score_
p>