• Saltar al contenido principal
  • Skip to secondary menu
  • Saltar a la barra lateral principal
  • Saltar al pie de página
  • Inicio
  • Secciones
    • Ciencia de datos
    • Criptografía
    • Herramientas
    • Machine Learning
    • Noticias
    • Opinión
    • Productividad
    • Programación
      • JavaScript
      • Julia
      • Matlab
      • Python
      • R
  • Programación
    • JavaScript
    • Julia
    • Matlab
    • Python
    • R
  • Laboratorio
    • Estadística
      • Calculadora del Tamaño Muestral en Encuestas
      • Calculadora de estadísticos descriptivos
      • Test de normalidad
      • Calculadora de contrastes de hipotesis
      • Calculadora de tamano del efecto
      • Simulador de Regresión Lineal con Ruido
      • Visualizador de PCA
      • Visualizador de Series Temporales
      • Simulador de Regresión Logística
      • Simulador de K-Means
      • Simulador de DBSCAN
      • Detector de la Ley de Benford
    • Probabilidad
      • Calculadora de Probabilidad de Distribuciones
      • Calculadora de Probabilidades de Lotería
      • Simulador del Problema de Monty Hall
      • Simulador de la Estrategia Martingala
    • Finanzas
      • Calculadora de Préstamos e Hipotecas
      • Conversor TIN ↔ TAE
      • Calculadora DCA con ajuste por inflación
      • Simulador FIRE (Financial Independence, Retire Early)
    • Herramientas
      • Formateador / Minificador de JSON
      • Comparador y Formateador de Texto y JSON
      • Formateador y Tester de Expresiones Regulares
      • Inspector de JWT
      • Generador y verificador de hashes
      • Codificador / Decodificador Base64 y URL
      • Conversor de bases numericas
      • Conversor de Timestamp Unix
      • Conversor de colores
      • Generador de UUIDs
    • Juegos
      • Tres en Raya
      • Nim con Q-Learning
    • Más
      • Método D’Hondt
      • Generador de Contraseñas Seguras
  • Noticias
  • Boletín
  • Contacto
  • Tienda
    • Libros
    • Equipamiento de oficina
    • Equipamiento en movilidad

Analytics Lane

Ciencia e ingeniería de datos aplicada

  • Ciencia de datos
  • Machine Learning
  • IA Generativa
  • Python
  • Pandas
  • NumPy
  • R
  • Excel

Visualización de árboles de decisión en Python con PyDotPlus

noviembre 9, 2018 Por Daniel Rodríguez 4 comentarios
Tiempo de lectura: 4 minutos

Los árboles de decisión son un de la familia de modelos de aprendizaje automático más utilizados. Se pueden utilizar tanto para resolver problemas de clasificación como de regresión. Una de sus principales ventajas es la facilidad con la que se puede interpretar los resultados en base a reglas. Permitiendo no solo obtener un resultado, sino que inspeccionar los motivos por los que se llega a una predicción dada. Por ejemplo, en un modelo que permita predecir la aparición de fallos en una maquinaria se puede explorar el proceso lógico del algoritmo, identificando los valores de las características que llevar a una conclusión dada. Esto permite nos solo utilizar el modelo para predecir un valor, sino actuar sobre las causas para evitar la aparición de resultados no deseados. Siendo la visualización de árboles de decisión una forma de facilitar esto.

Para la visualización de los árboles de decisión en Python se puede utilizar la librería PyDotPlus. Esta es una versión mejorada del antiguo proyecto pydot que proporciona una interfaz Python al lenguaje de Graphviz.

Instalación de PyDotPlus en Anaconda

En el entorno de trabajo Anaconda no se encuentra instalada por defecto la librería PyDotPlus, por lo que es necesario instalarla antes de poder utilizarla. Lo que se puede realizar mediante el gestor de paquetes conda. Para ello solamente se ha de abrir una terminal y lanzar la siguiente línea de comando

Nuevo simulador FIRE en el laboratorio de aplicaciones de Analytics Lane
En Analytics Lane
Nuevo simulador FIRE en el laboratorio de aplicaciones de Analytics Lane

conda install pydotplus

Al lanzar este comando conda buscará los paquetes necesarios y pedirá confirmación para su instalación. Una vez finalizado el proceso la librería se podrá utilizar sin problemas.

Alternativamente se puede realizar la instalación del paquete mediante pip. Aunque en este caso puede ser necesario resolver manualmente dependencias. Para ello se ha de ejecutar el siguiente comando en una terminal:

pip install pydotplus

Para funcionar correctamente necesitamos que en nuestra máquina esté instalado Graphviz, si no es así se puede hacer que conda lo instale al mismo tiempo que el paquete si se usa el comando:

conda install -c conda-forge pydotplus

Creación de un árbol de decisión

