55 · La API de estimadores: fit, predict, transform
Cada objeto de scikit-learn habla el mismo lenguaje de tres métodos — apréndelo una vez y cambiar de modelo se vuelve un cambio de una sola línea.
Cada objeto de scikit-learn implementa la misma interfaz: `fit(X, y)` para aprender, y luego `predict(X)` (estimadores) o `transform(X)` (transformadores). Esa consistencia es por qué cambiar un `LinearRegression` por un `RandomForest` es una edición de una sola línea — el código alrededor nunca cambia.
Sin esto:
Sin esta API unificada, cada modelo tendría sus propios nombres de métodos y formas de datos a medida — reescribirías todo tu script de entrenamiento cada vez que probaras un algoritmo distinto.
Una interfaz para gobernarlas a todas
El superpoder de scikit-learn es la consistencia. Cientos de modelos, escaladores y codificadores obedecen el mismo contrato diminuto:
fit(X, y)— aprender de los datos. Todo objeto lo implementa. Después defit, el objeto guarda lo que aprendió (coeficientes, umbrales de corte, estadísticas de escalado) en atributos que terminan con un guion bajo final.predict(X)— producir predicciones del objetivo. Los objetos que lo implementan son estimadores (modelos):LinearRegression,RandomForestClassifier,LogisticRegression.transform(X)— producir una nueva matriz de variables transformada. Los objetos que lo implementan son transformadores (preprocesadores):StandardScaler,OneHotEncoder,PCA.
Como el contrato nunca cambia, tu código de entrenamiento queda idéntico tanto si ajustas un modelo lineal como un bosque potenciado por gradiente. Cambiar de algoritmo es literalmente un cambio de una línea.
La convención de formas X / y
scikit-learn siempre espera:
- X — una matriz de variables 2-D de forma
(n_samples, n_features). Una fila por ejemplo, una columna por variable. Incluso con una sola variable debes pasar forma(n, 1), no(n,). - y — un vector objetivo 1-D de forma
(n_samples,). Una etiqueta por ejemplo.
Internamente sklearn convierte DataFrames de pandas y Series en arrays de NumPy, así que puedes pasar cualquiera — pero las formas deben respetar esta regla de X-2D / y-1D.
Python (in browser)
El ciclo supervisado completo en cinco líneas: cargar, dividir (`random_state=42` para reproducibilidad), `fit` en train, `predict` en test, evaluar. Un R² cercano a 0.45 es normal en este dataset — la progresión de la diabetes es genuinamente difícil de predecir desde diez variables.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
`fit` aprende una vez de los datos de entrenamiento; luego `predict` se llama repetidamente sobre cualquier entrada nueva de la misma forma. El conjunto de test nunca se muestra a `fit`.
Python (in browser)
`fit_intercept` es un hiperparámetro (tú lo eliges). `coef_` e `intercept_` son parámetros aprendidos (los elige el dato). El guion bajo final es la señal universal de sklearn: 'este atributo solo existe después de `fit`'.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
En scikit-learn, ¿qué distingue a un estimador de un transformador?
- Todo objeto de sklearn implementa `fit`. Los estimadores añaden `predict` (predicciones del objetivo); los transformadores añaden `transform` (una nueva matriz de variables).
- X siempre es 2-D `(n_samples, n_features)`; y siempre es 1-D `(n_samples,)`. Una sola variable aún necesita forma `(n, 1)`.
- Los hiperparámetros se fijan en el constructor (antes de `fit`); los parámetros aprendidos aparecen tras `fit` y llevan un guion bajo final (`coef_`, `intercept_`).
Todo flujo supervisado y no supervisado en scikit-learn — regresión, clasificación, clustering, reducción de dimensionalidad — usa este mismo contrato `fit`/`predict`/`transform`. Es la API que llamarás miles de veces en el resto de la pista de ML.
Si lo quitas: Sin la API unificada, probar un algoritmo nuevo significaría aprender un conjunto distinto de nombres de métodos y formatos de datos cada vez — convirtiendo la experimentación rutinaria en una reescritura constante.