Análisis en profundidad del algoritmo de clasificación binaria GBDT (con implementación de código)

Directorio:

  1. Introducción al algoritmo de clasificación GBDT

  2. Algoritmo de clasificación binaria GBDT

  • 2.1 Función de pérdida de registro de regresión logística

  • 2.2 GBDT dos principio de clasificación

  • Ejemplo de algoritmo de clasificación binaria GBDT

  • Algoritmo de clasificación binario GBDT de desgarro manual

  • 4.1 Implementación del algoritmo de clasificación binaria GBDT con Python3

  • 4.2 Uso de sklearn para implementar el algoritmo de clasificación binaria GBDT

  • Funciones de pérdida comunes para tareas de clasificación GBDT

  • Resumen

  • Referencia

Una descripción general del contenido principal de este artículo:

1 Introducción al algoritmo de clasificación GBDT

Si GBDT se usa para clasificación o regresión, el árbol de regresión CART siempre se ha usado. GBDT no elige un árbol de clasificación porque la tarea que elegimos es una tarea de clasificación. La razón principal aquí es que cada ronda de entrenamiento GBDT se basa en el gradiente negativo del modelo de entrenamiento anterior. Esto requiere que en cada iteración, la salida de la etiqueta real menos el clasificador débil sea significativa, es decir, el residual sea significativo. Si el clasificador débil seleccionado es un árbol de clasificación, la resta de categoría no tiene sentido. Para tales problemas, puede usar dos métodos para resolver:

  • Se adopta la función de pérdida exponencial, de modo que GBDT degenera en Adaboost, que puede resolver el problema de clasificación;

  • Use una función de pérdida de probabilidad logarítmica similar a la regresión logística, de modo que la diferencia entre el valor de probabilidad del resultado y el valor de probabilidad verdadero se pueda usar como un residuo para ajustar;

Echemos un vistazo a cómo clasificar GBDT a través de los dos problemas de clasificación.

Algoritmo de clasificación binaria de 2 GBDT

2.1 Función de pérdida de registro de regresión logística

La función de predicción de la regresión logística es:

 

El valor de la función tiene un significado especial, que representa la probabilidad de que se tome el resultado, por lo que las probabilidades de que el resultado de la clasificación de entrada sea categoría y categoría son:

 

 

A continuación derivamos la función de pérdida logarítmica de la regresión logística basada en la fórmula anterior. La fórmula anterior se puede escribir como:

Luego tome la función de probabilidad como:

Debido a que y y los valores extremos se obtienen en el mismo lugar, entonces tomamos la función log-verosimilitud como:

La estimación de máxima verosimilitud es encontrar el valor máximo. Aquí, tomar el número opuesto se puede resolver mediante el método de descenso de gradiente, y se obtienen los parámetros requeridos:

2.2 GBDT dos principio de clasificación

La función de pérdida de una sola muestra de regresión logística se puede expresar como:

Entre ellos, está el resultado de la predicción de regresión logística. Suponiendo que el alumno actual está después de la primera iteración, después de reemplazarlo con la fórmula anterior, la función de pérdida se puede escribir como:

Entre ellos, el valor de respuesta correspondiente al primer árbol es (el gradiente negativo de la función de pérdida, es decir, el pseudo residual):

Para el árbol de decisión generado, calcule el mejor valor de ajuste residual de cada nodo hoja como:

Como no existe una solución de forma cerrada (solución de forma cerrada) , generalmente usamos valores aproximados en su lugar:

Proceso de sustitución de aproximación suplementaria:
suponga que solo hay una muestra:

Orden, entonces 

Buscando la primera derivada:

Encuentra la segunda derivada:

Para la expansión de segundo orden de Taylor de:

  Al tomar el valor extremo, la expresión de segundo orden anterior es:

El proceso completo del algoritmo de clasificación binaria GBDT es el siguiente:

(1) Inicialice al primer alumno débil:

Entre ellos, se encuentra la proporción en la muestra de capacitación, que utiliza información previa para inicializar al alumno.

(2) Para el establecimiento de un árbol de regresión de clasificación:

a) Sí, calcule el valor de respuesta (gradiente negativo de la función de pérdida, es decir, el seudo residual) correspondiente al primer árbol:

b) Para, usando el árbol de regresión CART para ajustar los datos para obtener el primer árbol de regresión, el área de nodo hoja correspondiente es, donde y son el número de nodos hoja del primer árbol de regresión.

c) Para el área del nodo hoja, calcule el mejor valor de ajuste:

d) Actualice al alumno fuerte:

(3) Obtenga la expresión del aprendiz fuerte final:

Se puede ver en el proceso anterior que, excepto por el cálculo del gradiente negativo causado por la función de pérdida y el cálculo del mejor valor de ajuste residual del nodo hoja, el proceso de clasificación binaria GBDT y el algoritmo de regresión GBDT es básicamente similar. Entonces, ¿cómo se clasifica el GBDT binario?

Ordenando la fórmula de regresión logística, podemos obtener, dónde está la probabilidad de predecir una entrada dada como una muestra positiva. La regresión logística utiliza un modelo lineal para ajustar las probabilidades de registro del evento Y = 1 | x. El algoritmo de clasificación binario GBDT es similar a la idea de regresión logística. Una serie de árboles de elevación de gradiente se utilizan para ajustar esta probabilidad logarítmica. El modelo de clasificación se puede expresar como:

 

3 ejemplos de algoritmo de clasificación binaria GBDT

3.1 Introducción del conjunto de datos

El conjunto de entrenamiento se muestra en la siguiente tabla. Las características de un conjunto de datos son la edad y el peso. La altura es mayor que 1.5 metros como límite de clasificación. La altura es mayor que 1.5 metros y la etiqueta es 1, y la altura y menos de 1.5 metros son 0. Datos.

Los datos de la prueba se muestran en la siguiente tabla: solo hay un conjunto de datos, con una edad de 25 y un peso de 65. ¿Usamos el modelo GBDT entrenado en el conjunto de entrenamiento para predecir si la altura de este conjunto de datos es mayor a 1.5 metros?

3.2 Etapa de entrenamiento modelo

Ajuste de parámetros:

  • Tasa de aprendizaje: tasa de aprendizaje = 0.1

  • Número de iteraciones: n_trees = 5

  • La profundidad del árbol: max_depth = 3

1) Inicialice al alumno débil:

2) Para el establecimiento de un árbol de regresión de clasificación:

Como establecemos el número de iteraciones: n_trees=5esta es la configuración.

Primero calcule el gradiente negativo De acuerdo con la pérdida de registro anterior, el gradiente negativo (seudo residual, residual aproximado) es:

Sabemos que los algoritmos de elevación de gradiente, la clave es usar el valor del gradiente negativo de la función de pérdida como una aproximación de los residuos en el algoritmo de árbol de regresión para ajustar un árbol de regresión. Aquí, por conveniencia, llamamos al gradiente negativo residual.

Los resultados del cálculo de los residuos ahora se enumeran de la siguiente manera:

En este momento, el residuo se usa como la etiqueta de la muestra para entrenar al alumno débil, es decir, los datos de la siguiente tabla:

Luego encuentre el mejor nodo de partición del árbol de regresión y recorra cada valor posible de cada entidad. Desde el valor de la característica de edad hasta el final, y la característica de peso hasta el final, calcule el error cuadrado (Error cuadrado) de los dos grupos de datos después de la división, la pérdida cuadrada del nodo izquierdo y la pérdida cuadrada del nodo derecho, y encuentre el que minimiza la pérdida cuadrada El nodo dividido es el mejor nodo dividido.

Por ejemplo: use la edad como nodo de división, divida la muestra menos que al nodo izquierdo y la muestra mayor o igual que 7 al nodo derecho. El nodo izquierdo incluye, el nodo derecho incluye muestras ,,,, y todas las divisiones posibles se muestran en la siguiente tabla:

La pérdida cuadrada total mínima de los puntos de división anteriores es que hay dos puntos de división: edad y peso, por lo que elegimos aleatoriamente uno como punto de división, aquí elegimos la edad. Ahora nuestro primer árbol se ve así:

La profundidad del árbol en los parámetros que establecemos, la profundidad max_depth=3del árbol es solo ahora y necesitamos dividirlo nuevamente, esta vez necesitamos dividir los nodos izquierdo y derecho por separado. Condiciones:

  • La profundidad no alcanzó el máximo. La profundidad del árbol se establece en 3, lo que significa que necesita crecer en 3 capas;

  • Número de muestras puntuales> = min_samples_split;

  • Los valores de etiqueta de las muestras en este nodo son diferentes. Si los valores son los mismos, significa que se han dividido muy bien y no hay necesidad de dividirlos (este programa cumple con esta condición, por lo que el árbol tiene solo 2 niveles)