Antes de poder representar un árbol de decisión en primer lugar se ha de crear un modelo. Para ello se puede simular un conjunto de datos con el método make_blobs de scikit-learn.

from sklearn.datasets.samples_generator import make_blobs

X, y = make_blobs(n_samples=50,
                  centers=3,
                  random_state=0,
                  cluster_std=0.60)

feature_names = ['X', 'Y']

En este conjunto de datos se han creado tres burbujas en un espacio bidimensional. A la primera característica se la ha llamado X e Y a la segunda. El resultado se puede representar gráficamente con el siguiente código.

import matplotlib.pyplot as plt

plt.scatter(X[:, 0], X[:, 1], c=y)
plt.xlabel(feature_names[0])
plt.ylabel(feature_names[1])
plt.show()
Datos para el entrenamiento del árbol de decisión
Representación de los datos para el entrenamiento del árbol de decisión

Ahora se puede emplear la clase DecisionTreeClassifier para el entrenamiento de un árbol de decisión.

from sklearn.tree import DecisionTreeClassifier

tree = DecisionTreeClassifier(random_state=0).fit(X, y)

Publicidad


Visualización de árboles de decisión con PyDotPlus

La visualización del árbol se puede realizar con el siguiente código.

from sklearn.tree import export_graphviz
from pydotplus import graph_from_dot_data

dot_data = export_graphviz(tree,
                           feature_names=feature_names)

graph = graph_from_dot_data(dot_data)
graph.write_png('tree.png')

En primer lugar, se importan los métodos necesarios. Desde scikit-learn se importa export_graphviz, un método que permite exportar los resultados de un árbol de decisión al formato DOT de Graphviz. A este método se le pasado el árbol e indicado el nombre de las características. Posteriormente se utiliza el método graph_from_dot_data para la creación del gráfico y explotar este a un archivo PNG.

Representación del árbol de decisión

En la representación del árbol de decisión se pude observar fácilmente el proceso que emplear el modelo a la hora de tomar una decisión. Incluso se pude reproducir este sin demasiado problema.

Opciones en la representación de PyDotPlus

El método export_graphviz cuenta con múltiples opciones a la hora de crear representaciones de los árboles de decisión. Por ejemplo, se pueden redondear los cuadros y utilizar colores. Además, es posible exportar la figura en otros formatos gráficos, como en JPG.

Representación del árbol de decisión modificando opciones gráficas.

Conclusiones

Se ha visto una forma de representar gráficamente árboles de decisión creados en Python con scikit-learn. Esta visualización facilita la interpretación de los resultados y la explicación de estos. Permitiendo no solo conocer la predicción, sino que explicar el origen de la misma.

Imágenes: Pixabay (pixel2013)

¿Te ha parecido de utilidad el contenido?

¡Puntúalo entre una y cinco estrellas!

Puntuación promedio 0 / 5. Votos emitidos: 0

Ya que has encontrado útil este contenido...

¡Síguenos en redes sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?

Publicidad


Publicaciones relacionadas

  • Nuevo simulador FIRE en el laboratorio de aplicaciones de Analytics Lane
  • Nueva calculadora de préstamos e hipotecas en el laboratorio de aplicaciones de Analytics Lane
  • Hardening avanzado de NGINX: CSP, OCSP Stapling y defensa en profundidad
  • Nuevo generador y verificador de hashes en el laboratorio de aplicaciones de Analytics Lane
  • Nueva simulación de la estrategia Martingala en ruleta en el laboratorio de aplicaciones de Analytics Lane
  • Exactitud, precisión, recall… y los errores que cometemos al interpretarlas en proyectos reales
  • Nuevo simulador del problema de Monty Hall en el laboratorio de aplicaciones de Analytics Lane
  • Nuevo simulador interactivo de K-Means en el laboratorio de aplicaciones de Analytics Lane
  • Por qué los chatbots de inteligencia artificial parecen estar siempre de acuerdo contigo – Conversar con una inteligencia artificial – Parte I

Publicado en: Python Etiquetado como: Machine learning

Interacciones con los lectores

