Letzter Schätzer
Swipe um das Menü anzuzeigen
Pipeline wurde zuvor für die Vorverarbeitung verwendet, aber der eigentliche Zweck ist das Verketten der Vorverarbeitung mit einem abschließenden Prädiktor. Der letzte Schritt in einer Pipeline kann jeder beliebige Schätzer sein (typischerweise ein Modell), der Vorhersagen erzeugt.
Beim Aufruf von .fit() führt jeder Transformer .fit_transform() aus.
Beim Aufruf von .predict() verwendet die Pipeline .transform(), bevor die Daten an den abschließenden Schätzer weitergegeben werden.
Dies ist erforderlich, da neue Daten exakt wie die Trainingsdaten transformiert werden müssen.
Warum .transform()?
Die Verwendung von .fit_transform() auf neuen Daten kann zu veränderten Kodierungen führen (z. B. beim OneHotEncoder), wodurch nicht übereinstimmende Spalten und unzuverlässige Vorhersagen entstehen können.
.transform() gewährleistet konsistente Vorverarbeitung, indem unbekannte Kategorien ignoriert und die gleiche Spaltenreihenfolge beibehalten wird.
Hier ist der Originaldatensatz vor jeglicher Transformation. Diese Rohdaten bilden den Ausgangspunkt für den Transformationsprozess. Es wurde noch keine Kodierung oder Vorverarbeitung angewendet – jede Zeile zeigt eine Instanz mit ihrem Farbmerkmal als Zeichenkette. Diese Daten werden mithilfe von Vorverarbeitungsschritten in der Pipeline transformiert.
Diese Tabelle zeigt den Datensatz vor der One-Hot-Encoding-Transformation. Die Spalte Color ist kategorisch—sie enthält Zeichenfolgen anstelle von Zahlen. In einem nächsten Schritt wird diese Spalte mithilfe von One-Hot-Encoding in separate binäre Spalten umgewandelt, was für die korrekte Verarbeitung kategorialer Daten durch die meisten Machine-Learning-Modelle unerlässlich ist.
So sieht die One-Hot-encodierte Trainingsdaten aus:
Die folgende Tabelle zeigt den Datensatz nach Anwendung des One-Hot-Encoding. Die ursprüngliche Spalte Color wurde durch separate binäre Spalten ersetzt—Color_Red, Color_Blue und Color_Green. Jede Spalte gibt an, ob die jeweilige Instanz diese spezifische Farbe besitzt (1) oder nicht (0).
Beachte, dass die ursprüngliche einzelne Spalte Color durch drei separate Spalten ersetzt wurde: Color_Red, Color_Blue und Color_Green. Jede Spalte gibt an, ob eine bestimmte Farbe für diese Instanz vorhanden ist, wobei 1 für Ja und 0 für Nein steht. Diese Umwandlung wird als One-Hot-Encoding bezeichnet.
Diese Änderung ist für Machine-Learning-Modelle entscheidend, da die meisten Algorithmen nicht direkt mit Text- oder kategorialen Daten arbeiten können. Durch die Umwandlung von Kategorien in separate binäre Spalten erhält das Modell klare, numerische Merkmale, anhand derer es Muster erkennen und Vorhersagen treffen kann. Dieser Ansatz verhindert außerdem, dass das Modell eine ordinale Beziehung zwischen den ursprünglichen Kategorien annimmt, was zu falschen Schlussfolgerungen führen könnte.
Hier sind die neuen Instanzen, die vorhergesagt werden sollen:
Hier sind die neuen Daten, für die Vorhersagen getroffen werden sollen. Dies ist der Rohinput – der 'Vorher'-Zustand – genau so, wie er vor jeglicher Transformation oder Vorverarbeitung vorliegt. Die Pipeline wird diese Daten transformieren, sodass sie dem während des Trainings verwendeten Format entsprechen, bevor Vorhersagen gemacht werden.
Der nächste Schritt besteht darin, diese neuen Instanzen mit dem zuvor angepassten Encoder zu transformieren. Dies stellt sicher, dass die neuen Daten auf die gleiche Weise wie die Trainingsdaten verarbeitet werden, was Konsistenz und zuverlässige Vorhersagen durch das Modell gewährleistet.
Wenn .fit_transform() auf neue Instanzen angewendet wird, kann der OneHotEncoder Spalten in einer anderen Reihenfolge erzeugen oder sogar neue hinzufügen. Dadurch wird die neue Datenmenge inkonsistent mit dem Trainingssatz transformiert, was die Vorhersagen unzuverlässig macht.
Wenn Sie .fit_transform() auf neue Daten anstelle von .transform() verwenden, behandelt der Encoder die neuen Daten, als würde er sie zum ersten Mal sehen. Dadurch:
- Lernt er die Kategorien aus den neuen Daten erneut;
- Ändert die Reihenfolge der Spalten basierend auf dem neuen Satz von Kategorien;
- Fügt eine neue Spalte für jede unbekannte Kategorie hinzu, wie zum Beispiel
'Color_Yellow'in diesem Fall.
Dies führt zu einer Inkonsistenz zwischen Trainings- und Vorhersagedaten, macht Vorhersagen unzuverlässig und kann Fehler in Ihrer Pipeline verursachen.
Beachte den Unterschied zwischen der fehlerhaften und der korrekten Transformation. Die Tabelle mit der fehlerhaften Transformation enthält eine neue Spalte (Color_Yellow) und verändert die Reihenfolge der Spalten im Vergleich zu den Trainingsdaten. Dadurch wird die Konsistenz zwischen Training und Vorhersage unterbrochen:
- Das Modell erwartet die gleichen Spalten und die gleiche Reihenfolge wie beim Training;
- Neue oder umsortierte Spalten führen dazu, dass das Modell die falschen Merkmale verwendet;
- Vorhersagen werden unzuverlässig, da die Eingabestruktur nicht mehr mit dem gelernten Modell übereinstimmt.
Stelle immer sicher, dass neue Daten nach dem Fitten mit .transform() transformiert werden, damit Spalten und Reihenfolge konsistent bleiben. Dies ist entscheidend für genaue und vertrauenswürdige Vorhersagen.
Die Verwendung von .transform() stellt jedoch sicher, dass die neuen Daten genau wie die Trainingsdaten kodiert werden, wobei Kategorien ignoriert werden, die während des Trainings nicht vorhanden waren:
Wenn .transform() auf neue Daten angewendet wird, werden im Output nur die Spalten aus dem Training übernommen. Alle Kategorien, die während des Trainings nicht vorhanden waren—wie 'Yellow'—werden ignoriert. Dies garantiert, dass die neuen Daten der vom Modell erwarteten Struktur entsprechen, ohne zusätzliche oder fehlende Spalten.
Vergleich der drei Tabellen:
- Die ursprünglichen Trainingsdaten (nach One-Hot-Encoding) enthalten Spalten für
Color_Red,Color_BlueundColor_Green; - Die falsch transformierten neuen Daten (mit
.fit_transform()) fügen eine SpalteColor_Yellowhinzu und entfernenColor_Green, wodurch sich die Spaltenreihenfolge und -struktur ändern; - Die korrekt transformierten neuen Daten (mit
.transform()) behalten die gleichen Spalten und die Reihenfolge wie im Trainingssatz bei, mit Nullen für unbekannte Kategorien wieYellow.
Die Verwendung von .transform() ist der richtige Ansatz, da dadurch sichergestellt wird, dass neue Daten exakt wie die Trainingsdaten verarbeitet werden. Dies gewährleistet, dass das Modell die Daten im erwarteten Format erhält, Fehler vermieden werden und die Vorhersagen zuverlässig sind.
Hinzufügen des finalen Schätzers
Das Modell einfach als letzten Schritt der Pipeline hinzufügen:
pipe = make_pipeline(
ct,
SimpleImputer(strategy='most_frequent'),
StandardScaler(),
KNeighborsClassifier()
)
pipe.fit(X, y)
pipe.predict(X_new)
Dadurch kann der gesamte Workflow – Vorverarbeitung + Vorhersage – mit einem einzigen Aufruf ausgeführt werden.
12345678910111213141516171819202122232425262728293031323334353637from sklearn.pipeline import make_pipeline from sklearn.compose import ColumnTransformer from sklearn.impute import SimpleImputer from sklearn.preprocessing import StandardScaler from sklearn.neighbors import KNeighborsClassifier import pandas as pd # Example data data = pd.DataFrame({ 'color': ['red', 'blue', 'green'], 'value': [1, 2, 3] }) labels = [0, 1, 0] # Define a simple column transformer (placeholder for real preprocessing) ct = ColumnTransformer([ ('imputer', SimpleImputer(strategy='most_frequent'), ['color']) ]) # --- Before: Pipeline with only preprocessing steps --- # This pipeline only transforms the data; it cannot make predictions. pipeline_preprocessing = make_pipeline( ct, StandardScaler() ) # pipeline_preprocessing.fit(data) # Only fits transformers, no estimator at the end # --- After: Pipeline with a final estimator --- # Now the pipeline ends with a model, so it can fit and predict. pipeline_full = make_pipeline( ct, StandardScaler(), KNeighborsClassifier() ) pipeline_full.fit(data, labels) predictions = pipeline_full.predict(data) print("Predictions:", predictions)
Das Hinzufügen des finalen Estimators als letzten Schritt macht Ihre Pipeline zu einem vollständigen End-to-End-Workflow. Anstatt nur Ihre Daten vorzubereiten, übernimmt die Pipeline nun sowohl die Vorverarbeitung als auch die Vorhersage in einem einzigen Objekt. Das bedeutet, Sie können fit() und predict() direkt auf der Pipeline aufrufen, und alle Vorverarbeitungsschritte werden automatisch vor der Vorhersage angewendet.
Dieser Ansatz ist wichtig, weil:
- Alle Daten werden während Training und Vorhersage exakt gleich verarbeitet;
- Das Risiko von Fehlern wird reduziert, zum Beispiel das Vergessen eines Vorverarbeitungsschritts bei neuen Daten;
- Ihr Code wird übersichtlicher und leichter wartbar, da der gesamte Workflow an einem Ort verwaltet wird.
Durch das Verketten von Vorverarbeitung und Modellierung stellen Sie Konsistenz, Zuverlässigkeit und Einfachheit in Ihren Machine-Learning-Projekten sicher.
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen