In fit lernen, in transform anwenden
Ein Transformer ist ein Estimator mit einer zweiten Aufgabe. fit(X) lernt Zahlen aus den Daten (einen Mittelwert, ein Quantil, ein Vokabular), legt sie in Attributen ab, die auf einen Unterstrich enden, und gibt self zurück. transform(X) wendet diese gespeicherten Zahlen dann auf beliebige Daten an, neue oder alte, ohne sie anzusehen, um etwas zu entscheiden. Diese Trennung ist der ganze Sinn: Die Zahlen werden einmal auf den Trainingszeilen gelernt, die Testzeilen werden nur transformiert. Ein Winsorizer ist ein gutes erstes Beispiel. fit lernt je Spalte ein unteres und ein oberes Quantil, und transform kappt mit np.clip dazwischen. Würde transform die Quantile auf den erhaltenen Daten neu berechnen, würde jeder Datensatz auf seinen eigenen Bereich gekappt und die Trainingsinformation käme nie im Test an. Erben Sie von TransformerMixin und BaseEstimator, und fit_transform und die Parametermechanik gibt es gratis.
Echte Tabellen mischen Zahlen und Kategorien, daher bietet scikit-learn ColumnTransformer([(Name, Transformer, Spalten), ...]): Jeder Zweig bearbeitet seine Spalten, die Ausgaben werden nebeneinander geklebt. Hier ist der numerische Zweig make_pipeline(Winsorizer(0.02, 0.98), StandardScaler()) und der kategoriale OneHotEncoder(handle_unknown='ignore'), der eine unbekannte Kategorie in eine Nullzeile statt in einen Fehler verwandelt. sparse_threshold=0 erzwingt ein dichtes Array. Um die Ausgabespalten zu benennen, muss jeder Schritt get_feature_names_out beantworten, weshalb Ihr Winsorizer es implementieren muss: Er gibt die erhaltenen Namen zurück. Die goldene Regel lautet: fit_transform auf den Trainingszeilen, nur transform auf den Testzeilen. Im Aktienpanel (26 Symbole, 10.296 Zeilen) lässt der Schnitt am 1. Januar 2023 5.564 Trainings- und 4.732 Testzeilen übrig, und etwa 2,2 % der Test-Momentumwerte liegen außerhalb des 2-%–98-%-Bereichs des Trainings und werden auf die Trainingsgrenzen gekappt.
- Einmal lernen, überall anwenden:
fitspeichert Zahlen aus den Trainingszeilen,transformwendet sie nur an. - Ein Preprozessor, zwei Zweige:
ColumnTransformerschickt Zahlen und Kategorien in eigene Schritte;handle_unknown="ignore"übersteht neue Kategorien. - Den ganzen Vertrag umsetzen: Ein Transformer, der seine Ausgabespalten nicht benennen kann, bricht
get_feature_names_outfür die ganze Pipeline.
Lab: Was bewertet wird
- Der Konstruktor5 Pkt.
- Fit und Transform20 Pkt.
- Merkmalsnamen und Pipelines10 Pkt.
- Der zweizweigige Preprozessor15 Pkt.
- Nach Datum teilen10 Pkt.
- Nur auf der Vergangenheit fitten10 Pkt.
- Die Panel-Studie30 Pkt.