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:
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.
Aufgabe
MittelEin 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.
- Ersetze sie durch eine Pipeline: einen Skalierer, dann k-NN, angepasst an die Trainingszeilen.
- Gib ihre Testgenauigkeit aus und beurteile damit die Prognose.
Ein anderes Unternehmen, Tag 20, 32, 7000, 9:
Test accuracy: 0.880
Flying day: noProbier 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")
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Überwachtes Lernen
1Dein erstes Modell
Aus Beispielen lernenTrainings- und TestdatensätzeAnpassen und VorhersagenEin Modell bewertenRückblick: Saatgutsortierer4Logistische Regression
Ja-Nein-VorhersagenDie EntscheidungsschwelleGewichte als IndizienMehrere KlassenRückblick: Spamfilter2Nächste Nachbarn
So entscheidet k-NNk wählenEntscheidungsgrenzenSkalierung für NachbarnRückblick: Wein-Nachbarn5Klassifikatoren bewerten
Die KonfusionsmatrixPräzision und TrefferquoteDer F1-ScoreUnausgewogene KlassenROC-KurvenRückblick: Screeningtest3Lineare Regression
Zahlen vorhersagenMehrere MerkmaleFehler messenResiduenplotsZusammenfassung: Fahrradverleih6Entscheidungsbäume
Bäume stellen FragenEinen Baum lesenBaumtiefeMerkmalswichtigkeitRückblick: Kreditentscheidungen9Ensembleverfahren
Random ForestsWarum Random Forests funktionierenGradient BoostingRückblick: Förster des Waldes12Abschließende Herausforderungen
Diabetes-FortschrittKreditgenehmigungHandgeschriebene ZiffernKundenabwanderungÜbe selbstständig: Online-Python-Compiler