Rekursive Feature-Eliminierung mit Kreuzvalidierung

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 diesem Lab werden wir einen Schritt-für-Schritt-Prozess durchlaufen, um die rekursive Feature-Eliminierung mit Kreuzvalidierung (RFECV) mit scikit-learn umzusetzen. RFECV wird zur Feature-Selektion verwendet, das heißt, es ist der Prozess, einen Teilsatz von relevanten Features auszuwählen, um sie bei der Modellkonstruktion zu verwenden. Wir werden eine Klassifizierungsaufgabe mit 15 Features verwenden, von denen 3 informativ, 2 redundant und 10 nicht-informativ sind.

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 während des Lernens Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.

Datenerzeugung

Wir werden eine Klassifizierungsaufgabe mit der make_classification-Funktion von scikit-learn erzeugen. Wir werden 500 Proben mit 15 Features erzeugen, von denen 3 informativ, 2 redundant und 10 nicht-informativ sind.

from sklearn.datasets import make_classification

X, y = make_classification(
    n_samples=500,
    n_features=15,
    n_informative=3,
    n_redundant=2,
    n_repeated=0,
    n_classes=8,
    n_clusters_per_class=1,
    class_sep=0.8,
    random_state=0,
)

Modelltraining und -auswahl

Wir werden das RFECV-Objekt erstellen und die mit Kreuzvalidierung bewerteten Scores berechnen. Die Bewertungsstrategie "accuracy" optimiert den Anteil korrekt klassifizierter Proben. Wir werden die logistische Regression als Schätzer und die stratifizierte k-fache Kreuzvalidierung mit 5 Folds verwenden.

from sklearn.feature_selection import RFECV
from sklearn.model_selection import StratifiedKFold
from sklearn.linear_model import LogisticRegression

min_features_to_select = 1  ## Mindestanzahl an Features, die berücksichtigt werden sollen
clf = LogisticRegression()
cv = StratifiedKFold(5)

rfecv = RFECV(
    estimator=clf,
    step=1,
    cv=cv,
    scoring="accuracy",
    min_features_to_select=min_features_to_select,
    n_jobs=2,
)
rfecv.fit(X, y)

print(f"Optimal number of features: {rfecv.n_features_}")

Anzahl der Features gegen Kreuzvalidierungsscores plotten

Wir werden die Anzahl der ausgewählten Features gegen die Kreuzvalidierungsscores plotten. Wir werden matplotlib verwenden, um das Diagramm zu erstellen.

import matplotlib.pyplot as plt

n_scores = len(rfecv.cv_results_["mean_test_score"])
plt.figure()
plt.xlabel("Anzahl der ausgewählten Features")
plt.ylabel("Durchschnittliche Testgenauigkeit")
plt.errorbar(
    range(min_features_to_select, n_scores + min_features_to_select),
    rfecv.cv_results_["mean_test_score"],
    yerr=rfecv.cv_results_["std_test_score"],
)
plt.title("Rekursive Feature-Eliminierung \nmit korrelierten Features")
plt.show()

Zusammenfassung

In diesem Lab haben wir den Prozess der Implementierung der rekursiven Feature-Eliminierung mit Kreuzvalidierung (RFECV) mit scikit-learn durchlaufen. Wir haben eine Klassifizierungsaufgabe mit 15 Features erzeugt, von denen 3 informativ, 2 redundant und 10 nicht-informativ waren. Wir haben die logistische Regression als Schätzer und die stratifizierte k-fache Kreuzvalidierung mit 5 Folds verwendet. Wir haben die Anzahl der ausgewählten Features gegen die Kreuzvalidierungsscores geplottet. Wir haben festgestellt, dass die optimale Anzahl an Features 3 war, was dem wahren generativen Modell entsprach. Wir haben auch eine Plateau von gleichwertigen Scores für 3 bis 5 ausgewählte Features bemerkt, die auf die Einführung von korrelierten Features zurückzuführen war.