Ejemplo práctico: Extracción de datos de un árbol de decisión con sklearn (código Python incluido)

Índice

    1. Extracción de estructura del árbol
    1. Explicación del ejemplo
  • 2.1. Extracción de la estructura del árbol
  • 2.2. Extracción de inforamción de nodos

Después de construir un árbol de decisión con sklearn, es posible obtener su estructura mediante los siguientes atributos:

1. Extracción de estructura del árbol

Los nodos izquierdos y derechos se obtienen mediante:

  • nodos_izquierda: clf.tree_.children_left
  • nodos_derecha: clf.tree_.children_right

Otras propiedades clave incluyen:

  • atributo: clf.tree_.feature
  • limite: clf.tree_.threshold
  • impureza: clf.tree_.impurity
  • muestra_nodo: clf.tree_.n_node_samples
  • distribucion: clf.tree_.value

2. Explicación del ejemplo

Código:


# -*- coding: utf-8 -*-
from sklearn.datasets import load_iris
from sklearn import tree
import graphviz 

# Preparación de datos
iris = load_iris()  # Carga de datos

# Entrenamiento del modelo
modelo = tree.DecisionTreeClassifier(random_state=0, max_depth=3)        
modelo = modelo.fit(iris.data, iris.target)     

# Visualización de la estructura
datos_dot = tree.export_graphviz(modelo) 
grafico = graphviz.Source(datos_dot)  
grafico  # Ejecutar de forma independiente

# Extracción de datos del modelo
nodos_izquierda = modelo.tree_.children_left  # Nodos izquierdos
nodos_derecha = modelo.tree_.children_right    # Nodos derechos
atributo = modelo.tree_.feature                # Atributo de división
limite = modelo.tree_.threshold                # Umbral de división
impureza = modelo.tree_.impurity               # Impureza (gini)
muestra_nodo = modelo.tree_.n_node_samples     # Cantidad de muestras
distribucion = modelo.tree_.value              # Distribución de muestras

# Impresión de resultados
print("nodos_izquierda:", nodos_izquierda)        
print("nodos_derecha:", nodos_derecha)
print("atributo:", atributo)
print("limite:", limite)
print("impureza:", impureza)
print("muestra_nodo:", muestra_nodo)
print("distribucion:", distribucion)

Salida:


nodos_izquierda: [ 1 -1  3  4 -1 -1  7 -1 -1]
nodos_derecha: [ 2 -1  6  5 -1 -1  8 -1 -1]
atributo: [ 3 -2 3 2 -2 -2 2 -2 -2]
limite: [ 0.80000001 -2.  1.75   4.95000005 -2.   -2.  4.85000014 -2.   -2.]
impureza: [0.66666667 0.  0.5   0.16803841 0.04079861 0.44444444 0.04253308 0.44444444 0.  ]
muestra_nodo: [150 50 100 54 48  6 46  3 43]
distribucion: [[[50. 50. 50.]] [[50.  0.  0.]] [[ 0. 50. 50.]] [[ 0. 49.  5.]] [[ 0. 47.  1.]] [[ 0.  2.  4.]] [[ 0.  1. 45.]] [[ 0.  1.  2.]] [[ 0.  0. 43.]]]

2.1. Extracción de la estructura del árbol

La estructura del árbol se define mediente nodos_izquierda y nodos_derecha. Por ejemplo:

  • El nodo 0 tiane hijo izquierdo en nodos_izquierda[0] = 1 y derecho en nodos_derecha[0] = 2
  • El nodo 1 es hoja (nodos_izquierda[1] = -1)
  • El nodo 2 tiene hijo izquierdo en nodos_izquierda[2] = 3 y derecho en nodos_derecha[2] = 6

2.2. Extracción de información de nodos

Para el nodo 0:

  • Atributo de división: atributo[0] = 3
  • Umbral: limite[0] = 0.8
  • Impureza: impureza[0] = 0.66666667
  • Muestras: muestra_nodo[0] = 150
  • Distribución: distribucion[0] = [50, 50, 50]

Los nodos hoja tienen valores negativos en atributo y limite, indicando que no requieren división.

Etiquetas: sklearn arbol-de-decision machine-learning Python

Publicado el 8-17 12:16