Cómo entrenar un modelo de clasificación con scikit-learn
Entrenar un modelo de clasificación es el corazón del Machine Learning: es el paso en el que el algoritmo aprende a partir de ejemplos para luego predecir la categoría de datos nuevos. Con la biblioteca scikit-learn, en Python, puedes entrenar un primer modelo en pocas líneas. Esta guía recorre el camino completo, desde la carga de los datos hasta la primera predicción y su evaluación.
Requisitos previos
- Python 3 instalado en tu ordenador.
- La biblioteca scikit-learn instalada. Si aún no la tienes, ejecuta
pip install scikit-learnen la terminal. - Conocimientos básicos de Python: variables y cómo ejecutar un script.
- No necesitas descargar nada: usamos un conjunto de datos que ya viene incluido en scikit-learn.
Paso 1: Cargar los datos
Para este ejemplo usamos el dataset Iris, un clásico para aprender clasificación. Contiene las medidas de 150 flores divididas en tres especies, y el objetivo del modelo será predecir la especie a partir de esas medidas.
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data # as medidas (4 colunas por flor)
y = iris.target # a especie: 0, 1 ou 2
print(X.shape) # (150, 4)
print(iris.target_names) # ['setosa' 'versicolor' 'virginica']
Guardamos las características (las medidas) en X y la respuesta correcta (la especie) en y. En Machine Learning es una convención llamar X a los datos de entrada y y a lo que queremos predecir.
Paso 2: Dividir en entrenamiento y prueba
Antes de entrenar, separamos los datos en dos partes: una para que el modelo aprenda (entrenamiento) y otra para comprobar si aprendió bien (prueba). Así medimos el rendimiento con datos que el modelo nunca vio, algo esencial para confiar en el resultado.
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
Reservamos el 20% de los datos para la prueba con test_size=0.2. El random_state=42 hace que la división sea siempre la misma cuando vuelves a ejecutar el código, y stratify=y mantiene la misma proporción de especies en cada parte.
Paso 3: Elegir y entrenar el modelo
Vamos a usar la regresión logística, un modelo sencillo y muy popular para clasificación. Entrenar significa llamar al método fit(), que ajusta el modelo a los datos de entrenamiento, es decir, encuentra el patrón que une las medidas con la especie.
from sklearn.linear_model import LogisticRegression
modelo = LogisticRegression(max_iter=1000)
modelo.fit(X_train, y_train)
Eso es todo: en una línea creamos el modelo y en otra lo entrenamos. Usamos max_iter=1000 para dar al algoritmo suficientes iteraciones para converger y evitar un aviso de convergencia. Después de fit(), el modelo ya ha aprendido y está listo para predecir.
Paso 4: Hacer predicciones
Con el modelo entrenado, le pedimos que prediga la especie de las flores del conjunto de prueba, usando el método predict().
previsoes = modelo.predict(X_test)
print(previsoes[:5]) # ex.: [1 0 2 1 1]
Cada número es la especie que el modelo predijo para una flor. Al comparar estas predicciones con las respuestas reales (y_test), podemos saber si el modelo es bueno.
Verificar el resultado
La forma más directa de evaluar es medir la exactitud (accuracy): el porcentaje de predicciones correctas en el conjunto de prueba.
from sklearn.metrics import accuracy_score
exatidao = accuracy_score(y_test, previsoes)
print(f"Exatidao: {exatidao:.2f}")
En este ejemplo deberías obtener un valor en torno a 0.97, es decir, el modelo acierta cerca del 97% de las flores de prueba (el valor exacto puede variar ligeramente). Un número alto y cercano a 1 indica que tu primer modelo está funcionando.
Consejo: la exactitud por sí sola no siempre basta. Cuando las clases están desequilibradas, conviene mirar también la matriz de confusión y métricas como precisión y recall.
Conclusión
Acabas de entrenar un modelo de clasificación de principio a fin: cargaste los datos, los dividiste, entrenaste con fit() y evaluaste las predicciones. A partir de aquí puedes probar otros modelos, como DecisionTreeClassifier o RandomForestClassifier, cambiando solo una línea de código, o profundizar en la evaluación con una matriz de confusión. Aquí tienes un reto: ¿puedes mejorar la exactitud usando un modelo diferente con los mismos datos?