Saltar al contenido
← Programa de inteligencia artificial

Inteligencia artificial / Material de consulta

Clasificación reproducible

scikit-learn · CPU

Consulte las explicaciones, el código y las salidas de referencia en esta página.

Volver al aula →

Proyecto I · Clasificación reproducible

Overtone Education · Curso de inteligencia artificial

Objetivo

Comparar una línea base y un pipeline sobre iris. Practicar partición estratificada, preparación sin fuga, evaluación y límites. Fuente: sklearn.datasets.load_iris, conjunto de observaciones botánicas distribuido con scikit-learn. La división didáctica no demuestra validez fuera de ese dominio.

Preparación

Ejecute de arriba abajo en Jupyter con Python 3.12 (entorno validado). Entorno externo al aula. Instale en un entorno virtual:

python -m pip install numpy scikit-learn ipykernel

Las versiones comprobadas se distribuyen en requirements-ia.txt. No necesita claves de API. Los ejemplos son educativos y no validan aplicaciones de impacto alto.

Pasos

1. Cargar y describir los datos

Registre las versiones y compruebe dimensiones antes de ajustar.

Código de referencia

import sys
import numpy as np
import sklearn
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.dummy import DummyClassifier
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
print({"python":sys.version.split()[0], "numpy":np.__version__, "sklearn":sklearn.__version__})
datos = load_iris()
X, y = datos.data, datos.target
print("Dimensiones:", X.shape, "Clases:", datos.target_names.tolist())

Salida comprobada

{'python': '3.12.14', 'numpy': '2.5.4', 'sklearn': '1.9.1'}
Dimensiones: (150, 4) Clases: ['setosa', 'versicolor', 'virginica']

2. Reservar prueba y entrenar

La semilla es 7 y la prueba ocupa 25%. El escalador solo aprende con entrenamiento. No elija hiperparámetros mirando la prueba.

Código de referencia

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=7, stratify=y)
base = DummyClassifier(strategy="most_frequent").fit(X_train, y_train)
modelo = make_pipeline(StandardScaler(), LogisticRegression(max_iter=500))
modelo.fit(X_train, y_train)
pred = modelo.predict(X_test)
print({"exactitud_base":float(base.score(X_test,y_test)), "exactitud_pipeline":float(accuracy_score(y_test,pred))})

Salida comprobada

{'exactitud_base': 0.3157894736842105, 'exactitud_pipeline': 0.9736842105263158}

3. Revisar errores

Las filas de la matriz son etiquetas reales y las columnas son predicciones. No confunda una evaluación de 38 observaciones con una garantía de generalización.

Código de referencia

print("Matriz de confusión (filas reales, columnas predichas):")
print(confusion_matrix(y_test,pred))
print(classification_report(y_test,pred,target_names=datos.target_names,zero_division=0))
print("Casos erróneos:", int(np.sum(pred!=y_test)))

Salida comprobada

Matriz de confusión (filas reales, columnas predichas):
[[13  0  0]
 [ 0 12  1]
 [ 0  0 12]]
              precision    recall  f1-score   support

      setosa       1.00      1.00      1.00        13
  versicolor       1.00      0.92      0.96        13
   virginica       0.92      1.00      0.96        12

    accuracy                           0.97        38
   macro avg       0.97      0.97      0.97        38
weighted avg       0.98      0.97      0.97        38

Casos erróneos: 1

Comprobaciones

Verifique integridad, tamaño reservado y ausencia de ajuste del escalador con prueba. El umbral es una comprobación educativa amplia, no un criterio de lanzamiento.

Código de referencia

assert len(y_train)==112 and len(y_test)==38
assert modelo[0].n_samples_seen_==112
assert 0.8 <= accuracy_score(y_test,pred) <= 1
assert confusion_matrix(y_test,pred).sum()==38
print("Comprobaciones aprobadas")

Salida comprobada

Comprobaciones aprobadas

Siguientes pasos

  1. Cree validación dentro de entrenamiento y compare dos modelos antes de abrir una prueba nueva.
  2. Repita el procedimiento con varias semillas e informe variabilidad.
  3. Escriba una ficha con procedencia, uso previsto y exclusiones.
  4. Explique por qué un coeficiente no demuestra un efecto causal.

Referencia: https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_iris.html