Al final, nuestro primer árbol de regresión se ve así:

En este punto, nuestro árbol satisface la configuración, necesitamos hacer una cosa más, asignar un parámetro a cada nodo hoja de este árbol para que se ajuste al residual.

De acuerdo con los resultados de la división anterior, por conveniencia de presentación, el primer nodo hoja se especifica de izquierda a derecha, y el proceso de cálculo del valor es el siguiente:

 

 

El primer árbol en este momento se ve así:

Próxima actualización rápida alumno, tenemos que utilizar la tasa de aprendizaje: learning_rate=0.1por lrexpreso. La fórmula de actualización es:

¿Por qué usar la tasa de aprendizaje? Esta es la idea de Shrinkage: si se agregan todos los valores de ajuste cada vez, es decir, la tasa de aprendizaje, es fácil aprender en un solo paso y provocar que GBDT se sobreajuste.

Repita este paso hasta el   final y finalmente construya un árbol.

A continuación se mostrará la estructura final de cada árbol. Estas cifras son generadas por el código en mi GitHub. Los estudiantes interesados ​​pueden ejecutar el código.

https://github.com/Microstrong0305/WeChat-zhihu-csdnblog-code/tree/master/Ensemble%20Learning/GBDT_GradientBoostingBinaryClassifier

El primer árbol:

El segundo árbol:

El tercer árbol:

El cuarto árbol:

Quinto árbol

3) Obtenga el último alumno fuerte:

3.3 Etapa de predicción del modelo

  •  

  • En, la edad de la muestra de prueba es mayor que la edad del nodo de división, por lo que se predice que será.

  • En, la edad de la muestra de prueba es mayor que la edad del nodo de división, por lo que se predice que será.

  • En, la edad de la muestra de prueba es mayor que la edad del nodo de división, por lo que se predice que será.

  • En, la edad de la muestra de prueba es mayor que la edad del nodo de división, por lo que se predice que será.

  • En, la edad de la muestra de prueba es mayor que la edad del nodo de división, por lo que se predice que será.

El resultado final de la predicción es:

4 Desgarro de mano GBDT dos algoritmo de clasificación

Todos los conjuntos de datos y códigos de este artículo están en GitHub, dirección: https://github.com/Microstrong0305/WeChat-zhihu-csdnblog-code/tree/master/Ensemble%20Learning

4.1 Implementación del algoritmo de clasificación binaria GBDT con Python3

Biblioteca de Python requerida:

pandas、PIL、pydotplus、matplotlib
br

Cuando la pydotplusbiblioteca llamará automáticamente Graphviz, por lo que es necesario ir a Graphvizla página oficial de descarga graphviz-2.38.mside la instalación, a continuación, el directorio de instalación binse añade a las variables de entorno del sistema, y por último, reinicie el equipo.

Debido a la gran cantidad de código para implementar el algoritmo de clasificación binaria GBDT con Python3, no enumeraré el código detallado aquí. Los estudiantes interesados ​​pueden consultar GitHub en https://github.com/Microstrong0305/WeChat-zhihu- csdnblog-code / tree / master / Ensemble% 20Learning / GBDT_GradientBoostingBinaryClassifier

4.2 Uso de sklearn para implementar el algoritmo de clasificación binaria GBDT

import numpy as np
from sklearn.ensemble import GradientBoostingClassifier


