Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Manos a la obra: construyendo un clasificador con el dataset Iris

para la solución del ejercicio nos valimos de la opinion del instructor y usamos el algoritmo KNN el lugar del algoritmo de arbol de decisión. Asimismo le preguntamos a la IA si el algoritmo estaba correcto y esta nos refino el resultado añadiendo algunas secciones para daar mas claridad al algoritmo.

# Paso 1: Importar las bibliotecas necesarias
import numpy as np
import pandas as pd
from sklearn import datasets
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score

# Paso 2: Cargar y preparar el dataset Iris
dataset = datasets.load_iris()
# Convertir a DataFrame de Pandas para facilitar la manipulación de los datos
df = pd.DataFrame(data=dataset.data, columns=dataset.feature_names)
df['target'] = dataset.target

# NOTA: sección creada con IA, Objetivo explorar los datos generados
print("=" * 55)
print("   DATASET IRIS - PRIMERAS FILAS")
print("=" * 55)
print(df.head())
print(f"\nForma del dataset: {df.shape}")
print(f"Especies: {list(dataset.target_names)}")

# Paso 3: Separar atributos (X) y etiquetas (y)
X = df.iloc[:, :-1]   # Todas las columnas excepto la última
y = df['target']   # Columna de especie, que contiene las clases, es la Última columna, 

# Paso 4: Normalizar los datos (importante e indispensable para KNN)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# Paso 5: Dividir los datos en conjunto de entrenamiento y prueba (80% entrenamiento y 20% prueba)
X_train, X_test, y_train, y_test = train_test_split(
    X_scaled, y, test_size=0.2, random_state=42
)

print(f"\nMuestras de entrenamiento : {X_train.shape[0]}")
print(f"Muestras de prueba        : {X_test.shape[0]}")

# Paso 6: entrenamos el modelo
model = KNeighborsClassifier()
model.fit(X_train, y_train)

# Paso 7: evaluamos el rendimiento del modelo
y_pred = model.predict(X_test)

accuracy = accuracy_score(y_test, y_pred)
print("\n" + "=" * 55)
print("   EVALUACIÓN DEL MODELO KNN")
print("=" * 55)
print(f"Precisión en datos de prueba : {accuracy:.2f}  ({accuracy*100:.2f}%)")

# Validación cruzada (5 pliegues)
cross_val_scores = cross_val_score(model, X_scaled, y, cv=5)
print(f"Precisión media (cross-val)  : {cross_val_scores.mean():.2f}  ({cross_val_scores.mean()*100:.2f}%)")
print(f"Desviación estándar          : {cross_val_scores.std():.4f}")

#Paso 8: PROBAR CON NUEVOS EJEMPLOS
print("\n" + "=" * 55)
print("   PREDICCIÓN CON NUEVAS MUESTRAS")
print("=" * 55)

nuevas_muestras = np.array([
    [5.1, 3.5, 1.4, 0.2],   # Probable Orquidea
    [6.0, 2.9, 4.5, 1.5],   # Probable Azucena
    [6.7, 3.1, 5.6, 2.4],   # Probable Lirio
])

# Normalizar las nuevas muestras con el mismo scaler entrenado
nuevas_muestras_scaled = scaler.transform(nuevas_muestras)
predicciones = model.predict(nuevas_muestras_scaled)

columnas = dataset.feature_names
for i, (muestra, pred) in enumerate(zip(nuevas_muestras, predicciones)):
    print(f"\nMuestra {i+1}: {dict(zip(columnas, muestra))}")
    print(f"  → Especie predicha: {dataset.target_names[pred]}")

el resultado fue el siguiente:

=======================================================
DATASET IRIS - PRIMERAS FILAS

sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
0 5.1 3.5 1.4 0.2
1 4.9 3.0 1.4 0.2
2 4.7 3.2 1.3 0.2
3 4.6 3.1 1.5 0.2
4 5.0 3.6 1.4 0.2

target
0 0
1 0
2 0
3 0
4 0

Forma del dataset: (150, 5)
Especies: [np.str_('setosa'), np.str_('versicolor'), np.str_('virginica')]

Muestras de entrenamiento : 120
Muestras de prueba : 30

=======================================================
EVALUACIÓN DEL MODELO KNN

Precisión en datos de prueba : 1.00 (100.00%)
Precisión media (cross-val) : 0.96 (96.00%)
Desviación estándar : 0.0249

1 respuesta

¡Hola, Fabían!

¡Muy buen trabajo en la actividad!

Los resultados obtenidos también son bastante buenos. Una precisión del 100% en el conjunto de prueba y una media de 96% en la validación cruzada indican que el modelo logró aprender correctamente los patrones presentes en el dataset Iris.

¡Sigue con el buen trabajo con tus estudios y práctica, y no dudes en compartir cualquier pregunta que puedas tener en el foro!