Fehlende Werte in einer Pipeline imputieren
Teil des Abschnitts Überwachtes Lernen der Machine Learning-Journey von Coddy. Lektion 47 von 58.
In echten Protokollen gibt es Lücken, und die meisten Modelle können damit nicht umgehen. Ein SimpleImputer füllt jede Lücke mit dem Mittelwert, Median oder häufigsten Wert der jeweiligen Spalte.
Vor der Aufteilung auffüllen, und die Testzeilen helfen bei der Wahl dieses Werts: ein Leak. Sieben Tauchtiefen und eine Lücke:
In einer Pipeline lernt fit die Ersatzwerte ausschließlich aus den Trainingszeilen:
from sklearn.impute import SimpleImputer
pipe = make_pipeline(SimpleImputer(strategy="median"), StandardScaler(), model)
pipe.fit(X_train, y_train)
print(pipe[0].statistics_) # die Auffüllwerte des ersten SchrittsFür ein Tauchprotokoll (Tiefe, Minuten, Wassertemperatur) wird Folgendes ausgegeben:
[19. 44. 21.]Auch bei Wörtern werden die Zahlen-Schritte zu einer Spur des ColumnTransformer:
lane = make_pipeline(SimpleImputer(strategy="median"), StandardScaler())
("numbers", lane, ["depth_m", "minutes"])Aufgabe
MittelEin Forstdienst sagt voraus, welche Blitzeinschläge Brände auslösen, aber einige Messwerte fehlen. Der Starter-Code teilt wildfire.csv auf und liest eine Strategie ein: mean oder median.
- Trainiere eine Pipeline aus einem Imputer mit dieser Strategie, einem Skalierer und einer logistischen Regression. Gib ihre Testgenauigkeit aus.
- Gib für jede Spalte den Füllwert der Pipeline und den Wert aus, den alle Zeilen von
Xergeben würden, auf 1 Dezimalstelle.
Ein weiterer Wald mit median:
Test accuracy: 0.840
humidity_pct: fill 46.0, all rows would give 46.0
wind_kmh: fill 29.0, all rows would give 32.0
temp_c: fill 25.0, all rows would give 26.0
days_without_rain: fill 23.0, all rows would give 23.0Überall dort, wo die beiden Werte abweichen, hätten die Testzeilen beim Füllen vor der Aufteilung die Trainingsdaten beeinflusst.
Probier es selbst
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline
# Blitzeinschläge in einem trockenen Wald: Hat der Blitzeinschlag ein Feuer ausgelöst (1) oder nicht (0)?
# Einige Wetterdaten fehlen.
strikes = pd.read_csv("wildfire.csv")
columns = ["humidity_pct", "wind_kmh", "temp_c", "days_without_rain"]
X = strikes[columns]
y = strikes["fire"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
strategy = input()
# Schreibe deinen Code unten
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: Spamfilter7Überanpassung
Unter- und ÜberanpassungLernkurvenRegularisierungValidierungssetsRückblick: Einen Baum optimieren10Pipelines
PipelinesGemischte SpaltenFehlende Werte in einer Pipeline imputierenEine Pipeline optimierenRückblick: Bereinigen und Vorhersagen2Nä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