"Derivación de fórmulas de aprendizaje automático e implementación de código" capítulo 13-LightGBM

Notas de estudio "Derivación de fórmulas de aprendizaje automático e implementación de código", registre su propio proceso de aprendizaje, compre el libro del autor para obtener contenido detallado.

LuzGBM

En lo que respecta al rendimiento de la serie de algoritmos GBDT, XGBoost ya es muy eficiente, pero no está exento de fallas. LightGBM es una versión mejorada dirigida a los defectos de XGBoost, que hace que el sistema de algoritmos GBDT sea más liviano y eficiente, y puede ser rápido y preciso . Este capítulo presenta los principios básicos de LightGBM, incluidos 直方图算法, y , para los lugares que XGBoost puede optimizar .单边梯度抽样互斥特征捆绑算法leaf-wise生长策略

1 Donde se puede optimizar XGBoost

XGBoostUtilice el algoritmo de clasificación previa para encontrar el punto de división óptimo de la característica. Aunque el algoritmo de clasificación previa puede encontrar con precisión el punto de división de la característica, este método ocupa demasiado espacio. En el caso de una gran cantidad de datos y características, afectará seriamente el rendimiento del algoritmo. XGBoostLa complejidad del algoritmo para encontrar el punto de división óptimo se puede estimar como:
complejidad = número de características × número de puntos de división de características × tamaño de muestra complejidad = número de características\veces número de puntos de división de características\veces tamaño de muestrala complejidad=número de característica×El número de puntos de división de características×
Dado queXGBoostla complejidad del tamaño de la muestra está determinada特征数,特征分裂点的数量yla dirección de optimización de también se considera desde estas tres direcciones.样本量LightGBM

2 principios básicos de LightGBM

LightGBMEl nombre completo es light gradient boosting machine(refuerzo de gradiente ligero), que es un marco de algoritmo de impulso superior de código abierto de Microsoft en 2017. Al igual que XGBoost, LightGBM también es una implementación de ingeniería del marco del algoritmo GBDT, pero es más rápido y eficiente.

2.1 Algoritmo de histograma

En orden 减少特征分裂点数量和更加高效地寻找最优特征分裂点, lightGBM es diferente del algoritmo de clasificación previa de XGBoost y utiliza el algoritmo de histograma para encontrar el punto de división de características óptimo. La idea principal es discretizar valores propios continuos de punto flotante en k enteros y construir un histograma con un ancho de k. Al atravesar cada dato de entidad, el valor discretizado se utiliza para la indexación como las estadísticas acumulativas del histograma. Después de atravesar una vez, el histograma puede acumular las estadísticas correspondientes y luego encontrar el punto de división óptimo de acuerdo con el histograma.

La esencia del histograma es una operación de discretización y binning de datos. Aunque no es un diseño de optimización particularmente novedoso, tiene una velocidad rápida y un rendimiento excelente, y el costo de cálculo y el uso de memoria se reducen considerablemente.
inserte la descripción de la imagen aquí
Otro beneficio de los histogramas es la aceleración diferencial. El histograma de un nodo hoja se puede obtener por la diferencia entre el histograma de su nodo principal y el histograma de sus nodos hermanos, lo que también puede acelerar la división de los nodos característicos.
inserte la descripción de la imagen aquí

2.2 Muestreo de gradiente unilateral

单边梯度抽样El algoritmo ( gradient-based one-side sampling, GOSS) es un algoritmo diseñado para la optimización LightGBMdesde la perspectiva de la reducción de muestrasLightGBM y es uno de los principios fundamentales de .

La idea principal del algoritmo de muestreo de gradiente unilateral es eliminar la mayoría de las muestras con pesos pequeños durante el proceso de entrenamiento desde la perspectiva de reducir las muestras, y solo calcular la ganancia de información para los datos de muestra restantes.

