¿Cómo interpretar la salida de importancia XGBoost?

37

Ejecuté un modelo xgboost. No sé exactamente cómo interpretar la salida de xgb.importance.

¿Cuál es el significado de ganancia, cobertura y frecuencia y cómo los interpretamos?

Además, ¿qué significa Split, RealCover y RealCover%? Tengo algunos parámetros extra aquí

¿Hay algún otro parámetro que pueda brindarme más información sobre las características importantes?

De la documentación de R, entiendo que Gain es algo similar a Ganancia de información y Frecuencia es la cantidad de veces que se usa una característica en todos los árboles. No tengo idea de qué es Cover.

Ejecuté el código de ejemplo proporcionado en el enlace (y también intenté hacer lo mismo en el problema en el que estoy trabajando), pero la definición dividida dada allí no coincidía con los números que calculé.

importance_matrix

Salida:

           Feature         Gain        Cover    Frequence
  1:            xxx 2.276101e-01 0.0618490331 1.913283e-02
  2:           xxxx 2.047495e-01 0.1337406946 1.373710e-01
  3:           xxxx 1.239551e-01 0.1032614896 1.319798e-01
  4:           xxxx 6.269780e-02 0.0431682707 1.098646e-01
  5:          xxxxx 6.004842e-02 0.0305611830 1.709108e-02

214:     xxxxxxxxxx 4.599139e-06 0.0001551098 1.147052e-05
215:     xxxxxxxxxx 4.500927e-06 0.0001665320 1.147052e-05
216:   xxxxxxxxxxxx 3.899363e-06 0.0001536857 1.147052e-05
217: xxxxxxxxxxxxxx 3.619348e-06 0.0001808504 1.147052e-05
218:  xxxxxxxxxxxxx 3.429679e-06 0.0001792233 1.147052e-05
Ethan
fuente

Respuestas:

40

A partir de su pregunta, supongo que está utilizando xgboost para ajustar árboles potenciados para la clasificación binaria. La matriz de importancia es en realidad un objeto data.table con la primera columna que enumera los nombres de todas las características realmente utilizadas en los árboles potenciados.

El significado de la tabla de datos de importancia es el siguiente:

  1. La ganancia implica la contribución relativa de la característica correspondiente al modelo calculada tomando la contribución de cada característica para cada árbol en el modelo. Un valor más alto de esta métrica en comparación con otra característica implica que es más importante para generar una predicción.
  2. La métrica de cobertura significa el número relativo de observaciones relacionadas con esta característica. Por ejemplo, si tiene 100 observaciones, 4 características y 3 árboles, y suponga que la función1 se usa para decidir el nodo de hoja para 10, 5 y 2 observaciones en árbol1, árbol2 y árbol3 respectivamente; entonces la métrica contará la cobertura de esta característica como 10 + 5 + 2 = 17 observaciones. Esto se calculará para las 4 características y la cobertura será 17 expresada como un porcentaje para las métricas de cobertura de todas las funciones.
  3. La frecuencia (/ 'Frecuencia') es el porcentaje que representa el número relativo de veces que ocurre una característica particular en los árboles del modelo. En el ejemplo anterior, si la característica 1 ocurrió en 2 divisiones, 1 división y 3 divisiones en cada uno de los árboles1, árbol2 y árbol3; entonces el peso para la característica 1 será 2 + 1 + 3 = 6. La frecuencia de la característica 1 se calcula como su peso porcentual sobre los pesos de todas las características.

La ganancia es el atributo más relevante para interpretar la importancia relativa de cada característica.

Todas las medidas son relativas y, por lo tanto, todas suman uno, un ejemplo de un modelo xgboost ajustado en R es:

> sum(importance$Frequence)
[1] 1
> sum(importance$Cover)
[1] 1
> sum(importance$Gain)
[1] 1
Sandeep S. Sandhu
fuente
1
¿La cubierta solo se calcula en función de los nodos de hoja o en todas las divisiones?
fanfabbb
3

Gracias Sandeep por tu respuesta detallada. Me gustaría corregir que la cobertura se calcula en todas las divisiones y no solo en los nodos hoja.

Veamos un ejemplo simple con los datos proporcionados por la biblioteca xgboost.

library('xgboost')

data(agaricus.train, package='xgboost')
data(agaricus.test, package='xgboost')

train <- agaricus.train
test <- agaricus.test

X = train$data

y = train$label

bst <- xgboost(data = X, label = y, max.depth = 2,
           eta = 1, nthread = 2, nround = 2,objective = "binary:logistic",
           reg_lambda = 0, reg_alpha = 0)

xgb.model.dt.tree(agaricus.train$data@Dimnames[[2]], model = bst)

xgb.importance(agaricus.train$data@Dimnames[[2]], bst)

Salida -

Volcado de árboles

Matriz de importancia

Tratemos de calcular la cobertura de olor = ninguno en la matriz de importancia (0.495768965) del vertedero de árboles.

La cubierta de cada división donde se usa olor = ninguno es 1628.2500 en la ID de nodo 0-0 y 765.9390 en la ID de nodo 1-1.

Cobertura total de todas las divisiones (sumando a través de la columna de cobertura en el volcado del árbol) = 1628.2500 * 2 + 786.3720 * 2

Cobertura de olor = ninguno en la matriz de importancia = (1628.2500 + 765.9390) / (1628.2500 * 2 + 786.3720 * 2)

Por lo tanto, estamos seguros de que la cobertura se calcula en todas las divisiones.

Natesh Arunachalam
fuente