Cómo ajustar los parámetros del modelo XGBoost
Guía completa para el ajuste de parámetros de XGBoost (con código Python)
Nota de traducción: existen ciertas diferencias entre el código proporcionado en el artículo y los resultados en ejecución. 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 el código ligeramente, no es necesario seguir el tutorial por completo~ ^0^
Bibliotecas que deben instalarse con antelación:
Introducción
Si su modelo predictivo no funciona como se esperaba, utilice XGBoost. El algoritmo XGBoost se ha convertido ahora en un arma importante para muchos ingenieros de datos. Es un algoritmo muy sofisticado que puede manejar todo tipo de datos irregulares.
Construir un modelo usando XGBoost es muy sencillo. Sin embargo, es algo complicado mejorar las prestaciones de este modelo (al menos a mí me resulta muy difícil). Este algoritmo utiliza varios parámetros. Por lo tanto, para mejorar el rendimiento del modelo, es muy necesario el ajuste de 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 ideal?
Este artículo es más adecuado para personas que son nuevas en XGBoost. En este artículo, aprenderemos técnicas de ajuste de parámetros y algunos conocimientos útiles relacionados con XGboost. Y usaremos Python para practicar este algoritmo en un conjunto de datos.
Lo que necesitas saber
XGBoost (eXtreme Gradient Boosting) es una versión optimizada del algoritmo Gradient Boosting.
Agradecimiento especial: personalmente estoy muy agradecido al Sr. Sudalai Rajkumar (también conocido como SRK) por su apoyo. Actualmente ocupa el segundo lugar en AV Rank. Sin su ayuda, este artículo no sería posible. Con su ayuda, podemos orientar a innumerables científicos de datos. ¡Dale un gran aplauso!
Lista de contenidos
1. Ventajas de XGBoost
2. Comprender los parámetros de XGBoost
3.
1. Ventajas de XGBoost
El algoritmo XGBoost puede mejorar las capacidades de los modelos de predicción. Cuando aprendí más sobre su rendimiento, cuando aprendí más sobre los principios detrás de su alta precisión, descubrí que tiene muchas ventajas:
1. Regularización
La implementación de GBM estándar. no tiene un paso de regularización como XGBoost. La regularización también es útil para reducir el sobreajuste. De hecho, XGBoost es famoso por su tecnología de "impulso regularizado".
2. Procesamiento paralelo
XGBoost puede lograr un 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. La construcción de cada árbol depende del árbol anterior, entonces, ¿qué nos permite específicamente usar procesadores multinúcleo para construir un árbol? Espero que entiendas lo que esto significa. ?XGBoost también admite la implementación de Hadoop.
3. Alta flexibilidad
XGBoost permite a los usuarios definir objetivos de optimización personalizados y criterios de evaluación. Agrega una dimensión completamente nueva al modelo, por lo que nuestro procesamiento no se verá afectado por ningún límite. .
4. Procesamiento de valores faltantes
XGBoost tiene reglas integradas para manejar los valores faltantes. El usuario debe proporcionar un valor que sea diferente de otras muestras y luego pasarlo como parámetro para usarlo como valor del valor faltante.
XGBoost utiliza diferentes métodos de procesamiento cuando diferentes nodos encuentran valores faltantes y aprenderá cómo manejar los valores faltantes en el futuro.
5. Poda
Cuando se encuentra una pérdida negativa durante la división, GBM dejará de dividirse. Por lo tanto, GBM es en realidad un algoritmo codicioso. XGBoost siempre se dividirá a la profundidad máxima especificada (máx_profundidad) y luego regresará y podará. Si un nodo ya no tiene un valor positivo, elimina la división. La ventaja de este enfoque se hace evidente cuando a una pérdida negativa (como -2) le sigue una pérdida positiva (como 10). GBM se detendrá en -2 porque encontró un valor negativo. Pero XGBoost sigue dividiéndose, luego descubre que las dos divisiones combinadas dan 8, por lo que mantiene esas dos 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 utiliza búsqueda de cuadrícula y solo puede detectar un número limitado de valores.
7. Continuar según el modelo existente
XGBoost puede continuar entrenando según 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 función, y los dos algoritmos son consistentes en este punto.
Creo que ya tienes una idea de las potentes funciones de XGBoost. Tenga en cuenta que estos son solo algunos puntos que yo mismo he resumido. 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 booster: controla el booster (árbol/regresión) de cada paso.
3. Parámetros de objetivos de aprendizaje: controlar el rendimiento de los objetivos de entrenamiento.
Aquí lo explicaré por analogía con GBM, por lo que es una especie de conocimiento básico.
Parámetros generales
Estos parámetros se utilizan para controlar las funciones macro de XGBoost.
1. booster
#Imprimir informe de modelo:
imprimir "\nInforme de modelo"
imprimir métricas de "Precisión: .4g" .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='Importancias de las características') p>
plt.ylabel('Puntuación de importancia de la característica')
Esta función es ligeramente diferente de la utilizada en GBM. Sin embargo, el objetivo de este artículo es explicar conceptos importantes, no escribir código. Si hay algo que no entiende, comente a continuación y no se sienta presionado. Tenga en cuenta que el paquete sklearn de xgboost no tiene la medida "feature_importance", pero la función get_fscore() tiene la misma función.
Métodos generales de ajuste de parámetros.
Utilizaremos un enfoque similar al GBM. Se requieren los siguientes pasos:
1. Seleccione una tasa de aprendizaje más alta. Generalmente, el valor de la tasa de aprendizaje es 0,1. Sin embargo, la tasa de aprendizaje ideal a veces fluctúa entre 0,05 y 0,3 para diferentes problemas. Elija el número ideal de árboles de decisión que corresponda a esta tasa de aprendizaje. XGBoost tiene una función útil "cv", que puede utilizar validación cruzada en cada iteración y devolver el número ideal de árboles de decisión.
2. Para una tasa de aprendizaje y un número de árboles de decisión determinados, realice un ajuste de parámetros específicos del árbol de decisión (max_ Depth, min_child_weight, gamma, subsample, colsample_bytree). En el proceso de identificación de un árbol, podemos elegir diferentes parámetros, de los que daré ejemplos en un momento.
3. Ajuste de los parámetros de regularización de xgboost. (lambda, alfa). Estos parámetros pueden reducir la complejidad del modelo y así mejorar el rendimiento del modelo.
4. Reducir la tasa de aprendizaje y determinar los parámetros ideales.
Realicemos estas operaciones paso a paso en detalle.
El primer paso: determinar la tasa de aprendizaje y el número de estimadores para el ajuste de parámetros basado en árbol.
Para determinar los parámetros de boosting, primero debemos dar un valor inicial a otros parámetros. Primero establezcamos el valor de la siguiente manera:
1. max_ Depth = 5: el mejor valor para este parámetro está entre 3 y 10. Elegí un valor inicial de 5, pero puedes elegir otros valores. Los valores iniciales entre 4 y 6 son buenas opciones.
2. min_child_weight = 1: aquí se elige un valor relativamente pequeño 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. submuestra, colsample_bytree = 0,8: este es el valor inicial más común. 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 los parámetros anteriores son solo estimaciones iniciales y deben ajustarse más adelante. Aquí la tasa de aprendizaje se establece en el valor predeterminado 0,1. Luego use la función cv en xgboost para determinar el número óptimo de árboles de decisión. La función del artículo anterior puede hacer este trabajo.
#Elija todos los predictores excepto target amp; 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, p> p>
gamma=0,
subsample=0.8,
colsample_bytree=0.8,
objetivo= 'binario:logístico', p>
nthread=4,
scale_pos_weight=1,
seed=27)
modelfit(xgb1, tren, predictores)
Como se puede ver en los resultados, cuando la tasa de aprendizaje es 0,1, el número ideal de árboles de decisión es 140. Este número puede ser mayor para usted, dependiendo 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 aparecerá. Porque 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. lt;喎?"/kf/ware/vc/" target="_blank" class="keylink"gt;vcD4NCjwvYmxvY2txdW90ZT4NCjxoMSBpZD0="Paso 2: ajuste de los parámetros de profundidad máxima y peso mínimo"gt;Paso 2: ajuste de los parámetros de profundidad máxima y peso mínimo
Primero ajustamos estos dos parámetros porque tienen un gran impacto en el resultado final. Primero, ajustamos de forma aproximada 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 de cuadrícula de alta carga. Este proceso tardará entre 15 y 30 minutos o incluso más, dependiendo del rendimiento de su sistema. También puedes elegir diferentes valores según el rendimiento de tu sistema.
param_test1 = {
'max_profundidad': rango (3, 10, 2),
'min_child_weight': rango (1, 6, 2)
}
gsearch1 = GridSearchCV(estimator = XGBClassifier( tasa_de_aprendizaje =0.1, n_estimators=140, profundidad_max=5,
min_child_weight=1, gamma=0, submuestra =0.8, colsample_bytree=0.8,
objetivo= 'binary: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_