Canalizaciones
Parte de la sección Aprendizaje supervisado del Journey de Machine Learning de Coddy. Lección 45 de 58.
Las tablas reales llegan con huecos, palabras y escalas mixtas. En este capítulo se construye un objeto que las limpia y predice: una canalización:
Empieza poco a poco: make_pipeline encadena un escalador y un modelo:
from sklearn.pipeline import make_pipeline
pipe = make_pipeline(StandardScaler(), KNeighborsClassifier())
pipe.fit(X_train, y_train)
print(pipe.score(X_test, y_test))Para 200 soldaduras de prueba, fuertes o débiles, esto imprime 0.86, frente a 0.74 sin escalar.
fit aprende el escalado a partir de las filas de entrenamiento y después entrena. Todas las filas posteriores se escalan de la misma manera, automáticamente.
Desafío
IntermedioUna empresa de globos decide cada tarde si mañana será un día de vuelo. La solución inicial escala manualmente: la precisión de prueba está bien, pero el pronóstico nunca se escala, así que responde yes con cualquier clima.
- Sustitúyela por una canalización: un escalador y después k-NN, ajustados con las filas de entrenamiento.
- Imprime su precisión de prueba y evalúa el pronóstico con ella.
Otra empresa, día 20, 32, 7000, 9:
Test accuracy: 0.880
Flying day: noPruébalo tú mismo
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.pipeline import make_pipeline
# Días anteriores en una empresa de globos aerostáticos: día apto para volar (1) o no (0)
days = pd.read_csv("balloons.csv")
X = days[["wind_kmh", "gusts_kmh", "visibility_m", "passengers"]].to_numpy()
y = days["flying_day"].to_numpy()
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
# Pronóstico para mañana: viento, ráfagas, visibilidad, pasajeros con reserva
day = np.array([[float(input()), float(input()), float(input()), float(input())]])
# Escalado manual: la puntuación parece correcta, pero el pronóstico nunca se escala
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
model = KNeighborsClassifier()
model.fit(X_train_scaled, y_train)
print(f"Test accuracy: {model.score(X_test_scaled, y_test):.3f}")
if model.predict(day)[0] == 1:
print("Flying day: yes")
else:
print("Flying day: no")
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Aprendizaje supervisado
1Tu primer modelo
Aprender de ejemplosConjuntos de entrenamiento y pruebaAjustar y predecirEvaluar un modeloRepaso: clasificador de semillas4Regresión logística
Predicciones de sí o noEl umbral de decisiónLos pesos como evidenciaVarias clasesRepaso: filtro de spam7Sobreajuste
Subajuste y sobreajusteCurvas de aprendizajeRegularizaciónConjuntos de validaciónRepaso: Ajustar un árbol10Canalizaciones
CanalizacionesColumnas mixtasImputación en una canalizaciónAjuste de una canalizaciónRepaso: limpiar y predecir2Vecinos más cercanos
Cómo decide k-NNCómo elegir kFronteras de decisiónEscalado para los vecinosRepaso: vecinos del vino5Medición de clasificadores
La matriz de confusiónPrecisión y exhaustividadLa puntuación F1Clases desequilibradasCurvas ROCRepaso: prueba de detección8Validación cruzada
Validación K-FoldComparación justa de modelosBúsqueda en cuadrículaRepaso: reparaciones de monopatines11Proyecto: especies de pingüinos
Conoce a los pingüinosPrepara los datosElige un modeloAjusta el modelo ganadorPublica el modelo3Regresión lineal
Predicción de númerosVarias característicasMedición de erroresGráficos de residuosRepaso: alquiler de bicicletas6Árboles de decisión
Los árboles hacen preguntasLeer un árbolProfundidad del árbolImportancia de las característicasRepaso: decisiones de préstamosPractica por tu cuenta: Compilador de Python online