Menu
CoddyTech

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:

Un diagrama titulado Entran columnas sin procesar, salen predicciones. Los números con huecos bajan por un carril, SimpleImputer rellena los huecos y después StandardScaler. Las palabras bajan por otro carril, OneHotEncoder las convierte en 0 y 1. Ambos carriles se unen en el modelo. Un recuadro discontinuo alrededor de los pasos dice una canalización: ajústala y después predice

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.

challenge icon

Desafío

Intermedio

Una 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.

  1. Sustitúyela por una canalización: un escalador y después k-NN, ajustados con las filas de entrenamiento.
  2. 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: no

Prué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")
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Aprendizaje supervisado

Practica por tu cuenta: Compilador de Python online