De acuerdo al reto solicitado y a las instrucciones del instructor, se procedio a crear el siguiente código:
==========================================================
CLASIFICACIÓN DE FLORES CON APRENDIZAJE SUPERVISADO
Dataset Iris - Árbol de Decisión
==========================================================
Importar bibliotecas
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix
==========================================================
PASO 1: Cargar y explorar los datos
==========================================================
Cargar el dataset Iris
iris = load_iris()
Crear DataFrame
df = pd.DataFrame(
iris.data,
columns=iris.feature_names
)
Agregar la columna de especies
df["Especie"] = iris.target
print("=" * 50)
print("Primeras filas del dataset")
print("=" * 50)
print(df.head())
print("\nEspecies disponibles:")
for i, especie in enumerate(iris.target_names):
print(f"{i}: {especie}")
==========================================================
PASO 2: Preparar los datos
==========================================================
Variables independientes
X = df.iloc[:, :-1]
Variable dependiente
y = df["Especie"]
División entrenamiento/prueba
X_train, X_test, y_train, y_test = train_test_split(
X,
y,
test_size=0.20,
random_state=42,
stratify=y
)
print("\nCantidad de muestras")
print(f"Entrenamiento: {len(X_train)}")
print(f"Prueba: {len(X_test)}")
==========================================================
PASO 3: Entrenar el modelo
==========================================================
modelo = DecisionTreeClassifier(random_state=42)
modelo.fit(X_train, y_train)
==========================================================
PASO 4: Evaluar el modelo
==========================================================
predicciones = modelo.predict(X_test)
precision = accuracy_score(y_test, predicciones)
print("\n" + "=" * 50)
print("RESULTADOS")
print("=" * 50)
print(f"Precisión del modelo: {precision:.2%}")
print("\nMatriz de confusión")
print(confusion_matrix(y_test, predicciones))
print("\nReporte de clasificación")
print(
classification_report(
y_test,
predicciones,
target_names=iris.target_names
)
)
Validación cruzada
scores = cross_val_score(modelo, X, y, cv=5)
print("Validación cruzada")
print(scores)
print(f"Precisión promedio: {scores.mean():.2%}")
==========================================================
PASO 5: Probar una nueva flor
==========================================================
Longitud sépalo, ancho sépalo,
longitud pétalo, ancho pétalo
nueva_flor = np.array([
[5.1, 3.5, 1.4, 0.2]
])
prediccion = modelo.predict(nueva_flor)
print("\nNueva muestra")
print(nueva_flor)
print(
"La especie predicha es:",
iris.target_names[prediccion[0]]
)
RESULTADOS OBTENIDOS