Menu
CoddyTech

Pipelines

Teil des Abschnitts Überwachtes Lernen der Machine Learning-Journey von Coddy. Lektion 45 von 58.

In realen Tabellen gibt es Lücken, Wörter und unterschiedliche Skalen. In diesem Kapitel erstellen wir ein Objekt, das sie bereinigt und Vorhersagen trifft: eine Pipeline:

Ein Diagramm mit dem Titel: Rohspalten hinein, Vorhersagen hinaus. Zahlen mit Lücken laufen durch einen Pfad, SimpleImputer füllt die Lücken, danach folgt StandardScaler. Wörter laufen durch einen anderen Pfad, OneHotEncoder wandelt sie in 0en und 1en um. Beide Pfade treffen beim Modell zusammen. Ein gestrichelter Rahmen um die Schritte trägt die Aufschrift: eine Pipeline: anpassen, dann vorhersagen

Fang klein an: make_pipeline verkettet einen Skalierer und ein Modell:

from sklearn.pipeline import make_pipeline

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

Für 200 Testschweißnähte, starke oder schwache, gibt dies 0.86 aus, gegenüber 0.74 ohne Skalierung.

fit lernt die Skalierung anhand der Trainingszeilen und trainiert dann. Jede spätere Zeile wird automatisch auf dieselbe Weise skaliert.

challenge icon

Aufgabe

Mittel

Ein Ballonunternehmen entscheidet jeden Abend, ob morgen ein Flugtag ist. Die Starterin skaliert von Hand: Die Testgenauigkeit ist in Ordnung, aber die Prognose wird nie skaliert, also sagt sie bei jedem Wetter yes.

  1. Ersetze sie durch eine Pipeline: einen Skalierer, dann k-NN, angepasst an die Trainingszeilen.
  2. Gib ihre Testgenauigkeit aus und beurteile damit die Prognose.

Ein anderes Unternehmen, Tag 20, 32, 7000, 9:

Test accuracy: 0.880
Flying day: no

Probier es selbst

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

# Vergangene Tage bei einem Ballonunternehmen: Flugtag (1) oder kein Flugtag (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)

# Vorhersage für morgen: Wind, Böen, Sichtweite, gebuchte Passagiere
day = np.array([[float(input()), float(input()), float(input()), float(input())]])

# Manuelle Skalierung: Der Score sieht gut aus, aber die Vorhersagedaten werden nie skaliert
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 dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Überwachtes Lernen

Übe selbstständig: Online-Python-Compiler