Lánzate a Python scikit-learn: tu primer paso concreto hoy
Python scikit Learn: lo esencial en un artículo — código real, diagramas y pasos concretos, extractos de un curso de 33 lecciones.
La mejor forma de aprender Python scikit Learn es practicando. Este artículo te ayuda a empezar con extractos prácticos extraídos de un curso de 33 lecciones — para obtener un primer resultado desde hoy mismo.
- Introducción e instalación
- Bases del Machine Learning
- Preprocesamiento de los datos
- Regresión supervisada
- Clasificación supervisada
Primer modelo en 10 líneas (Iris)
El dataset Iris
150 flores de iris repartidas en 3 especies (setosa, versicolor, virginica). 4 features medidas: longitud y anchura de sépalos y pétalos.
from sklearn.datasets import load_iris iris = load_iris() print("Features :", iris.feature_names) print("Classes :", iris.target_names) print("Shape X :", iris.data.shape) # (150, 4) print("Shape y :", iris.target.shape) # (150,)
El código completo (10 líneas)
from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier X, y = load_iris(return_X_y=True) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) model = KNeighborsClassifier(n_neighbors=5) model.fit(X_train, y_train) score = model.score(X_test, y_test) print(f"Accuracy : {score:.2%}") # ~96.7%
Es todo. Acabas de crear un modelo de clasificación que distingue 3 especies de iris con ~97% de precisión.
Explicación línea por línea
| Línea | Rol |
|---|---|
load_iris(return_X_y=True) | Carga X (features) e y (etiquetas) directamente |
train_test_split(...) | Divide 80% train / 20% test |
random_state=42 | Reproducibilidad (siempre la misma división) |
KNeighborsClassifier(...) | Elección del algoritmo: k-NN con k=5 |
model.fit(...) | Entrenamiento: memoriza los ejemplos |
model.score(...) | Evalúa la accuracy sobre el test |
Hacer una predicción sobre una nueva flor
import numpy as np # Una flor: sépalo 5.1 x 3.5, pétalo 1.4 x 0.2 nouvelle_fleur = np.array([[5.1, 3.5, 1.4, 0.2]]) prediction = model.predict(nouvelle_fleur) print("Predit :", iris.target_names[prediction[0]]) # > 'setosa' # Probabilidades para cada clase proba = model.predict_proba(nouvelle_fleur) print("Probabilites :", proba) # > [[1.0, 0.0, 0.0]] -> 100% setosa
Visualizar el resultado
import matplotlib.pyplot as plt fig, axes = plt.subplots(1, 2, figsize=(12, 5)) # Etiquetas reales axes[0].scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap="viridis") axes[0].set_title("Vraies classes") axes[0].set_xlabel("Longueur sepale") axes[0].set_ylabel("Largeur sepale") # Predicciones predictions = model.predict(X_test) axes[1].scatter(X_test[:, 0], X_test[:, 1], c=predictions, cmap="viridis") axes[1].set_title("Predictions du modele") axes[1].set_xlabel("Longueur sepale") plt.tight_layout() plt.show()
El patrón fit / predict / score
fit → predict → score) es la misma para TODOS los modelos scikit-learn. Una vez aprendida, puedes probar 30 algoritmos cambiando solo el import.# Mismo código, modelo diferente: from sklearn.tree import DecisionTreeClassifier model = DecisionTreeClassifier(random_state=42) model.fit(X_train, y_train) print(model.score(X_test, y_test)) # Mismo código, otro más: from sklearn.ensemble import RandomForestClassifier model = RandomForestClassifier(n_estimators=100, random_state=42) model.fit(X_train, y_train) print(model.score(X_test, y_test))
Buenas prácticas desde el principio
Desafío práctico
- Prueba 3 algoritmos diferentes (KNN, DecisionTree, RandomForest)
- Varía
random_statey observa si el score cambia - Prueba
k=1y luegok=10en KNeighborsClassifier
Guardar un modelo en producción
joblib: el método recomendado
import joblib # Guardar joblib.dump(pipe, "model.joblib") # Cargar loaded_pipe = joblib.load("model.joblib") preds = loaded_pipe.predict(X_new)
Con compresión
# Nivel 0 (rápido) a 9 (máxima compresión) joblib.dump(pipe, "model.joblib.gz", compress=3) loaded = joblib.load("model.joblib.gz")
pickle (alternativa)
import pickle with open("model.pkl", "wb") as f: pickle.dump(pipe, f) with open("model.pkl", "rb") as f: pipe = pickle.load(f)
Producción: empaquetado completo
import joblib import sklearn import numpy as np # Guardar modelo + metadatos artifact = { "model": pipe, "feature_names": feature_names, "target_names": target_names, "sklearn_version": sklearn.__version__, "numpy_version": np.__version__, "training_date": "2026-05-15", "metrics": {"f1": 0.94, "auc": 0.97} } joblib.dump(artifact, "model_v1.joblib")
API FastAPI mínima
from fastapi import FastAPI from pydantic import BaseModel import joblib app = FastAPI() artifact = joblib.load("model_v1.joblib") model = artifact["model"] class Input(BaseModel): features: list[float] @app.post("/predict") def predict(data: Input): pred = model.predict([data.features]) proba = model.predict_proba([data.features])[0].tolist() return {"prediction": int(pred[0]), "probabilities": proba}
Versionar con MLflow
import mlflow import mlflow.sklearn with mlflow.start_run(): pipe.fit(X_tr, y_tr) # Registrar params, métricas, modelo mlflow.log_params({"max_depth": 10, "n_estimators": 200}) mlflow.log_metric("f1", 0.94) mlflow.sklearn.log_model(pipe, "model", registered_model_name="my_model")
¿Qué es el machine learning?
Definición pragmática
El machine learning (o aprendizaje automático) consiste en construir un programa que aprende a realizar una tarea a partir de ejemplos en lugar de reglas escritas a mano.
¿Cuándo usar ML?
| Problema | Enfoque |
|---|---|
| Convertir Celsius a Fahrenheit | Fórmula clásica (sin ML) |
| Predecir el precio de una casa | ML supervisado (regresión) |
| Detectar spam | ML supervisado (clasificación) |
| Agrupar clientes similares | ML no supervisado (clustering) |
| Reconocer un rostro | Deep learning (variante de ML) |
| Derrotar a un humano en ajedrez | ML por refuerzo |
Las 3 familias de ML
1. Supervisado
Se tienen datos con etiquetas (X, y).
Objetivo: predecir y a partir de X.
2. No supervisado
Se tienen datos sin etiquetas (solo X).
Objetivo: descubrir estructuras ocultas.
3. Refuerzo
Un agente aprende por ensayo y error en un entorno.
Objetivo: maximizar una recompensa.
Ejemplos concretos por familia
Supervisado — Regresión
# X: superficie de la vivienda, n.º de habitaciones, barrio... # y: precio de venta (número) # Objetivo: predecir el precio de una casa nueva
Supervisado — Clasificación
# X: contenido del email # y: "spam" o "no-spam" (categoría) # Objetivo: clasificar un email nuevo
No supervisado — Clustering
# X: compras de los clientes (importe, frecuencia...) # Sin y # Objetivo: agrupar en 3-5 segmentos de clientela
El flujo de trabajo típico de un proyecto ML
¿Por qué scikit-learn?
Este artículo cubre los extractos más útiles — el curso completo Python scikit Learn (10 capítulos, 33 lecciones, ejercicios corregidos y proyecto final) te lleva hasta el final.
./acceder-au-cours-complet cours gratuit : Maîtriser Claude CodeFAQ
¿Cuánto tiempo se necesita para aprender Python scikit Learn?
¿Se necesitan requisitos previos?
¿Por dónde empezar concretamente?
📬 ¿Quieres recibir este tipo de guía cada semana? Suscríbete gratis — código real, cero palabrería.