'''
调参:
loss:损失函数。有deviance和exponential两种。deviance是采用对数似然,exponential是指数损失,后者相当于AdaBoost。
n_estimators:最大弱学习器个数,默认是100,调参时要注意过拟合或欠拟合,一般和learning_rate一起考虑。
learning_rate:步长,即每个弱学习器的权重缩减系数,默认为0.1,取值范围0-1,当取值为1时,相当于权重不缩减。较小的learning_rate相当于更多的迭代次数。
subsample:子采样,默认为1,取值范围(0,1],当取值为1时,相当于没有采样。小于1时,即进行采样,按比例采样得到的样本去构建弱学习器。这样做可以防止过拟合,但是值不能太低,会造成高方差。
init:初始化弱学习器。不使用的话就是第一轮迭代构建的弱学习器.如果没有先验的话就可以不用管


由于GBDT使用CART回归决策树。以下参数用于调优弱学习器,主要都是为了防止过拟合
max_feature:树分裂时考虑的最大特征数,默认为None,也就是考虑所有特征。可以取值有:log2,auto,sqrt
max_depth:CART最大深度,默认为None
min_sample_split:划分节点时需要保留的样本数。当某节点的样本数小于某个值时,就当做叶子节点,不允许再分裂。默认是2
min_sample_leaf:叶子节点最少样本数。如果某个叶子节点数量少于某个值,会同它的兄弟节点一起被剪枝。默认是1
min_weight_fraction_leaf:叶子节点最小的样本权重和。如果小于某个值,会同它的兄弟节点一起被剪枝。一般用于权重变化的样本。默认是0
min_leaf_nodes:最大叶子节点数
'''


gbdt = GradientBoostingClassifier(loss='deviance', learning_rate=0.1, n_estimators=5, subsample=1
                                  , min_samples_split=2, min_samples_leaf=1, max_depth=3
                                  , init=None, random_state=None, max_features=None
                                  , verbose=0, max_leaf_nodes=None, warm_start=False
                                  )


train_feat = np.array([[1, 5, 20],
                       [2, 7, 30],
                       [3, 21, 70],
                       [4, 30, 60],
                       ])
train_label = np.array([[0], [0], [1], [1]]).ravel()


test_feat = np.array([[5, 25, 65]])
test_label = np.array([[1]])
print(train_feat.shape, train_label.shape, test_feat.shape, test_label.shape)


gbdt.fit(train_feat, train_label)
pred = gbdt.predict(test_feat)


total_err = 0
for i in range(pred.shape[0]):
    print(pred[i], test_label[i])
    err = (pred[i] - test_label[i]) / test_label[i]
    total_err += err * err
print(total_err / pred.shape[0])

La dificultad de implementar el algoritmo de clasificación binaria GBDT con la biblioteca GBDT en sklearn es cómo ajustar mejor los siguientes parámetros:

Dirección de GitHub para implementar el algoritmo de clasificación binaria GBDT con sklearn: https://github.com/Microstrong0305/WeChat-zhihu-csdnblog-code/tree/master/Ensemble%20Learning/GBDT_Classification_sklearn

5 funciones de pérdida comunes para tareas de clasificación GBDT

Para el algoritmo de clasificación GBDT, la función de pérdida generalmente tiene dos tipos de función de pérdida de registro y función de pérdida exponencial:

(1) Si es una función de pérdida exponencial, la expresión de la función de pérdida es:

Para el cálculo del gradiente negativo y el mejor ajuste del gradiente negativo de los nodos de hoja, consulte el proceso del algoritmo Adaboost.

(2) Si se trata de una función de pérdida logarítmica, se divide en clasificación binaria y clasificación multivariante.Este artículo presenta principalmente la función de pérdida de la clasificación binaria GBDT.

6 Resumen

En este artículo, primero presentamos brevemente cómo convertir el algoritmo de regresión GBDT en un algoritmo de clasificación; luego derivamos el principio del algoritmo de clasificación binaria GBDT de la función de pérdida logarítmica de la regresión logística; en segundo lugar, no solo el algoritmo de clasificación binaria GBDT usando Python3, sino también Sklearn se usa para implementar el algoritmo de clasificación binaria GBDT; finalmente, se introducen las funciones de pérdida comunes en la tarea de clasificación GBDT. GBDT puede resolver perfectamente las tareas de clasificación binaria, entonces, ¿es efectivo para múltiples tareas de clasificación? Si funciona, ¿cómo hace GBDT la clasificación múltiple? Estos problemas requieren que exploremos constantemente y excavemos principios más profundos de GBDT. ¡Esperemos el rendimiento de GBDT en tareas de varias clases!

 

Fuente del artículo: https://mp.weixin.qq.com/s/XLxJ1m7tJs5mGq3WgQYvGw#

Publicado 45 artículos originales · ganado elogios 2 · Vistas 5228

Supongo que te gusta

Origin blog.csdn.net/xixiaoyaoww/article/details/105182792
Recomendado
Clasificación