Comentarios

  1. Alfredo dice

    junio 21, 2019 a las 7:50 pm

    Buen artículo, bien resumido y al grano, me gustó.
    Implementé todo el ejemplo como bien que lo explicas, y tuve un problema al final, y no me representó el árbol de decisión final. Utilizo el editor para python “Spyder 3”, y me sale el siguiente error:
    instrlen = len(instring)
    TypeError: object of type ‘NoneType’ has no len()
    cuando ejecuta la línea:
    graph = graph_from_dot_data(dot_data)
    pero me crea el fichero “tree.dot” en mi directorio de trabajo, aunque no me lo convierte a png, ni me lo muestra.
    ¿Me podrías ayudar a resolver el problemilla?
    Saludos. Alfredo.

    Responder
    • Daniel Rodríguez dice

      junio 22, 2019 a las 9:26 pm

      Hola Alfredo,

      Es difícil dar una respuesta con tan poca información. Parece que los datos que llegan no son correctos.

      No creo que el problema sea debido a Spyder, ya que el editor no debería afectar. Por otro lado, pydotplus funciona tanto en Python 2 como 3, por lo que la versión de Python tampoco debería ser un problema.

      Lo único que se me ocurre es que graphviz tenga algún problema en tu máquina. Ya que el fallo aparece cuando se intenta generar el gráfico.

      Responder
  2. Marco dice

    agosto 10, 2021 a las 7:38 pm

    Hola, muy bueno el artículo, sencillo y directo, ahora tengo una duda, si me pudes redireccionar a algún artículo te agradecería:
    ¿Cómo manipular los datos que hay en el objeto tree?
    Necesito automatizar un proyecto, y necesito pasar el objeto a código para que tome decisiones, quiero probar con automatizar el proceso de transcribir el objeto a código. Gracias por tu ayuda!

    Responder
    • Daniel Rodríguez dice

      agosto 11, 2021 a las 7:38 pm

      Actualmente no he publicado ninguna entrada sobre el tema, aunque me parece una idea interesante. Lo único que se me ocurre es consultar la documentación oficial de Scikit Learn (https://scikit-learn.org/stable/modules/tree.html), aunque por lo que he visto no entra en detalle en ese punto.

      Responder

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

I accept the Terms and Conditions and the Privacy Policy

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Barra lateral principal

Suscríbete a nuestro boletín

Suscríbete al boletín semanal para estar al día de todas las publicaciones.

Política de Privacidad

Analytics Lane en redes sociales

  • Amazon
  • Bluesky
  • Facebook
  • GitHub
  • Instagram
  • Mastodon
  • Pinterest
  • RSS
  • Telegram
  • Tumblr
  • Twitter
  • YouTube

Publicidad

Entradas recientes

Nuevo Inspector de JWT en el laboratorio de aplicaciones de Analytics Lane

abril 20, 2026 Por Daniel Rodríguez

Nuevo simulador de regresión logística en el laboratorio de aplicaciones de Analytics Lane

abril 17, 2026 Por Daniel Rodríguez

Nuevo simulador de regresión lineal con ruido en el laboratorio de aplicaciones de Analytics Lane

abril 16, 2026 Por Daniel Rodríguez

Publicidad

Es tendencia

  • Nuevo Inspector de JWT en el laboratorio de aplicaciones de Analytics Lane publicado el abril 20, 2026 | en Noticias
  • Creación de gráficos de barras y gráficos de columnas con Seaborn publicado el julio 18, 2023 | en Python
  • Cómo calcular el tamaño de la muestra para encuestas publicado el septiembre 9, 2025 | en Ciencia de datos
  • Inclusión de barras de error en Matplotlib publicado el octubre 17, 2022 | en Python
  • El método de Muller e implementación en Python publicado el marzo 24, 2023 | en Ciencia de datos

Publicidad

Lo mejor valorado

4.9 (24)

Seleccionar filas y columnas en Pandas con iloc y loc

4.6 (16)

Archivos JSON con Python: lectura y escritura

4.4 (14)

Ordenación de diccionarios en Python mediante clave o valor

4.7 (13)

Operaciones de filtrado de DataFrame con Pandas en base a los valores de las columnas

4.9 (11)

Pandas: Cambiar los tipos de datos en los DataFrames

Comentarios recientes

  • M. Pilar en Cómo eliminar las noticias en Windows 11 y recuperar tu concentración
  • Daniel Rodríguez en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • Pepe en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • CARLOS ARETURO BELLO CACERES en Justicio: La herramienta gratuita de IA para consultas legales
  • Piera en Ecuaciones multilínea en Markdown

Publicidad


Footer

Analytics Lane

  • Acerca de Analytics Lane
  • Boletín de noticias
  • Contacto
  • Libros
  • Lo más popular
  • Noticias
  • Tienda
  • Tiendas afiliadas

Secciones

  • Ciencia de datos
  • Criptografía
  • Herramientas
  • Machine Learning
  • Opinión
  • Productividad
  • Programación
  • Reseñas

Sobre de Analytics Lane

En Analytics Lane tratamos de explicar los principales conceptos de la ciencia e ingeniería de datos con un enfoque práctico. Los principales temas tratados son ciencia de datos, ingeniería de datos, inteligencia artificial, machine learning, deep learning y criptografía. Además, también se habla de los principales lenguajes de programación y herramientas utilizadas por los científicos e ingenieros de datos.

Copyright © 2018-2026 Analytics Lane ·Términos y condiciones ·Política de Cookies ·Política de Privacidad ·Herramientas de privacidad ·Contacto