Árbol de decisión en Python
cómo crear árboles de decisión en Python utilizando la biblioteca
scikit-learn
. Los árboles de decisión son una técnica de aprendizaje supervisado ampliamente utilizada en la clasificación y regresión. En este tutorial, aprenderás cómo crear, entrenar y visualizar un árbol de decisión.
En Árbol de decisión en Python verás el concepto explicado en lenguaje claro y un ejemplo que puedes ejecutar en el editor de The Data Schools.
Modifica el código del ejemplo antes de pasar a la siguiente lección: la experimentación fija mejor el aprendizaje que leer pasivamente.
Importar bibliotecas
Primero, asegúrate de tener instaladas las bibliotecas necesarias. Si aún no tienes
scikit-learn
, puedes instalarlo usando
pip
:
Ejemplo
pip install scikit-learn
A continuación, importa las bibliotecas que necesitarás en tu código Python:
Ejemplo
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.tree import <span class="class">DecisionTreeClassifier</span>, plot_tree
from sklearn.model_selection import train_test_split
from sklearn.metrics import accurfrom sklearn.metrics import accuracy_score
import matimport matplotlib.pyplot as plt
Cargar y explorar los datos
En este ejemplo, usaremos el conjunto de datos Iris, que es un conjunto de datos muy conocido para la clasificación. Carguemos los datos y exploremos su estructura:
Ejemplo
y = iris.target
# Crear un DataFrame para explorar los datos
df = pd.DataFrame(data=np.c_[iris['data'], iris['target']], columns=iris['feature_names'] + ['target'])
# Visualizar las primeras filas del DataFrame
print(df.head())
# Visualizar las primeras filas del DataFrame
print(df.head())
Dividir los datos en conjuntos de entrenamiento y prueba
Para evaluar el rendimiento del árbol de decisión, dividiremos el conjunto de datos en conjuntos de entrenamiento y prueba:
Ejemplo
# Dividir los datos en conjuntos de entrenamiento y prueba
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
print(y)
Crear y entrenar el árbol de decisión
Ahora crearemos un modelo de árbol de decisión y lo entrenaremos con los datos de entrenamiento:
Ejemplo
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
modelo = DecisionTreeClassifier(random_state=42).fit(X_train, y_train)
print(modelo.score(X_test, y_test))
Realizar predicciones y evaluar el modelo
Una vez que el modelo esté entrenado, podemos usarlo para hacer predicciones en el conjunto de prueba y evaluar su rendimiento:
Ejemplo
# Realizar predicciones en el conjunto de prueba
y_pred = tree_classifier.predict(X_test)
# Calcu
# Calcular la precisión del modelo
accuracy = accuracy_score(y_test, y_pred)
print("Precisión del modelo: {accuracy * 100:.2f}%")
Visualizar el árbol de decisión
Una de las ventajas de los árboles de decisión es que son interpretables. Podemos visualizar el árbol de decisión para comprender cómo toma decisiones:
Ejemplo
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
X, y = load_iris(return_X_y=True)
modelo = DecisionTreeClassifier(max_depth=3, random_state=0).fit(X, y)
print(modelo.predict(X[:3]))
Ajustar hiperparámetros (opcional)
Puedes ajustar los hiperparámetros del árbol de decisión, como la profundidad máxima del árbol, para mejorar el rendimiento o evitar el sobreajuste. Experimenta con diferentes valores y observa cómo afecta el rendimiento.
¡Eso es todo! Has creado, entrenado, evaluado y visualizado un árbol de decisión en Python utilizando
scikit-learn
. Puedes aplicar esta técnica a otros conjuntos de datos y problemas de clasificación.
Practica Árbol de decisión en Python en el editor
Pon en práctica lo aprendido con nuestro editor Python interactivo. Cada ejercicio incluye el código de partida y un botón para abrirlo en una nueva pestaña, donde puedes modificarlo y ejecutarlo.
Ejercicio: Calcular accuracy
En este ejemplo, usaremos el conjunto de datos Iris, que es un conjunto de datos muy conocido para la clasificación. Carguemos los datos y exploremos su estructura.
Ejemplo
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
modelo = DecisionTreeClassifier(random_state=42).fit(X_train, y_train)
print(accuracy_score(y_test, modelo.predict(X_test)))
Ejercicio: Árbol de decisión
Para evaluar el rendimiento del árbol de decisión, dividiremos el conjunto de datos en conjuntos de entrenamiento y prueba.
Ejemplo
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
X, y = load_iris(return_X_y=True)
modelo = DecisionTreeClassifier(max_depth=3, random_state=0).fit(X, y)
print(modelo.predict(X[:3]))
Ejercicio: Árbol de decisión (2)
Ahora crearemos un modelo de árbol de decisión y lo entrenaremos con los datos de entrenamiento.
Ejemplo
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
X, y = load_iris(return_X_y=True)
print(DecisionTreeClassifier().fit(X, y).get_depth())
Ejercicio: Dividir train/test
Una vez que el modelo esté entrenado, podemos usarlo para hacer predicciones en el conjunto de prueba y evaluar su rendimiento.
Ejemplo
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
X, y = load_iris(return_X_y=True)
print([len(a) for a in train_test_split(X, y, test_size=0.25, random_state=1)[:2]])
Ejercicio: Árbol de decisión (3)
Una de las ventajas de los árboles de decisión es que son interpretables. Podemos visualizar el árbol de decisión para comprender cómo toma decisiones.
Ejemplo
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
X, y = load_iris(return_X_y=True)
print(DecisionTreeClassifier(random_state=1).fit(X, y).feature_importances_.round(3))