Menu
CoddyTech

Pipeline

Fa parte della sezione Apprendimento supervisionato del percorso Machine Learning di Coddy. Lezione 45 di 58.

Le tabelle reali arrivano con lacune, parole e scale diverse. In questo capitolo crei un unico oggetto che le pulisce e fa previsioni, una pipeline:

Un diagramma intitolato Dalle colonne grezze alle previsioni. I numeri con lacune seguono un percorso, SimpleImputer colma le lacune e poi StandardScaler. Le parole seguono un altro percorso; OneHotEncoder le trasforma in 0 e 1. Entrambi i percorsi si incontrano nel modello. Un riquadro tratteggiato attorno ai passaggi riporta: un'unica pipeline: addestrala, poi fai previsioni

Inizia in piccolo: make_pipeline concatena uno scaler e un modello:

from sklearn.pipeline import make_pipeline

pipe = make_pipeline(StandardScaler(), KNeighborsClassifier())
pipe.fit(X_train, y_train)
print(pipe.score(X_test, y_test))

Per 200 saldature di prova, forti o deboli, questo stampa 0.86, rispetto a 0.74 senza ridimensionamento.

fit apprende il ridimensionamento dalle righe di addestramento, poi addestra. Ogni riga successiva viene ridimensionata automaticamente allo stesso modo.

challenge icon

Sfida

Medio

Un’azienda di mongolfiere decide ogni sera se il giorno successivo sarà una giornata di volo. Il codice iniziale esegue la scalatura manualmente: l’accuratezza sul test è buona, ma le previsioni non vengono mai scalate, quindi indica yes con qualsiasi condizione meteorologica.

  1. Sostituiscilo con una pipeline, prima uno scaler e poi k-NN, addestrata sulle righe di training.
  2. Stampa la sua accuratezza sul test e usala per valutare la previsione.

Un’altra azienda, giorno 20, 32, 7000, 9:

Test accuracy: 0.880
Flying day: no

Provalo tu

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 y 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 iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Apprendimento supervisionato

Esercitati da solo: Compilatore Python online