Hinweis
Zum Ende springen, um den vollständigen Beispielcode herunterzuladen oder dieses Beispiel über JupyterLite oder Binder in Ihrem Browser auszuführen.
Auswahl der Dimensionsreduktion mit Pipeline und GridSearchCV#
Dieses Beispiel konstruiert eine Pipeline, die eine Dimensionsreduktion gefolgt von einer Vorhersage mit einem Support Vector Classifier durchführt. Es demonstriert die Verwendung von GridSearchCV und Pipeline, um über verschiedene Klassen von Schätzern in einem einzigen CV-Durchlauf zu optimieren – unüberwachte PCA und NMF Dimensionsreduktionen werden während der Grid-Suche mit der univariaten Merkmalsauswahl verglichen.
Zusätzlich kann Pipeline mit dem Argument memory instanziiert werden, um die Transformer innerhalb der Pipeline zu cachen und das wiederholte Anpassen derselben Transformer zu vermeiden.
Beachten Sie, dass die Verwendung von memory zur Aktivierung von Caching interessant wird, wenn das Anpassen eines Transformers kostspielig ist.
# Authors: The scikit-learn developers
# SPDX-License-Identifier: BSD-3-Clause
Illustration von Pipeline und GridSearchCV#
import matplotlib.pyplot as plt
import numpy as np
from sklearn.datasets import load_digits
from sklearn.decomposition import NMF, PCA
from sklearn.feature_selection import SelectKBest, mutual_info_classif
from sklearn.model_selection import GridSearchCV
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import MinMaxScaler
from sklearn.svm import LinearSVC
X, y = load_digits(return_X_y=True)
pipe = Pipeline(
[
("scaling", MinMaxScaler()),
# the reduce_dim stage is populated by the param_grid
("reduce_dim", "passthrough"),
("classify", LinearSVC(dual=False, max_iter=10000)),
]
)
N_FEATURES_OPTIONS = [2, 4, 8]
C_OPTIONS = [1, 10, 100, 1000]
param_grid = [
{
"reduce_dim": [PCA(iterated_power=7), NMF(max_iter=1_000)],
"reduce_dim__n_components": N_FEATURES_OPTIONS,
"classify__C": C_OPTIONS,
},
{
"reduce_dim": [SelectKBest(mutual_info_classif)],
"reduce_dim__k": N_FEATURES_OPTIONS,
"classify__C": C_OPTIONS,
},
]
reducer_labels = ["PCA", "NMF", "KBest(mutual_info_classif)"]
grid = GridSearchCV(pipe, n_jobs=1, param_grid=param_grid)
grid.fit(X, y)
Transformer im Cache speichern innerhalb einer Pipeline#
Es ist manchmal lohnenswert, den Zustand eines bestimmten Transformers zu speichern, da er wiederverwendet werden könnte. Die Verwendung einer Pipeline in GridSearchCV führt zu solchen Situationen. Daher verwenden wir das Argument memory, um das Caching zu aktivieren.
Warnung
Beachten Sie, dass dieses Beispiel jedoch nur eine Veranschaulichung ist, da für diesen speziellen Fall das Anpassen von PCA nicht unbedingt langsamer ist als das Laden des Caches. Verwenden Sie daher den Konstruktorparameter memory, wenn das Anpassen eines Transformers kostspielig ist.
from shutil import rmtree
from joblib import Memory
# Create a temporary folder to store the transformers of the pipeline
location = "cachedir"
memory = Memory(location=location, verbose=10)
cached_pipe = Pipeline(
[("reduce_dim", PCA()), ("classify", LinearSVC(dual=False, max_iter=10000))],
memory=memory,
)
# This time, a cached pipeline will be used within the grid search
# Delete the temporary cache before exiting
memory.clear(warn=False)
rmtree(location)
Die Anpassung von PCA wird nur bei der Auswertung der ersten Konfiguration des Parameters C des LinearSVC Klassifikators berechnet. Die anderen Konfigurationen von C lösen das Laden der gecachten PCA-Schätzerdaten aus, was zu einer Zeitersparnis führt. Daher ist die Verwendung des Cachings der Pipeline mit memory sehr vorteilhaft, wenn das Anpassen eines Transformers kostspielig ist.
Gesamtlaufzeit des Skripts: (0 Minuten 42,909 Sekunden)
Verwandte Beispiele
