Neben einfach eine bestimmte benutzerdefinierte Funktion Umwickeln die FunctionTransformer einige Standardverfahren der anderen sklearn Schätzern liefert (z.B. fit
und transform
). Der Vorteil davon ist, dass Sie beliebige, zustandslose Transformationen in einen Sklearn Pipeline einführen können, der mehrere Verarbeitungsstufen kombiniert. Dies erleichtert das Ausführen einer Verarbeitungspipeline, da Sie Ihre Daten (X
) einfach an die fit
- und transform
-Methoden des Objekts Pipeline
übergeben können, ohne jede Stufe der Pipeline einzeln explizit anwenden zu müssen. Hier
ist ein Beispiel direkt aus der sklearn Dokumentation kopiert (befindet here):
def all_but_first_column(X): return X[:, 1:]
def drop_first_component(X, y): """ Create a pipeline with PCA and the column selector and use it to transform the dataset. """ pipeline = make_pipeline( PCA(), FunctionTransformer(all_but_first_column), ) X_train, X_test, y_train, y_test = train_test_split(X, y) pipeline.fit(X_train, y_train) return pipeline.transform(X_test), y_test
Beachten Sie, dass die erste Hauptkomponente nicht explizit aus den Daten entfernt wurde. Die Pipeline kettet die Transformationen automatisch zusammen, wenn pipeline.transform
aufgerufen wird.
Ein Anwendungsfall, an den ich denken könnte: Fügen Sie eine * zustandslose Transformation * hinzu, wie das Skalieren auf eine nicht einfache Pipeline (z. B. Dimensionsreduktion -> Klassifizierer innerhalb der Kreuzvalidierung). Diese abstrakte Funktion sollte die für diese Pipeline erforderliche Schnittstelle (Fit, Transform und Co) bereitstellen, ohne dass Sie dies selbst schreiben müssen. – sascha