sklearn randomforestclassifier forest export_graphviz example decision classifier accuracy scikit-learn decision-tree

scikit-learn - randomforestclassifier - sklearn accuracy



clf.tree_.feature-¿Cuál es la salida?(scikit-learn) (2)

Observé que scikit-learn clf.tree_.feature devuelve valores negativos ocasionales. Por ejemplo -2. Por lo que yo entiendo, clf.tree_.feature debe devolver el orden secuencial de las características. En caso de que tengamos una matriz de nombres de funciones [''feature_one'', ''feature_two'', ''feature_three''] , entonces -2 se referiría a feature_two . Estoy sorprendido con el uso del índice negativo. Tendría más sentido referirse a feature_two por el índice 1. (-2 es una referencia conveniente para la digestión humana, no para el procesamiento de la máquina). ¿Lo estoy leyendo correctamente?

Actualización: Aquí hay un ejemplo:

def leaf_ordering(): X = np.genfromtxt(''X.csv'', delimiter='','') Y = np.genfromtxt(''Y.csv'',delimiter='','') dt = DecisionTreeClassifier(min_samples_leaf=10, random_state=99) dt.fit(X, Y) print(dt.tree_.feature)

Aquí están los archivos X e Y

Aquí está el resultado:

[ 8 9 -2 -2 9 4 -2 9 8 -2 -2 0 0 9 9 8 -2 -2 9 -2 -2 6 -2 -2 -2 2 -2 9 8 6 9 -2 -2 -2 8 9 -2 9 6 -2 -2 -2 6 -2 -2 9 -2 6 -2 -2 2 -2 -2]


Al leer el código fuente de Cython para el generador de árbol, vemos que los -2 son solo valores ficticios para el atributo de división de características de los nodos hoja.

Línea 63

TREE_UNDEFINED = -2

Línea 359

if is_leaf: # Node is not expandable; set node as leaf node.left_child = _TREE_LEAF node.right_child = _TREE_LEAF node.feature = _TREE_UNDEFINED node.threshold = _TREE_UNDEFINED


Un poco de información adicional para cualquiera que tropiece con esta vieja pregunta tal como yo lo hice.

A medida que el OP escribe, clr.tree_.feature devuelve los nodos / hojas en un orden secuencial como un algoritmo de búsqueda de profundidad. Primero, comienza con el nodo raíz y luego sigue a los hijos de la izquierda hasta que alcanza una hoja (codificada con -2), cuando alcanza la hoja sube al árbol de hoja en hoja hasta que alcanza un nodo. Una vez que llega a un nodo, desciende nuevamente en la jerarquía hasta que alcanza un nodo hoja.

Mirando el ejemplo de OP, el nodo raíz es la característica 8 que tiene un elemento secundario izquierdo, función 9. Entonces, si descendemos la jerarquía, inmediatamente alcanzamos un nodo hoja. Entonces comenzamos a subir hasta que llegamos a un nodo no hoja. El siguiente nodo (el secundario derecho) también es un nodo de hoja (los dos hijos de la función 9 son ambos nodos hoja) y luego, trepando por el árbol al que llegamos, vuelve a mostrar la característica 9 en el primer nivel de la jerarquía. Aquí la característica 9 tiene un elemento secundario izquierdo, la función 4, que tiene un nodo hoja como elemento secundario izquierdo, luego observamos el elemento secundario derecho de la función 4, que es la característica 9 nuevamente, y así sucesivamente.