Einführung
Beim maschinellen Lernen ist eine Pipeline eine Reihe von Schritten, die nacheinander ausgeführt werden, um die Eingabedaten zu transformieren und anschließend ein Modell zu erstellen. Scikit-learn bietet eine Pipeline-Klasse, mit der mehrere Verarbeitungsstufen miteinander verkettet werden können, was es ermöglicht, komplexe Modelle zu erstellen, die mehrere Vorverarbeitungsschritte und Modellierungsschritte umfassen.
In diesem Tutorial werden wir demonstrieren, wie man eine Pipeline mit Feature-Selektion und SVM-Klassifikation mit Scikit-learn baut. Wir werden zeigen, wie die Feature-Selektion innerhalb der Pipeline integriert werden kann, um Overfitting zu vermeiden, und wie man die Pipeline untersucht, um das Modell besser zu verstehen.
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 von 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 ab, und wir werden das Problem für Sie prompt beheben.
Datensatz generieren und aufteilen
Wir beginnen mit der Generierung eines binären Klassifikationsdatensatzes mithilfe der make_classification-Funktion von Scikit-learn. Wir teilen den Datensatz auch in Trainings- und Testuntermengen auf, indem wir die train_test_split-Funktion von Scikit-learn verwenden.
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)
Pipeline erstellen
Wir werden jetzt eine Pipeline erstellen, die aus zwei Schritten besteht: Feature-Selektion und SVM-Klassifikation. Wir werden die SelectKBest-Funktion von Scikit-learn für die Feature-Selektion und die LinearSVC-Funktion von Scikit-learn für die SVM-Klassifikation verwenden. Die SelectKBest-Funktion wählt die k am besten informativen Features basierend auf der f_classif-Methode, die den ANOVA-F-Wert zwischen jedem Feature und der Zielvariable berechnet. Wir werden in diesem Beispiel k = 3 setzen.
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(dual="auto")
anova_svm = make_pipeline(anova_filter, clf)
Pipeline trainieren
Wir werden jetzt die Pipeline auf der Trainingsuntermenge mit der fit-Methode trainieren. Während des Trainings wird die SelectKBest-Funktion die 3 am besten informativen Features basierend auf dem ANOVA-F-Wert auswählen, und die LinearSVC-Funktion wird einen linearen SVM-Klassifikator auf den ausgewählten Features trainieren.
anova_svm.fit(X_train, y_train)
Pipeline auswerten
Wir werden jetzt die Pipeline auf der Testuntermenge mit der predict-Methode auswerten. Die Pipeline wird die 3 am besten informativen Features basierend auf dem ANOVA-F-Wert auswählen, und die LinearSVC-Funktion wird Vorhersagen für die ausgewählten Features machen.
from sklearn.metrics import classification_report
y_pred = anova_svm.predict(X_test)
print(classification_report(y_test, y_pred))
Pipeline untersuchen
Wir können die Pipeline untersuchen, um das Modell besser zu verstehen. Wir können den Index der ausgewählten Features verwenden, um die ursprünglichen Feature-Namen abzurufen.
anova_svm[:-1].inverse_transform(anova_svm[-1].coef_)
Zusammenfassung
In diesem Tutorial haben wir gezeigt, wie man eine Pipeline mit Feature-Selektion und SVM-Klassifikation mit Scikit-learn aufbaut. Wir haben gezeigt, wie man die Feature-Selektion in die Pipeline integriert, um Overfitting zu vermeiden, und wie man die Pipeline untersucht, um das Modell besser zu verstehen. Pipelines sind ein leistungsstarkes Tool, um komplexe Modelle auf modular und effiziente Weise zu bauen.