Pipeline ANOVA SVM#

Dieses Beispiel zeigt, wie eine Merkmalsauswahl einfach in eine Machine-Learning-Pipeline integriert werden kann.

Wir zeigen auch, dass Sie einfach Teile der Pipeline inspizieren können.

# Authors: The scikit-learn developers
# SPDX-License-Identifier: BSD-3-Clause

Wir beginnen mit der Generierung eines binären Klassifizierungsdatensatzes. Anschließend teilen wir den Datensatz in zwei Untergruppen auf.

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

X, y = make_classification(
    n_features=20,
    n_informative=3,
    n_redundant=0,
    n_classes=2,
    n_clusters_per_class=2,
    random_state=42,
)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

Ein häufiger Fehler bei der Merkmalsauswahl ist die Suche nach einer Teilmenge diskriminierender Merkmale im gesamten Datensatz, anstatt nur den Trainingsdatensatz zu verwenden. Die Verwendung der Pipeline von scikit-learn verhindert solche Fehler.

Hier demonstrieren wir, wie eine Pipeline aufgebaut wird, bei der der erste Schritt die Merkmalsauswahl ist.

Beim Aufruf von fit auf den Trainingsdaten wird eine Teilmenge von Merkmalen ausgewählt und der Index dieser ausgewählten Merkmale gespeichert. Der Merkmalsselektor reduziert anschließend die Anzahl der Merkmale und übergibt diese Teilmenge an den Klassifikator, der trainiert wird.

from sklearn.feature_selection import SelectKBest, f_classif
from sklearn.pipeline import make_pipeline
from sklearn.svm import LinearSVC

anova_filter = SelectKBest(f_classif, k=3)
clf = LinearSVC()
anova_svm = make_pipeline(anova_filter, clf)
anova_svm.fit(X_train, y_train)
Pipeline(steps=[('selectkbest', SelectKBest(k=3)), ('linearsvc', LinearSVC())])
In einer Jupyter-Umgebung führen Sie diese Zelle bitte erneut aus, um die HTML-Darstellung anzuzeigen, oder vertrauen Sie dem Notebook.
Auf GitHub kann die HTML-Darstellung nicht gerendert werden. Versuchen Sie bitte, diese Seite mit nbviewer.org zu laden.


Nachdem das Training abgeschlossen ist, können wir Vorhersagen für neue, unsichtbare Stichproben treffen. In diesem Fall wählt der Merkmalsselektor nur die diskriminierendsten Merkmale basierend auf den während des Trainings gespeicherten Informationen aus. Dann werden die Daten an den Klassifikator übergeben, der die Vorhersage trifft.

Hier zeigen wir die endgültigen Metriken über einen Klassifizierungsbericht.

from sklearn.metrics import classification_report

y_pred = anova_svm.predict(X_test)
print(classification_report(y_test, y_pred))
              precision    recall  f1-score   support

           0       0.92      0.80      0.86        15
           1       0.75      0.90      0.82        10

    accuracy                           0.84        25
   macro avg       0.84      0.85      0.84        25
weighted avg       0.85      0.84      0.84        25

Beachten Sie, dass Sie einen Schritt in der Pipeline inspizieren können. Zum Beispiel könnten wir uns für die Parameter des Klassifikators interessieren. Da wir drei Merkmale ausgewählt haben, erwarten wir drei Koeffizienten.

anova_svm[-1].coef_
array([[0.75788833, 0.27161955, 0.26113448]])

Wir wissen jedoch nicht, welche Merkmale aus dem ursprünglichen Datensatz ausgewählt wurden. Wir könnten auf verschiedene Weisen vorgehen. Hier werden wir die Transformation dieser Koeffizienten invertieren, um Informationen über den ursprünglichen Raum zu erhalten.

anova_svm[:-1].inverse_transform(anova_svm[-1].coef_)
array([[0.        , 0.        , 0.75788833, 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.27161955,
        0.        , 0.        , 0.        , 0.        , 0.        ,
        0.        , 0.        , 0.        , 0.        , 0.26113448]])

Wir sehen, dass die Merkmale mit nicht-null Koeffizienten die vom ersten Schritt ausgewählten Merkmale sind.

Gesamtlaufzeit des Skripts: (0 Minuten 0,014 Sekunden)

Verwandte Beispiele

Rekursive Merkmalseliminierung mit Kreuzvalidierung

Rekursive Merkmalseliminierung mit Kreuzvalidierung

Modellbasierte und sequentielle Merkmalsauswahl

Modellbasierte und sequentielle Merkmalsauswahl

Benutzerdefinierte Refit-Strategie einer Gitter-Suche mit Kreuzvalidierung

Benutzerdefinierte Refit-Strategie einer Gitter-Suche mit Kreuzvalidierung

Univariate Merkmalsauswahl

Univariate Merkmalsauswahl

Galerie generiert von Sphinx-Gallery