En el algoritmo chapter10de AdaBoost, un elemento clave del algoritmo es el peso de la muestra, y el efecto de clasificación óptimo se logra ajustando continuamente el peso de clasificación de la muestra durante el proceso de entrenamiento. Sin embargo, GBDTno existe un diseño relacionado del peso de la muestra en la serie, y GBDTel concepto de peso se reemplaza por el de gradiente de la muestra. En términos generales, las muestras con gradientes de entrenamiento pequeños tienen errores empíricos pequeños, lo que indica que esta parte de los datos ha sido bien entrenada. La idea GBDTes descartar esta parte de la muestra en el siguiente paso de ajuste residual, pero esto puede cambiar la distribución de los datos. de muestras de entrenamiento afecta la precisión del entrenamiento final.

LightGBMSe propone utilizarlo GOSS采样算法, y su propósito es retener lo más posible las muestras que son útiles para calcular la ganancia de información y mejorar la velocidad de entrenamiento del modelo. GOSSEl método básico es ordenar primero las características que deben dividirse en orden descendente de valor absoluto, tomar los datos anteriores con el valor absoluto más grande, asumiendo que el tamaño de la a%muestra es , seleccionar aleatoriamente un dato nde los datos restantes y multiplicarlo datos por Con una constante : multiplique la muestra de gradiente pequeño por un coeficiente de peso para hacer retroceder la distribución de la muestra tanto como sea posible. Este enfoque permitirá que el algoritmo se centre más en muestras que no están lo suficientemente entrenadas, y la distribución de datos original no cambiará mucho. Finalmente, use los datos para calcular la ganancia de información de esta función.(1-a)%b%b%(1-a)/ba+b

GOSSGBDTEl algoritmo está optimizado principalmente desde la perspectiva de la reducción de muestras . LightGBMEsta es una de las razones de la mayor velocidad al descartar muestras con gradientes pequeños y acelerar el entrenamiento del modelo sin perder demasiada precisión .

2.3 Algoritmo de agrupación de características mutuamente excluyentes

El algoritmo del histograma corresponde a la optimización del punto de división de características, el muestreo de gradiente unilateral corresponde a la optimización del tamaño de la muestra y, finalmente, se mantiene la optimización del número de características.

互斥特征捆绑El exclusive feature bunding, EFBalgoritmo ( ) acelera el entrenamiento del modelo al agrupar dos funciones que se excluyen mutuamente en una sola función y reducir la cantidad de funciones sin perder la información de las funciones. La mayoría de las veces, las dos características no son completamente excluyentes entre sí. Puede definir un índice de conflicto para medir el grado de exclusión no mutua de la característica. Cuando el índice de conflicto es bajo, puede agrupar las dos características que no son completamente excluyentes entre sí. , que no tiene ningún efecto sobre la precisión del modelo final demasiado impacto.

El llamado 特征互斥, es decir, dos características no serán distintas de cero al mismo tiempo , lo que one-hotes algo similar a la expresión de características de clasificación. Hay dos cuestiones clave en el algoritmo de agrupación de características mutuamente excluyentes: una es cómo juzgar qué características agrupar y la otra es cómo vincular las características, es decir, cómo tomar el valor de las características vinculadas.

Para el primer problema, el algoritmo EFB lo convierte en 图着色问题( graph coloring problem) para resolverlo. La idea básica es considerar todas las características como vértices en el gráfico, conectar dos características que no son independientes entre sí con una arista, y el peso de la arista representa la relación de conflicto de las dos características conectadas. unidos son gráficos Puntos (características) a ser coloreados en el mismo color en problemas de coloreado.

El segundo problema es determinar cómo se valoran las características vinculadas. La clave es poder separar las características originales de las características fusionadas, es decir, después de vincular una característica, aún podemos identificarla desde el límite de las características originales bundle. . EFB算法Trate de lidiar con este problema desde la perspectiva de los histogramas. El método específico es dividir diferentes valores propios en bundlediferentes histogramas en el enlace y agregar una constante de sesgo a los valores propios para solucionarlo.

Para dar un ejemplo simple, supongamos que queremos vincular dos funciones, la función A y la función B, el rango de valores de la función A es [10,20) y el rango de valores de la función B es [10, 30), podemos dar Agregue un desplazamiento de 10 al rango de valores de la característica B, luego el rango de valores de la característica B se convierte en [20, 40) y el rango de valores de la característica enlazada se convierte en [10, 40), de modo que las características A y la característica B puedan fusionarse.

