Pipelines und zusammengesetzte Schätzer

Machine LearningMachine LearningBeginner
Jetzt üben

This tutorial is from open-source community. Access the source code

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In scikit-learn werden Pipelines und zusammengesetzte Schätzer verwendet, um mehrere Transformatoren und Schätzer zu einem einzelnen Modell zu kombinieren. Dies ist nützlich, wenn es eine feste Sequenz von Schritten für die Datenverarbeitung gibt, wie die Feature-Selektion, die Normalisierung und die Klassifikation. Pipelines können auch für die gemeinsame Parameterauswahl verwendet werden und sicherstellen, dass Statistiken aus den Testdaten nicht in das trainierte Modell während der Kreuzvalidierung "lecken".

Tipps für die VM

Nachdem der VM-Start abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu nutzen.

Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund der Einschränkungen in Jupyter Notebook nicht automatisiert werden.

Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.

Pipeline - Kette von Schätzern

Die Pipeline-Klasse in scikit-learn wird verwendet, um mehrere Schätzer zu einer einzigen Kette zu verketten. Dies ermöglicht es Ihnen, einmal fit und predict auf Ihren Daten aufzurufen, um eine ganze Sequenz von Schätzern anzupassen. Es ermöglicht auch die gemeinsame Parameterauswahl und hilft dabei, Datenleckage bei der Kreuzvalidierung zu vermeiden.

Um eine Pipeline zu erstellen, müssen Sie eine Liste von (Schlüssel, Wert)-Paaren angeben, wobei der Schlüssel ein String ist, um jeden Schritt zu identifizieren, und der Wert ein Schätzerobjekt ist. Im Folgenden ist ein Beispiel für das Erstellen einer Pipeline mit einem PCA-Transformator und einem SVM-Klassifizierer:

from sklearn.pipeline import Pipeline
from sklearn.svm import SVC
from sklearn.decomposition import PCA

estimators = [('reduce_dim', PCA()), ('clf', SVC())]
pipe = Pipeline(estimators)

Sie können die Schritte einer Pipeline über Indexierung oder nach Namen zugreifen:

pipe.steps[0]  ## Zugang über Index
pipe[0]  ## Äquivalent zu oben
pipe['reduce_dim']  ## Zugang nach Namen

Sie können auch die make_pipeline-Funktion als Abkürzung für das Erstellen von Pipelines verwenden:

from sklearn.pipeline import make_pipeline
from sklearn.naive_bayes import MultinomialNB
from sklearn.preprocessing import Binarizer

make_pipeline(Binarizer(), MultinomialNB())

Verschachtelte Parameter

Sie können die Parameter der Schätzer in einer Pipeline über die Syntax <Schätzer>__<Parameter> zugreifen. Dies ist nützlich, um Grid-Searches über die Parameter aller Schätzer in der Pipeline durchzuführen. Hier ist ein Beispiel:

pipe.set_params(clf__C=10)

Caching von Transformatoren

Das Anpassen von Transformatoren kann rechenintensiv sein. Um wiederholte Berechnungen zu vermeiden, können Sie die Caching von Transformatoren in einer Pipeline mithilfe des Parameters memory aktivieren. Dieser Parameter kann auf ein Verzeichnis festgelegt werden, in dem die Transformatoren zwischengespeichert werden, oder auf ein joblib.Memory-Objekt. Hier ist ein Beispiel:

from sklearn.decomposition import PCA
from sklearn.svm import SVC
from sklearn.pipeline import Pipeline
from tempfile import mkdtemp
from shutil import rmtree

estimators = [('reduce_dim', PCA()), ('clf', SVC())]
cachedir = mkdtemp()
pipe = Pipeline(estimators, memory=cachedir)

## Leeren Sie das Cachedir, wenn es nicht mehr benötigt wird
rmtree(cachedir)

TransformedTargetRegressor

Die TransformedTargetRegressor-Klasse wird verwendet, um die Zielvariable in einem Regressionsproblem vor dem Anpassen eines Regressionsmodells zu transformieren. Dies ist nützlich, wenn Sie eine Transformation auf die Zielvariable anwenden möchten, wie z. B. das Nehmen des Logarithmus. Die Vorhersagen werden über eine inverse Transformation zurück in den ursprünglichen Raum abgebildet. Hier ist ein Beispiel für die Verwendung von TransformedTargetRegressor mit einem linearen Regressionsmodell und einem Quantile-Transformer:

import numpy as np
from sklearn.datasets import fetch_california_housing
from sklearn.compose import TransformedTargetRegressor
from sklearn.preprocessing import QuantileTransformer
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split

X, y = fetch_california_housing(return_X_y=True)
transformer = QuantileTransformer(output_distribution='normal')
regressor = LinearRegression()
regr = TransformedTargetRegressor(regressor=regressor, transformer=transformer)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
regr.fit(X_train, y_train)
regr.score(X_test, y_test)

FeatureUnion - Zusammengesetzte Merkmalsräume

Die FeatureUnion-Klasse wird verwendet, um mehrere Transformatorobjekte zu einem neuen Transformator zu kombinieren, der ihre Ausgabe zusammenfasst. Dies ist nützlich, wenn Sie verschiedene Transformationen auf verschiedene Merkmale der Daten anwenden möchten, z. B. die Text-, Float- und Datumsvorverarbeitung separat durchführen. Die Transformatoren werden parallel angewendet, und die von ihnen ausgegebenen Merkmalsmatrizen werden nebeneinander zu einer größeren Matrix zusammengefügt. Hier ist ein Beispiel:

from sklearn.pipeline import FeatureUnion
from sklearn.decomposition import PCA
from sklearn.decomposition import KernelPCA

estimators = [('linear_pca', PCA()), ('kernel_pca', KernelPCA())]
combined = FeatureUnion(estimators)

Zusammenfassung

Pipeline und zusammengesetzte Schätzer sind leistungsstarke Werkzeuge in scikit-learn, um Transformatoren und Schätzer zu einem einzelnen Modell zu kombinieren. Sie bieten Bequemlichkeit, Parameterauswahl und Datensicherheit. Pipelines ermöglichen das Verketteln von Schätzern, verschachtelte Parameter und das Caching von Transformatoren. Zusammengesetzte Schätzer wie TransformedTargetRegressor und FeatureUnion bieten jeweils Transformationen und Merkmalskombination. Diese Konzepte sind essentiell für das Aufbauen komplexer maschineller Lernmodelle, die die Vorverarbeitung und die effektive Behandlung heterogener Daten ermöglichen.