Pregunta ¿Cómo se determinan feature_importances en RandomForestClassifier?


Tengo una tarea de clasificación con una serie de tiempo como la entrada de datos, donde cada atributo (n = 23) representa un punto específico en el tiempo. Además del resultado de la clasificación absoluta que me gustaría averiguar, qué atributos / fechas contribuyen al resultado en qué medida. Por lo tanto, solo estoy usando el feature_importances_, que funciona bien para mí

Sin embargo, me gustaría saber cómo se calculan y qué medida / algoritmo se usa. Desafortunadamente no pude encontrar ninguna documentación sobre este tema.


74
2018-04-04 11:53


origen


Respuestas:


De hecho, hay varias formas de obtener "importancias" de características. Como a menudo, no hay un consenso estricto sobre lo que significa esta palabra.

En scikit-learn, implementamos la importancia como se describe en [1] (a menudo citado, pero desafortunadamente raramente leído ...). A veces se denomina "importancia de gini" o "impureza media de disminución" y se define como la disminución total de la impureza del nodo (ponderada por la probabilidad de alcanzar ese nodo (que se aproxima por la proporción de muestras que llegan a ese nodo) promediada en total árboles del conjunto.

En la literatura o en algunos otros paquetes, también puede encontrar importancias de características implementadas como la "precisión media de disminución". Básicamente, la idea es medir la disminución en la precisión de los datos OOB cuando permutes aleatoriamente los valores para esa característica. Si la disminución es baja, entonces la característica no es importante, y viceversa.

(Tenga en cuenta que ambos algoritmos están disponibles en el paquete randomForest R).

[1]: Breiman, Friedman, "Árboles de clasificación y regresión", 1984.


113
2018-04-04 21:16



La forma habitual de calcular los valores de importancia de la característica de un solo árbol es la siguiente:

  1. Inicializas una matriz feature_importances de todos los ceros con tamaño n_features.

  2. recorre el árbol: para cada nodo interno que se divide en la característica i calcula la reducción de error de ese nodo multiplicado por la cantidad de muestras que se enrutaron al nodo y agrega esta cantidad a feature_importances[i].

La reducción de errores depende del criterio de impureza que use (por ejemplo, Gini, Entropy, MSE, ...). Es la impureza del conjunto de ejemplos que se enruta al nodo interno menos la suma de las impurezas de las dos particiones creadas por la división.

Es importante que estos valores sean relativos a un conjunto de datos específico (tanto la reducción de errores como el número de muestras son específicos del conjunto de datos), por lo que estos valores no se pueden comparar entre diferentes conjuntos de datos.

Hasta donde sé, hay formas alternativas de calcular los valores de importancia de las características en los árboles de decisión. Una breve descripción del método anterior se puede encontrar en "Elements of Statistical Learning" por Trevor Hastie, Robert Tibshirani y Jerome Friedman.


39
2018-04-04 19:32



Es la relación entre el número de muestras enrutadas a un nodo de decisión que involucra esa característica en cualquiera de los árboles del conjunto sobre el número total de muestras en el conjunto de entrenamiento.

Las características que están involucradas en los nodos de nivel superior de los árboles de decisión tienden a ver más muestras, por lo tanto, es probable que tengan más importancia.

Editar: esta descripción es solo parcialmente correcta: las respuestas de Gilles y Peter son la respuesta correcta.


8
2018-04-04 12:22



Como @GillesLouppe señaló anteriormente, scikit-learn actualmente implementa la métrica "disminución media de impurezas" para las importancias de las características. Personalmente, considero que la segunda métrica es un poco más interesante, en la que permuta aleatoriamente los valores de cada una de sus características una a una y ve cuánto empeora su desempeño fuera de la bolsa.

Dado que lo que persigue con la importancia de las características es cuánto contribuye cada función al rendimiento predictivo de su modelo en general, la segunda métrica realmente le da una medida directa de esto, mientras que la "impureza media de disminución" es solo un buen proxy.

Si está interesado, escribí un pequeño paquete que implementa la métrica Permutation Importance y se puede usar para calcular los valores de una instancia de una clase de bosque aleatorio de scikit-learn:

https://github.com/pjh2011/rf_perm_feat_import

Editar: Esto funciona para Python 2.7, no 3


6
2018-01-06 22:25