Modellbasiertes und sequentielles Feature-Selection

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 zwei Ansätze zur Featureauswahl demonstriert: modellbasiert und sequenzielle Featureauswahl. Ziel ist es, die wichtigsten Features aus einem gegebenen Datensatz auszuwählen. Wir verwenden den Diabetes-Datensatz, der aus 10 Features besteht, die von 442 Diabetes-Patienten gesammelt wurden.

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, und wir werden das Problem für Sie prompt beheben.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/DataPreprocessingandFeatureEngineeringGroup(["Data Preprocessing and Feature Engineering"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/linear_model("Linear Models") sklearn/DataPreprocessingandFeatureEngineeringGroup -.-> sklearn/feature_selection("Feature Selection") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/linear_model -.-> lab-49279{{"Modellbasiertes und sequentielles Feature-Selection"}} sklearn/feature_selection -.-> lab-49279{{"Modellbasiertes und sequentielles Feature-Selection"}} sklearn/datasets -.-> lab-49279{{"Modellbasiertes und sequentielles Feature-Selection"}} ml/sklearn -.-> lab-49279{{"Modellbasiertes und sequentielles Feature-Selection"}} end

Laden der Daten

Wir laden den Diabetes-Datensatz aus scikit-learn und drucken seine Beschreibung.

from sklearn.datasets import load_diabetes

diabetes = load_diabetes()
X, y = diabetes.data, diabetes.target
print(diabetes.DESCR)

Feature-Wichtigkeit aus Koeffizienten

Um eine Vorstellung von der Wichtigkeit der Features zu erhalten, verwenden wir den RidgeCV-Schätzer. Die Features mit dem höchsten absoluten coef_-Wert werden als die wichtigsten betrachtet.

from sklearn.linear_model import RidgeCV

ridge = RidgeCV(alphas=np.logspace(-6, 6, num=5)).fit(X, y)
importance = np.abs(ridge.coef_)
feature_names = np.array(diabetes.feature_names)
plt.bar(height=importance, x=feature_names)
plt.title("Feature importances via coefficients")
plt.show()

Auswählen von Features basierend auf der Wichtigkeit

Wir wählen die zwei am wichtigsten nach den Koeffizienten erscheinenden Features mit SelectFromModel. SelectFromModel akzeptiert einen threshold-Parameter und wird die Features auswählen, deren Wichtigkeit (definiert durch die Koeffizienten) über diesem Schwellenwert liegt.

from sklearn.feature_selection import SelectFromModel

threshold = np.sort(importance)[-3] + 0.01

sfm = SelectFromModel(ridge, threshold=threshold).fit(X, y)
print(f"Features selected by SelectFromModel: {feature_names[sfm.get_support()]}")

Auswählen von Features mit sequentieller Featureauswahl

Wir verwenden den Sequential Feature Selector (SFS), um Features auszuwählen. SFS ist ein greedy-Verfahren, bei dem wir in jeder Iteration das beste neue Feature auswählen, das wir zu unseren ausgewählten Features hinzufügen möchten, basierend auf einem Kreuzvalidierungsscore. Wir können auch in die entgegengesetzte Richtung gehen (rückwärts SFS), d.h. beginnen wir mit allen Features und wählen schrittweise Features aus, die wir nacheinander entfernen möchten.

from sklearn.feature_selection import SequentialFeatureSelector

sfs_forward = SequentialFeatureSelector(ridge, n_features_to_select=2, direction="forward").fit(X, y)
sfs_backward = SequentialFeatureSelector(ridge, n_features_to_select=2, direction="backward").fit(X, y)

print(f"Features selected by forward sequential selection: {feature_names[sfs_forward.get_support()]}")
print(f"Features selected by backward sequential selection: {feature_names[sfs_backward.get_support()]}")

Zusammenfassung

In diesem Lab wurden zwei Ansätze zur Featureauswahl demonstriert: modellbasiert und sequentielle Featureauswahl. Wir haben den RidgeCV-Schätzer verwendet, um die Wichtigkeit der Features zu bestimmen, und SelectFromModel, um Features basierend auf ihrer Wichtigkeit auszuwählen. Der Sequential Feature Selector ist ein greedy-Verfahren, bei dem wir in jeder Iteration das beste neue Feature auswählen, das wir zu unseren ausgewählten Features hinzufügen möchten, basierend auf einem Kreuzvalidierungsscore.