2.4 estrategia de crecimiento por hojas

LightGBMTambién propone XGBoostun método de crecimiento de nodos hoja diferente al crecimiento capa por capa, es decir, un leaf-wisemétodo de crecimiento de árbol de decisión que crece por nodos hoja ( ) con restricciones de profundidad.

XGBoostEl algoritmo capa por capa level-wisetiene la ventaja de que puede optimizarse mediante múltiples subprocesos, y también es conveniente para controlar la complejidad del modelo, y no es fácil de sobreajustar. La desventaja es que todos los nodos de hoja del mismo se tratan indiscriminadamente, y la mayoría de las divisiones de nodos y los cálculos de ganancia no son necesarios, lo que genera una sobrecarga computacional adicional.

LightGBMSe propone el algoritmo para crecer por nodos de hoja leaf-wise, que es más preciso y eficiente, y puede ahorrar una sobrecarga informática innecesaria. Al mismo tiempo, para evitar que un determinado nodo crezca demasiado, se puede agregar un mecanismo de límite de profundidad para garantizar un cierto grado de precisión mientras se asegura la precisión para evitar el sobreajuste.

Además de los cuatro algoritmos mejorados anteriores, LightGBM también tiene algunas mejoras y optimizaciones en la implementación de ingeniería, como soporte directo para funciones de categoría (no es necesario realizar un procesamiento único en funciones de categoría), paralelismo eficiente y tasa de aciertos de caché (hit). optimización, etc.
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

3 Ejemplo de biblioteca nativa LightGBM

El equipo de desarrollo de Microsoft del proyecto de código abierto LightGBMproporciona una implementación de biblioteca nativa del algoritmo y lightgbm库proporciona dos interfaces principales, y el siguiente utiliza el problema de clasificación y como ejemplo para dar un ejemplo de la interfaz nativa.分类回归iris数据集lightgbm

import lightgbm as lgb
from sklearn.metrics import accuracy_score
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from matplotlib import pyplot as plt

iris = load_iris()
data, target = iris.data, iris.target
X_train, X_test, y_train, y_test = train_test_split(data, target, test_size=0.2, random_state=43)
gbm = lgb.LGBMClassifier(
    objective='multiclass',
    num_class=3,
    num_leaves=31, # 控制每个决策树中叶子节点的数量,也就是决策树的复杂度
    learning_rate=0.05,
    n_estimators=20
)

gbm.fit(X_train, y_train, eval_set=[(X_test, y_test)], early_stopping_rounds=5)
y_pred = gbm.predict(X_test, num_iteration=gbm.best_iteration_)
print(accuracy_score(y_pred, y_test))
lgb.plot_importance(gbm)
plt.show()
[1]	valid_0's multi_logloss: 1.02277
[2]	valid_0's multi_logloss: 0.943765
[3]	valid_0's multi_logloss: 0.873274
[4]	valid_0's multi_logloss: 0.810478
[5]	valid_0's multi_logloss: 0.752973
[6]	valid_0's multi_logloss: 0.701621
[7]	valid_0's multi_logloss: 0.654982
[8]	valid_0's multi_logloss: 0.611268
[9]	valid_0's multi_logloss: 0.572202
[10]	valid_0's multi_logloss: 0.53541
[11]	valid_0's multi_logloss: 0.502582
[12]	valid_0's multi_logloss: 0.472856
[13]	valid_0's multi_logloss: 0.443853
[14]	valid_0's multi_logloss: 0.417764
[15]	valid_0's multi_logloss: 0.393613
[16]	valid_0's multi_logloss: 0.370679
[17]	valid_0's multi_logloss: 0.349936
[18]	valid_0's multi_logloss: 0.330669
[19]	valid_0's multi_logloss: 0.312805
[20]	valid_0's multi_logloss: 0.296973
1.0

inserte la descripción de la imagen aquí
Dirección de Notebook_Github

Supongo que te gusta

Origin blog.csdn.net/cjw838982809/article/details/131329783
Recomendado
Clasificación