Este ejercicio utiliza un árbol de decisión para predecir si un estudiante aprobará un examen basándonos en dos características: horas de estudio y asistencia a clase.
# Importar bibliotecas necesarias
import numpy as np
import pandas as pd
from sklearn.tree import DecisionTreeClassifier, plot_tree
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# Crear un conjunto de datos ficticio
data = {
"Horas de Estudio": [2, 3, 1, 5, 7, 6, 8, 3, 4, 5],
"Asistencia": [1, 0, 1, 1, 1, 0, 1, 0, 1, 1], # 1 = Asistió, 0 = No asistió
"Aprobó": [0, 0, 0, 1, 1, 0, 1, 0, 1, 1] # 1 = Aprobó, 0 = No aprobó
}
# Convertir datos a un DataFrame
df = pd.DataFrame(data)
# Separar características (X) y etiqueta (y)
X = df[["Horas de Estudio", "Asistencia"]]
y = df["Aprobó"]
# Dividir datos en conjunto de entrenamiento y prueba
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# Crear y entrenar el árbol de decisión
clf = DecisionTreeClassifier(criterion="gini", max_depth=3, random_state=42)
clf.fit(X_train, y_train)
# Hacer predicciones
y_pred = clf.predict(X_test)
# Evaluar el modelo
accuracy = accuracy_score(y_test, y_pred)
print(f"Precisión del modelo: {accuracy * 100:.2f}%")
# Visualizar el árbol de decisión
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 6))
plot_tree(clf, feature_names=["Horas de Estudio", "Asistencia"], class_names=["No Aprobó", "Aprobó"], filled=True)
plt.title("Árbol de Decisión para Clasificar Estudiantes")
plt.show()
Datos ficticios:
Preparación de datos:
X
) y las etiquetas (y
) en dos conjuntos: uno para entrenamiento y otro para prueba.Entrenamiento del modelo:
DecisionTreeClassifier
con el criterio Gini
para crear y entrenar el árbol de decisión.Predicción y evaluación:
accuracy_score
.Visualización:
plot_tree
para visualizar el árbol de decisión entrenado.Precisión del modelo: Un porcentaje que indica qué tan bien clasifica el modelo los datos de prueba.
Visualización del árbol: Una representación gráfica del árbol de decisión, mostrando las divisiones en base a las características (horas de estudio y asistencia).
entropy
en lugar de gini
) y el max_depth
.