Índice
-
- Extracción de estructura del árbol
-
- 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_leftnodos_derecha:clf.tree_.children_right
Otras propiedades clave incluyen:
atributo:clf.tree_.featurelimite:clf.tree_.thresholdimpureza:clf.tree_.impuritymuestra_nodo:clf.tree_.n_node_samplesdistribucion: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] = 1y derecho ennodos_derecha[0] = 2 - El nodo 1 es hoja (
nodos_izquierda[1] = -1) - El nodo 2 tiene hijo izquierdo en
nodos_izquierda[2] = 3y derecho ennodos_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.