Menu
CoddyTech

Pipelines

Parte da seção Aprendizado supervisionado do Journey de Machine Learning da Coddy. Lição 45 de 58.

Tabelas reais chegam com lacunas, palavras e escalas variadas. Este capítulo cria um único objeto que as limpa e faz previsões, um pipeline:

Um diagrama intitulado Colunas brutas entram, previsões saem. Números com lacunas seguem por uma via, SimpleImputer preenche as lacunas e, em seguida, StandardScaler. Palavras seguem por outra via, OneHotEncoder as transforma em 0s e 1s. As duas vias se encontram no modelo. Uma caixa tracejada ao redor das etapas diz um único pipeline: ajuste-o e, em seguida, faça previsões

Comece aos poucos: make_pipeline encadeia um escalonador e um 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 soldas de teste, fortes ou fracas, isso imprime 0.86, contra 0.74 sem escalonamento.

fit aprende a escala a partir das linhas de treinamento e, em seguida, treina. Todas as linhas posteriores são escaladas da mesma maneira, automaticamente.

challenge icon

Desafio

Médio

Uma empresa de balões decide todas as noites se amanhã será um dia de voo. O código inicial faz a normalização manualmente: a acurácia de teste é boa, mas a previsão nunca é normalizada, então ele responde yes para qualquer condição climática.

  1. Substitua-o por um pipeline, com um normalizador seguido de k-NN, ajustado com as linhas de treinamento.
  2. Imprima a acurácia de teste e avalie a previsão com ele.

Outra empresa, dia 20, 32, 7000, 9:

Test accuracy: 0.880
Flying day: no

Experimente você mesmo

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

# Dias anteriores em uma empresa de balões: dia de voo (1) ou não (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)

# Previsão para amanhã: vento, rajadas, visibilidade, passageiros com reserva
day = np.array([[float(input()), float(input()), float(input()), float(input())]])

# Padronização manual: a pontuação parece boa, mas os dados da previsão nunca são padronizados
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 iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Aprendizado supervisionado

Pratique por conta própria: Compilador de Python online