Maschinelles Lernen und neuronale Netze - Seite 74

 

13.2 Filtermethoden für die Merkmalsauswahl – Varianzschwelle (L13: Merkmalsauswahl)


13.2 Filtermethoden für die Merkmalsauswahl – Varianzschwelle (L13: Merkmalsauswahl)

Ja, im vorherigen Video haben wir die drei verschiedenen Kategorien der Funktionsauswahl besprochen: Filtermethoden, eingebettete Methoden und Wrapper-Methoden. Lassen Sie uns nun tiefer in eine der Kategorien eintauchen, die Filtermethoden. In den kommenden Videos werden wir auch die eingebetteten Methoden und die Wrapper-Methoden untersuchen. Konzentrieren wir uns jedoch zunächst auf die Filtermethoden als Hauptthema.

Filtermethoden sind Techniken zur Merkmalsauswahl, die in erster Linie die intrinsischen Eigenschaften der Merkmale selbst berücksichtigen. Sie verlassen sich bei der Funktionsauswahl nicht auf ein bestimmtes Modell. Ein Beispiel für eine Filtermethode ist die Varianzschwelle. Schauen wir uns genauer an, wie der Varianzschwellenwert funktioniert.

Wenn wir einen Varianzschwellenwert für die Merkmalsauswahl verwenden, berechnen wir die Varianz jedes Merkmals. Es wird davon ausgegangen, dass Merkmale mit höheren Varianzen möglicherweise nützlichere Informationen für das Training eines Klassifikators oder eines Regressionsmodells enthalten. Aber warum ist das wahr? Um dies zu verstehen, betrachten wir eine Funktion namens X1. Auf der linken Seite haben wir ein Merkmal mit hoher Varianz und die Merkmalswerte sind gut verteilt. Auf der rechten Seite haben wir ein Merkmal mit geringer Varianz und die Merkmalswerte sind weniger verteilt. Eine höhere Varianz ermöglicht es uns, die Entscheidungsgrenzen basierend auf diesem Merkmal zu rekonstruieren. Dies ist entscheidend für genaue Vorhersagen. Selbst im schlimmsten Fall, in dem sich die Klassen überlappen, können gut verteilte Features immer noch dabei helfen, Entscheidungsgrenzen zu konstruieren.

Um dieses Konzept weiter zu veranschaulichen, betrachten wir einen binären Klassifizierungsfall. Angenommen, wir haben zwei Klassen: Klassenquadrat und Klassenstern. Im besten Fall befinden sich alle Datenpunkte einer Klasse auf der einen Seite und alle Datenpunkte der anderen Klasse auf der anderen Seite. Dies macht es einfach, eine Entscheidungsgrenze zu konstruieren, die die Klassen perfekt trennt. In realen Szenarien ist eine perfekte Trennung jedoch nicht immer erreichbar. Selbst wenn sich die Klassen überschneiden, kann ein Merkmal mit hoher Varianz dennoch bei der Konstruktion von Entscheidungsgrenzen hilfreich sein. Beispielsweise kann ein Entscheidungsbaum Datenpunkte basierend auf gut verteilten Merkmalen genau klassifizieren, wie im Codierungsbeispiel gezeigt.

Nachdem wir nun die Bedeutung der Varianz verstanden haben, wollen wir diskutieren, wie wir sie als Maß für die Merkmalsauswahl verwenden können. Die Varianz einer diskreten Zufallsvariablen kann mithilfe einer bestimmten Formel berechnet werden. In der Praxis arbeiten wir jedoch häufig mit Datensätzen, deren Wahrscheinlichkeitsverteilung wir nicht kennen. Daher gehen wir von einheitlichen Gewichten aus und berechnen die Varianz basierend auf den beobachteten Datenpunkten. Wenn wir beispielsweise mit kategorialen Merkmalen arbeiten, führen wir eine One-Hot-Codierung durch, um binäre Variablen zu erstellen. In diesem Fall kann die Varianz einer Bernoulli-Variablen als p * (1 – p) berechnet werden, wobei p die Wahrscheinlichkeit ist, einen Wert von 1 zu beobachten. Diese Varianzberechnung ist besonders nützlich für die Merkmalsauswahl in kategorialen Merkmalsszenarien.

Um eine varianzbasierte Funktionsauswahl zu implementieren, stellt Scikit-learn die Klasse VarianceThreshold bereit. Mit dieser Klasse können wir Features mit geringen Varianzen entfernen. Durch die Angabe eines Varianzschwellenwerts können wir Feature-Spalten eliminieren, bei denen ein bestimmter Prozentsatz der Beschriftungen gleich ist. Wenn wir beispielsweise Features entfernen möchten, bei denen mehr als 80 % der Beschriftungen ähnlich sind, können wir den Varianzschwellenwert auf 0,16 festlegen (berechnet als 0,8 * (1 – 0,8)). Dieser Schwellenwert stellt sicher, dass Merkmale mit geringer Unterscheidungskraft verworfen werden.

Zusammenfassend lässt sich sagen, dass Filtermethoden wie der Varianzschwellenwert für die Merkmalsauswahl wertvoll sind, da sie die intrinsischen Eigenschaften von Merkmalen berücksichtigen. Durch die Analyse der Varianz von Merkmalen können wir diejenigen identifizieren und entfernen, die nur begrenzte Informationen für Klassifizierungs- oder Regressionsaufgaben liefern.

13.2 Filter Methods for Feature Selection -- Variance Threshold (L13: Feature Selection)
13.2 Filter Methods for Feature Selection -- Variance Threshold (L13: Feature Selection)
  • 2021.12.10
  • www.youtube.com
Sorry, I had some issues with the microphone (a too aggressive filter to remove background noise). Should be better in the next vids!Description: This video ...
 

13.3.1 L1-regulierte logistische Regression als eingebettete Merkmalsauswahl (L13: Merkmalsauswahl)


13.3.1 L1-regulierte logistische Regression als eingebettete Merkmalsauswahl (L13: Merkmalsauswahl)

Im vorherigen Video haben wir verschiedene Methoden zur Feature-Auswahl besprochen und uns dabei insbesondere auf Filtermethoden konzentriert, die auf den Eigenschaften der Features basieren. Schauen wir uns nun zwei verschiedene Kategorien der Funktionsauswahl an: eingebettete Methoden und Wrapper-Methoden. Bei beiden Kategorien wird für die Merkmalsauswahl ein Modell, beispielsweise ein Klassifikator, verwendet. In diesem Video konzentrieren wir uns auf eingebettete Methoden, bei denen die Funktionsauswahl implizit als Teil des Modelltrainings- oder Optimierungsprozesses erfolgt.

Eingebettete Methoden integrieren die Merkmalsauswahl in den Modelltrainingsprozess. Wir werden dieses Konzept im Kontext der L1-regulierten logistischen Regression, auch bekannt als Lasso-Regression, untersuchen. Bevor wir fortfahren, ist es wichtig zu beachten, dass dieses Video grundlegende Kenntnisse der logistischen Regression voraussetzt. Wir werden jedoch nur die wesentlichen Konzepte behandeln, um nicht zu sehr in die Irre zu gehen.

Betrachten wir zunächst ein binäres logistisches Regressionsmodell mit zwei Klassen, das den Iris-Datensatz mit zwei Merkmalen verwendet: Blütenblattlänge und Blütenblattbreite. Die logistische Regression erzeugt eine lineare Entscheidungsgrenze zur Trennung der beiden Klassen. Die Entscheidungsgrenze wird durch Anwenden eines Schwellenwerts auf die gewichtete Summe der Eingaben bestimmt, die einer nichtlinearen Transformation unterzogen werden.

Um die logistische Regression besser zu verstehen, untersuchen wir eine grafische Darstellung des Modells. In diesem Diagramm haben wir auf der linken Seite die Gewichte (w), wobei w1 und w2 die Gewichte für die beiden Features darstellen. Zusätzlich haben wir die Bias-Einheit (B), die als Intercept-Term fungiert. Die gewichtete Summe wird als Summe des Produkts jedes Gewichtes und seines entsprechenden Merkmals plus dem Bias-Term berechnet. Diese gewichtete Summe wird dann durch eine Sigmoidfunktion, auch logistisches Sigmoid genannt, geleitet, die einen Wert zwischen 0 und 1 ausgibt. Dieser Wert stellt die Klassenzugehörigkeitswahrscheinlichkeit dar und gibt die Wahrscheinlichkeit an, dass ein Datenpunkt angesichts der beobachteten Merkmale zur Klasse 1 gehört . Durch Anwenden eines Schwellenwerts (typischerweise 0,5) können wir binäre Vorhersagen treffen und den Datenpunkt entweder als Klasse 0 oder Klasse 1 klassifizieren.

Nachdem wir nun ein grundlegendes Verständnis der logistischen Regression haben, konzentrieren wir uns auf die L1-regulierte logistische Regression. Der Schlüsselaspekt der L1-Regularisierung ist die Einbeziehung eines L1-Normterms, der die Größe der Gewichte misst. Dieser Term wird zur Verlustfunktion hinzugefügt, wodurch komplexe Modelle mit großen Gewichten effektiv bestraft werden. Bei der logistischen Regression zielen wir darauf ab, die Verlustfunktion zu minimieren und gleichzeitig die Gewichte zu minimieren.

Um dies zu veranschaulichen, stellen Sie sich Konturlinien vor, die die Verlustfunktion darstellen. Die äußeren Konturen entsprechen großen Verlustwerten, während die Konturen näher an der Mitte kleinere Verlustwerte darstellen. Das globale Minimum der Verlustfunktion ohne Regularisierung liegt in der Mitte und gibt die optimalen Gewichte zur Verlustminimierung an. Der L1-Strafbegriff bevorzugt jedoch kleinere Gewichte und fördert die Einfachheit. Durch die Einführung dieses Strafbegriffs streben wir nach einem Gleichgewicht zwischen der Minimierung des Verlusts und der Minimierung der Strafe. Bemerkenswerterweise führt die L1-regulierte logistische Regression tendenziell zu spärlichen Gewichten, wobei einige Gewichte genau Null sind. Dieser Aspekt der Funktionsauswahl macht die L1-Regularisierung attraktiv.

Um die L1-regulierte logistische Regression in der Praxis zu demonstrieren, verwenden wir den Weindatensatz. Dieser Datensatz enthält 13 verschiedene Merkmale, die sich auf verschiedene Weineigenschaften beziehen, und die Aufgabe besteht darin, die Weine in verschiedene Typen zu klassifizieren. Wir beginnen mit der Aufteilung der Daten in Trainings- und Testsätze, eine gängige Praxis beim maschinellen Lernen.

Bitte beachten Sie, dass die detaillierten Codebeispiele und weitere Erläuterungen im Notizbuch zu diesem Video zu finden sind, das weiter unten bereitgestellt wird.

Kommen wir nun zum Teil der Merkmalsauswahl unter Verwendung des L1-Regularisierungsansatzes, auch bekannt als Lasso. Wir verwenden das logistische Regressionsmodell von scikit-learn, das es uns ermöglicht, die L1-Regularisierungsstrafe anzuwenden.

 from sklearn.linear_model import LogisticRegression

# Create a Logistic Regression model with L1 regularization
model = LogisticRegression(penalty= 'l1' , solver= 'liblinear' )

# Fit the model on the training data
model.fit(X_train, y_train)

Indem wir den Penalty-Parameter auf „l1“ setzen, geben wir an, dass wir die L1-Regularisierung verwenden möchten. Der Solver-Parameter ist auf „liblinear“ eingestellt, was für kleine Datensätze wie den, mit dem wir arbeiten, geeignet ist.

Nachdem wir das Modell an die Trainingsdaten angepasst haben, können wir auf die gelernten Koeffizienten zugreifen, die die jedem Merkmal zugewiesenen Gewichte darstellen. Drucken wir die Koeffizienten aus:

# Get the learned coefficients
coefficients = model.coef_

# Print the coefficients
for i, coef in enumerate(coefficients[ 0 ]):
    print(f 'Feature {i+1}: {coef:.4f}' )
Das coef_-Attribut des Modells enthält die Koeffizienten. Wir iterieren über die Koeffizienten und drucken sie aus, wobei wir jedem Koeffizienten sein entsprechendes Merkmal zuordnen.

Als Nächstes können wir die Merkmale identifizieren, deren Koeffizienten ungleich Null sind, da es sich hierbei um die ausgewählten Merkmale handelt. Lassen Sie uns die ausgewählten Funktionen finden und ausdrucken:

# Find the indices of non-zero coefficients
selected_features = [i for i, coef in enumerate(coefficients[ 0 ]) if coef != 0 ]

# Print the selected features
print( 'Selected features:' )
for feature in selected_features:
    print(f 'Feature {feature+1}' )
Wir iterieren erneut über die Koeffizienten und speichern dieses Mal die Indizes der Koeffizienten ungleich Null in der Liste selected_features. Abschließend drucken wir die ausgewählten Features aus.

Durch die Anwendung der L1-Regularisierung führt das logistische Regressionsmodell implizit eine Merkmalsauswahl durch, indem es einige Koeffizienten auf Null setzt. Die Merkmale mit Koeffizienten ungleich Null werden für die Vorhersagen des Modells als wichtig erachtet.

Es ist wichtig zu beachten, dass die Wahl des Regularisierungsparameters C den Grad der angewendeten Regularisierung beeinflusst. Ein kleinerer C-Wert führt zu einer stärkeren Regularisierung, was möglicherweise zu mehr Features mit Nullkoeffizienten führt.

Jetzt haben Sie ein Verständnis für die Methode zur Auswahl eingebetteter Features mithilfe der L1-Regularisierung in der logistischen Regression. Im nächsten Video werden wir die Funktionsauswahl mit Entscheidungsbäumen und Zufallswäldern untersuchen.

Im nächsten Video werden wir die Funktionsauswahl mithilfe von Entscheidungsbäumen und Zufallswäldern untersuchen. Diese Methoden werden als Ensemble-Methoden bezeichnet und können sowohl für Klassifikations- als auch für Regressionsprobleme verwendet werden.

Entscheidungsbäume sind einfache, aber leistungsstarke Modelle, die Vorhersagen treffen, indem sie den Merkmalsraum in Regionen unterteilen und jeder Region eine Bezeichnung zuweisen. Random Forests hingegen sind ein Ensemble von Entscheidungsbäumen, bei denen jeder Baum auf einer zufälligen Teilmenge der Daten und Merkmale trainiert wird.

Beginnen wir mit der Verwendung des Random Forest Classifier von scikit-learn für die Funktionsauswahl:

 from sklearn.ensemble import RandomForestClassifier

# Create a Random Forest Classifier
model = RandomForestClassifier()

# Fit the model on the training data
model.fit(X_train, y_train)

Nachdem wir das Modell an die Trainingsdaten angepasst haben, können wir auf die Merkmalswichtigkeiten zugreifen, die die relative Bedeutung jedes Merkmals in den Vorhersagen des Modells darstellen. Lassen Sie uns die Bedeutung der Funktionen ausdrucken:

# Get the feature importances
importances = model.feature_importances_

# Print the feature importances
for i, importance in enumerate(importances):
    print(f 'Feature {i+1}: {importance:.4f}' )
Das Attribut feature_importances_ des Modells enthält die Feature-Wichtigkeiten. Wir durchlaufen die Wichtigkeiten und drucken sie aus, wobei wir jede Wichtigkeit der entsprechenden Funktion zuordnen.

Als nächstes können wir die Features nach ihrer Wichtigkeit einordnen und die Top-k-Features auswählen. Lassen Sie uns die wichtigsten k-Funktionen finden und ausdrucken:

# Rank the features based on importances
feature_ranks = sorted(range(len(importances)), key=lambda i: importances[i], reverse=True)

# Select the top k features
k = 5   # Number of top features to select
top_features = feature_ranks[:k]

# Print the top features
print(f 'Top {k} features:' )
for feature in top_features:
    print(f 'Feature {feature+1}' )

Wir sortieren die Indizes der Features nach ihrer Wichtigkeit in absteigender Reihenfolge. Anschließend wählen wir die k-Top-Features aus, indem wir die Liste „feature_ranks“ aufteilen. Zum Schluss drucken wir die Top-Features aus.

Zufällige Wälder berücksichtigen den durchschnittlichen Beitrag jedes Features über alle Entscheidungsbäume im Ensemble. Je höher die Wichtigkeit, desto einflussreicher ist das Merkmal bei der Erstellung von Vorhersagen.

Auf diese Weise bieten Zufallswälder eine einfache Möglichkeit, eine Merkmalsauswahl basierend auf den Wichtigkeitswerten durchzuführen.

Jetzt haben Sie ein Verständnis für die Feature-Auswahl mithilfe von Entscheidungsbäumen und Zufallswäldern. Im nächsten Video werden wir die Methode zur rekursiven Merkmalseliminierung behandeln.

13.3.1 L1-regularized Logistic Regression as Embedded Feature Selection (L13: Feature Selection)
13.3.1 L1-regularized Logistic Regression as Embedded Feature Selection (L13: Feature Selection)
  • 2021.12.13
  • www.youtube.com
Without going into the nitty-gritty details behind logistic regression, this lecture explains how/why we can consider an L1 penalty --- a modification of the...
 

13.3.2 Entscheidungsbäume und Random-Forest-Feature-Bedeutung (L13: Feature-Auswahl)


13.3.2 Entscheidungsbäume und Random-Forest-Feature-Bedeutung (L13: Feature-Auswahl)

Grüße, Zuschauer! In unserem vorherigen Video haben wir unsere Diskussion über eingebettete Methoden zur Funktionsauswahl begonnen und uns dabei auf ein Beispiel einer regulierten logistischen Regression konzentriert. Heute werden wir uns mit einem weiteren Beispiel eingebetteter Methoden befassen, nämlich Entscheidungsbäumen, und untersuchen, wie sie Features an jedem Knoten auswählen. Wir werden auch ihre Beziehung zur Bedeutung zufälliger Gesamtstrukturmerkmale untersuchen, ein Konzept, mit dem Sie möglicherweise bereits vertraut sind. Also, lasst uns gleich einsteigen!

Aber bevor wir fortfahren, muss ich eine kleine Ankündigung machen. Da mein iPad-Bleistift bzw. -Stift leider nicht mehr funktionsfähig ist, bin ich auf die Verwendung eines Stifttabletts umgestiegen. Allerdings muss ich zugeben, dass es etwas schwieriger war, sich daran zu gewöhnen, als ich erwartet hatte. Es kann sein, dass ich noch ein paar weitere Videos brauche, um mich wirklich damit vertraut zu machen und es zu beherrschen. Außerdem probiere ich gerade eine neue Software zur Bildschirmanmerkung aus. Bitte haben Sie Verständnis, wenn es Probleme gibt. Ich hoffe, dass der Anmerkungsprozess in kommenden Videos reibungsloser verläuft. Konzentrieren wir uns nun wieder auf unser Thema.

Um es noch einmal zusammenzufassen: Die Funktionsauswahl lässt sich grob in drei Hauptmethoden einteilen: Filtermethoden, Wrapper-Methoden und eingebettete Methoden. In unserem vorherigen Video haben wir die Lasso- oder L1-regulierte logistische Regression als Beispiel für eingebettete Methoden untersucht. Heute richten wir unsere Aufmerksamkeit auf Entscheidungsbäume und Zufallswälder.

Lassen Sie uns zunächst Entscheidungsbäume besprechen und wie sie die Funktionsauswahl durchführen. Um dies zu veranschaulichen, betrachten wir einen Datensatz, den wir zuvor untersucht haben. Es besteht aus zwei Features, x1 und x2, und zwei Klassen: Quadrate (Klasse 0) und Dreiecke (Klasse 1). Unser Ziel ist es, die Datenpunkte zu klassifizieren, und wir können uns die Entscheidungsgrenze als Trennlinie vorstellen, die die beiden Klassen trennt. Mehrere Entscheidungsgrenzen können dies erreichen, wie ich gleich zeigen werde.

Schauen wir uns nun genauer an, wie ein Entscheidungsbaum den Datensatz aufteilt. Ich habe mit scikit-learn einen Entscheidungsbaum trainiert und ihn für Sie gezeichnet. Dieser Baum weist zwei Spaltungen auf. Die erste Aufteilung erfolgt für Merkmal x1 bei einem Grenzwert von 5,5, wodurch die Daten in zwei Gruppen aufgeteilt werden. Die zweite Aufteilung erfolgt für Merkmal x2 bei einem Grenzwert von 10,5, wodurch die Daten weiter aufgeteilt werden. Durch diese Aufteilungen klassifiziert der Entscheidungsbaum den Datensatz erfolgreich. Wir können die Wirksamkeit dieser Aufteilungen bewerten, indem wir die Entropie untersuchen, die den Grad der Vermischung oder Unordnung in den Klassen angibt. Unser Ziel ist es, die Entropie so weit wie möglich zu reduzieren und im Idealfall einen Wert von Null zu erreichen, was eine perfekte Klassifizierung bedeutet. In unserem Beispiel beobachten wir, dass die Entropie bei jeder Teilung abnimmt und schließlich Null erreicht.

Interessant ist, dass Entscheidungsbäume von Natur aus eine Funktionsauswahl durchführen. An jedem Knoten entscheidet der Baum, welches Merkmal für die Aufteilung verwendet werden soll. Diese Entscheidung basiert auf dem Merkmal, das die Entropieabnahme maximiert bzw. den Informationsgewinn maximiert. Folglich wählt der Entscheidungsbaum automatisch die informativsten Merkmale aus, um das Klassifizierungsmodell zu erstellen.

Lassen Sie uns nun unseren Fokus auf Zufallswälder richten, bei denen es sich um Ensembles von Entscheidungsbäumen handelt. Zufällige Gesamtstrukturen bieten eine Möglichkeit, die Wichtigkeit von Merkmalen abzuschätzen. Um dies zu veranschaulichen, wenden wir uns dem Weindatensatz zu, der 13 verschiedene Merkmale im Zusammenhang mit verschiedenen Eigenschaften von Wein umfasst, wie z. B. Alkoholgehalt, Apfelsäure, Asche und mehr. Auf der rechten Seite sehen Sie ein Feature-Wichtigkeitsdiagramm, das von der zufälligen Gesamtstruktur erstellt wurde. Die Merkmalswichtigkeiten reichen von 0 bis 1 und ergeben in der Summe 1, was die relative Wichtigkeit jedes Merkmals darstellt. Die Darstellung ist in absteigender Reihenfolge sortiert, wobei das wichtigste Merkmal auf der linken Seite steht.

Um dieses Diagramm zu erstellen, habe ich das feature_importances_-Attribut von scikit-learn verwendet, das Feature-Wichtigkeiten basierend auf dem Random-Forest-Modell berechnet. Wie Sie sehen können, ist Prolin das wichtigste Merkmal in diesem Datensatz, gefolgt von Flavanoiden und Farbintensität.

Die Merkmalswichtigkeitswerte werden bestimmt, indem die Gesamtverringerung der Verunreinigung (häufig gemessen durch Gini-Verunreinigung oder -Entropie) gemessen wird, die durch Aufteilungen für jedes Merkmal in allen Entscheidungsbäumen in der Zufallsstruktur erreicht wird. Wichtiger werden Merkmale eingeschätzt, die durchgängig zu einer stärkeren Reduzierung der Verunreinigungen führen.

Es ist wichtig zu beachten, dass die Feature-Wichtigkeit ein relatives Maß im Kontext des Random-Forest-Modells ist. Die Werte sind spezifisch für die von Ihnen trainierte Zufallsstruktur und lassen sich möglicherweise nicht auf andere Modelle oder Datensätze verallgemeinern. Es kann jedoch dennoch wertvolle Erkenntnisse darüber liefern, welche Merkmale den größten Einfluss auf Vorhersagen haben.

Nachdem wir uns nun mit Entscheidungsbäumen und Zufallswäldern befasst haben, fassen wir zusammen, was wir bisher gelernt haben. Entscheidungsbäume führen die Merkmalsauswahl implizit durch, indem sie bei jeder Teilung das informativste Merkmal auswählen, mit dem Ziel, die Entropie zu verringern und die Klassifizierung zu verbessern. Andererseits liefern Zufallswälder als Ensemble von Entscheidungsbäumen ein Maß für die Wichtigkeit von Merkmalen, indem sie die Gesamtverringerung der Verunreinigung bewerten, die durch jedes Merkmal über alle Bäume hinweg erreicht wird.

Das Verständnis der Feature-Bedeutung kann auf verschiedene Weise von Vorteil sein. Es hilft dabei, die relevantesten Merkmale für die Vorhersage der Zielvariablen zu identifizieren, ermöglicht eine Reduzierung der Dimensionalität durch Konzentration auf die aussagekräftigsten Merkmale und bietet Einblicke in die zugrunde liegenden Beziehungen zwischen Merkmalen und der Zielvariablen.

Lassen Sie uns nun tiefer in den Prozess der Bewertung der Feature-Wichtigkeit in zufälligen Gesamtstrukturen eintauchen. Wir werden eine Methode namens Permutationswichtigkeit untersuchen. Aber bevor wir das tun, werfen wir noch einmal einen kurzen Blick auf das Bootstrap-Sampling und das Konzept der Out-of-Bag-Samples.

Bei der Bootstrap-Stichprobe wird der Originaldatensatz nach dem Zufallsprinzip ausgewählt und ersetzt, was zu doppelten Datenpunkten führt. Aus diesem Grund sind einige Beispiele nicht im Bootstrap-Beispiel enthalten, wodurch sogenannte Out-of-Bag-Beispiele entstehen. Diese Proben dienen als Validierungs- oder Bewertungssätze, da die Bäume sie während des Trainings nicht sehen.

Konzentrieren wir uns nun auf Methode B, bei der es um die Wichtigkeit der Permutation geht. Dabei werden die zuvor besprochenen Out-of-Bag-Proben verwendet. Erstens können wir die Vorhersageleistung von Entscheidungsbäumen im Random Forest während des Trainings bewerten. Für jeden Baum können Vorhersagen für die Out-of-Bag-Proben getroffen werden, die als Validierungs- oder Testdatenpunkte exklusiv für diesen Baum dienen.

Um die Permutationswichtigkeit zu berechnen, beginnen wir mit einer Merkmalsmatrix, die die ursprünglichen Merkmalswerte für die Out-of-Bag-Beispiele enthält. Für jeden Entscheidungsbaum in der Zufallsstruktur permutieren wir die Werte von Merkmal J in den Out-of-Bag-Beispielen. Das bedeutet, dass wir die Merkmalswerte zufällig mischen, während die Klassenbezeichnungen unverändert bleiben.

Als Nächstes verwenden wir die permutierte Merkmalsmatrix, um mithilfe des aktuellen Entscheidungsbaums Vorhersagen zu den Out-of-Bag-Beispielen zu treffen. Denken Sie daran, dass diese Vorhersagen auf den permutierten Merkmalswerten basieren und daher die Leistung des Modells darstellen, wenn das Merkmal J randomisiert wird.

Wir vergleichen die permutierten Vorhersagen mit den ursprünglichen Vorhersagen für jedes Out-of-Bag-Beispiel und zählen, wie oft sich die korrekte Klassenvorhersage aufgrund der Permutation von Merkmal J ändert. Diese Zählung spiegelt den Einfluss von Merkmal J auf die Genauigkeit des Modells wider. Wenn Merkmal J wichtig ist, sollte das Permutieren seiner Werte zu einer erheblichen Verringerung der Vorhersagegenauigkeit führen.

Wir wiederholen diesen Vorgang für jedes Feature im Datensatz und berechnen die Auswirkung jedes Features auf die Genauigkeit des Modells. Je stärker sich die Permutation eines Merkmals auf die Vorhersagen auswirkt, desto wichtiger wird es berücksichtigt.

Um die Wichtigkeit des Merkmals zu quantifizieren, berechnen wir die Verringerung der Genauigkeit, die durch die Permutierung jedes Merkmals verursacht wird. Dazu wird die permutierte Genauigkeit von der ursprünglichen Genauigkeit subtrahiert und dieser Unterschied über alle Entscheidungsbäume in der Zufallsstruktur gemittelt.

Schließlich normalisieren wir die Merkmalswichtigkeitswerte, sodass sie in der Summe eins ergeben und so ein relatives Maß für die Wichtigkeit der Merkmale liefern. Durch diese Normalisierung wird sichergestellt, dass die Wichtigkeitswerte vergleichbar und interpretierbar sind.

Es ist jedoch wichtig, sich darüber im Klaren zu sein, dass die Permutationswichtigkeitsmethode einige Einschränkungen und Überlegungen aufweist.

Erstens kann die Permutationsbedeutung die Bedeutung korrelierter Merkmale unterschätzen. Wenn ein Merkmal permutiert wird, kann dies zu Änderungen in den Vorhersagen für andere korrelierte Merkmale führen. Infolgedessen wird die Bedeutung dieser korrelierten Merkmale möglicherweise nicht genau im Merkmalswichtigkeitsdiagramm widergespiegelt. Bei der Interpretation ihrer Bedeutung ist es wichtig, die Korrelation zwischen Merkmalen zu berücksichtigen.

Zweitens geht die Permutationsbedeutung davon aus, dass die Merkmalsbedeutung ausschließlich auf der Vorhersagegenauigkeit des Modells basiert. Obwohl die Vorhersagegenauigkeit ein entscheidender Faktor ist, erfasst sie möglicherweise nicht alle Aspekte der Merkmalsbedeutung. Es könnten auch andere Dimensionen von Bedeutung sein, etwa die Interpretierbarkeit oder die Domänenwissensrelevanz eines Features.

Trotz dieser Einschränkungen stellt die Permutationswichtigkeit ein wertvolles quantitatives Maß für die Merkmalsbedeutung dar. Es ermöglicht Forschern und Praktikern zu verstehen, welche Merkmale den größten Einfluss auf die Vorhersagen des Modells haben, und kann Entscheidungen im Zusammenhang mit der Merkmalsauswahl, Modellinterpretation und Dimensionsreduzierung leiten.

Im nächsten Video werden wir eine weitere Kategorie von Feature-Auswahlmethoden untersuchen, die sogenannten Wrapper-Methoden. Bei Wrapper-Methoden werden verschiedene Teilmengen von Funktionen mithilfe eines bestimmten Modells für maschinelles Lernen bewertet. Wir werden uns mit der rekursiven Feature-Eliminierung und der Vorwärts-/Rückwärts-Feature-Auswahl befassen. Diese Methoden können besonders nützlich sein, wenn die Anzahl der Features groß ist und die Auswahl der relevantesten Teilmenge für die Modellleistung von entscheidender Bedeutung ist.

Um es noch einmal zusammenzufassen: Wir haben eingebettete Methoden, insbesondere Entscheidungsbäume und Zufallswälder, als Techniken zur Merkmalsauswahl behandelt. Entscheidungsbäume führen die Merkmalsauswahl implizit durch, indem sie bei jeder Teilung das informativste Merkmal auswählen, mit dem Ziel, die Entropie zu verringern und die Klassifizierung zu verbessern. Zufällige Wälder stellen als Ensemble von Entscheidungsbäumen ein Maß für die Wichtigkeit von Merkmalen dar, indem sie die Gesamtverunreinigungsreduzierung bewerten, die jedes Merkmal über alle Bäume hinweg erreicht. Wir haben auch die Permutationswichtigkeitsmethode besprochen, die die Merkmalsbedeutung quantifiziert, indem Merkmalswerte permutiert und deren Einfluss auf die Genauigkeit des Modells gemessen wird.

Das Verständnis der Feature-Bedeutung versetzt Datenwissenschaftler und Praktiker in die Lage, fundierte Entscheidungen über die Feature-Auswahl zu treffen, Modelle zu interpretieren und Einblicke in die zugrunde liegenden Beziehungen zwischen Features und der Zielvariablen zu gewinnen. Es ist ein wertvolles Werkzeug im Toolkit für maschinelles Lernen, das zu einer besseren Modellleistung und einem besseren Verständnis beitragen kann.

In unseren vorherigen Videos haben wir verschiedene Methoden zur Funktionsauswahl behandelt, darunter Filtermethoden, Wrapper-Methoden und eingebettete Methoden. In diesem Video konzentrieren wir uns auf Wrapper-Methoden, insbesondere auf die rekursive Feature-Eliminierung (RFE) und die Vorwärts-/Rückwärts-Feature-Auswahl.

Wrapper-Methoden sind Feature-Auswahltechniken, bei denen verschiedene Teilmengen von Features mithilfe eines bestimmten Modells für maschinelles Lernen bewertet werden. Im Gegensatz zu Filtermethoden, die auf statistischen Maßen basieren, und eingebetteten Methoden, die die Feature-Auswahl in den Modelltrainingsprozess integrieren, verwenden Wrapper-Methoden die Leistung eines Modells als Kriterium für die Auswahl von Features.

Beginnen wir mit der Diskussion der rekursiven Feature-Eliminierung (RFE). RFE ist ein iterativer Feature-Auswahlansatz, bei dem Features rekursiv eliminiert und Modelle auf den verbleibenden Features erstellt werden. Es beginnt mit dem Training eines Modells für den gesamten Funktionsumfang und ordnet die Funktionen nach ihrer Wichtigkeit. Anschließend werden die unwichtigsten Merkmale entfernt und der Vorgang mit den verbleibenden Merkmalen wiederholt. Dieser iterative Prozess wird fortgesetzt, bis eine bestimmte Anzahl von Funktionen oder ein vordefinierter Leistungsschwellenwert erreicht ist.

Die Idee hinter RFE besteht darin, sich durch rekursives Entfernen weniger wichtiger Merkmale auf die informativsten Merkmale zu konzentrieren, die am meisten zur Leistung des Modells beitragen. RFE kann mit jedem Modell für maschinelles Lernen verwendet werden, das ein Maß für die Wichtigkeit oder Gewichtung von Merkmalen liefert. Zu den beliebten Modellen, die bei RFE verwendet werden, gehören logistische Regression, Support-Vektor-Maschinen und Zufallswälder.

Kommen wir nun zur Auswahl der Vorwärts-/Rückwärtsfunktionen. Hierbei handelt es sich um zwei verwandte Wrapper-Methoden, die nach einer optimalen Teilmenge von Features suchen, indem sie Features basierend auf ihrem Beitrag zur Modellleistung iterativ hinzufügen oder entfernen.

Die Vorwärts-Feature-Auswahl beginnt mit einem leeren Feature-Set und fügt iterativ jeweils ein Feature hinzu. Bei jeder Iteration wird die Leistung des Modells mithilfe einer Kreuzvalidierung oder einer anderen Bewertungsmetrik bewertet und die Funktion ausgewählt, die die Leistung am meisten verbessert. Der Prozess wird fortgesetzt, bis ein vordefiniertes Stoppkriterium erfüllt ist, z. B. das Erreichen einer gewünschten Anzahl von Funktionen oder ein Plateau bei der Leistungsverbesserung.

Die Rückwärts-Feature-Auswahl hingegen beginnt mit dem vollständigen Funktionsumfang und entfernt iterativ jeweils ein Feature. Bei jeder Iteration wird die Leistung des Modells bewertet und die Funktion entfernt, die die geringste Auswirkung auf die Leistung hat. Der Prozess wird fortgesetzt, bis ein Stoppkriterium erfüllt ist.

Sowohl die Vorwärts- als auch die Rückwärts-Feature-Auswahl kann rechenintensiv sein, insbesondere wenn es um eine große Anzahl von Features geht. Um dies zu mildern, können verschiedene Strategien eingesetzt werden, beispielsweise die Verwendung von Heuristiken oder Approximationen, um den Suchprozess zu beschleunigen.

Es ist zu beachten, dass Wrapper-Methoden, einschließlich RFE, Vorwärtsauswahl und Rückwärtsauswahl, empfindlich auf die Wahl der Bewertungsmetrik und des verwendeten maschinellen Lernmodells reagieren können. Unterschiedliche Bewertungsmetriken können zu unterschiedlichen Teilmengen ausgewählter Funktionen führen, und die Leistung der ausgewählten Funktionen kann zwischen verschiedenen Modellen variieren.

In der Praxis wird empfohlen, eine Kreuzvalidierung durchzuführen oder einen externen Validierungssatz zu verwenden, um eine robuste Schätzung der Leistung des Modells mit verschiedenen Funktionsteilmengen zu erhalten. Dies hilft, eine Überanpassung zu vermeiden und die Funktionen auszuwählen, die sich gut auf unsichtbare Daten übertragen lassen.

Zusammenfassend lässt sich sagen, dass Wrapper-Methoden wie RFE (Recursive Feature Elimination), Vorwärts-Feature-Auswahl und Rückwärts-Feature-Auswahl iterative Techniken zur Feature-Auswahl sind, die verschiedene Teilmengen von Features basierend auf der Leistung eines Modells bewerten. Diese Methoden können dabei helfen, die relevantesten Merkmale für eine bestimmte maschinelle Lernaufgabe zu identifizieren, die Interpretierbarkeit des Modells zu verbessern und die Dimensionalität des Merkmalsraums zu reduzieren.

Im nächsten Video werden wir andere fortgeschrittene Techniken zur Merkmalsauswahl untersuchen, einschließlich genetischer Algorithmen und Hauptkomponentenanalyse (PCA). Diese Methoden bieten zusätzliche Optionen zur Auswahl von Merkmalen basierend auf unterschiedlichen Optimierungsprinzipien und statistischen Techniken. Bleiben Sie dran!

Die Feature-Auswahl ist ein entscheidender Schritt in der Machine-Learning-Pipeline, und die Wahl der richtigen Feature-Auswahlmethode hängt vom spezifischen Datensatz, der Machine-Learning-Aufgabe und den gewünschten Kompromissen zwischen Modellleistung, Interpretierbarkeit und Recheneffizienz ab.

13.3.2 Decision Trees & Random Forest Feature Importance (L13: Feature Selection)
13.3.2 Decision Trees & Random Forest Feature Importance (L13: Feature Selection)
  • 2021.12.22
  • www.youtube.com
This video explains how decision trees training can be regarded as an embedded method for feature selection. Then, we will also look at random forest feature...
 

13.4.1 Rekursive Merkmalseliminierung (L13: Merkmalsauswahl)


13.4.1 Rekursive Merkmalseliminierung (L13: Merkmalsauswahl)

In diesem Abschnitt werden wir uns mit dem Thema Wrapper-Methoden zur Funktionsauswahl befassen und dabei auf unseren vorherigen Diskussionen zu Filtermethoden und eingebetteten Methoden aufbauen. Wrapper-Methoden verwenden Modelle explizit zur Auswahl von Features. Ein beliebtes Beispiel für eine Wrapper-Methode ist die rekursive Feature-Eliminierung (RFE), auf die wir uns in diesem Video konzentrieren werden. Darüber hinaus werden wir uns in den kommenden Videos auch mit anderen Methoden zur Funktionsauswahl mithilfe von Wrapper-Techniken befassen.

Um einen Überblick zu geben, gibt es drei Hauptmethoden für die Funktionsauswahl: Filtermethoden, eingebettete Methoden und Wrapper-Methoden. Heute liegt unser Fokus auf Wrapper-Methoden. Die Kernidee von RFE lässt sich in drei Schritten zusammenfassen.

Zuerst passen wir ein Modell an den Datensatz an, typischerweise unter Verwendung linearer Modelle wie linearer Regression oder logistischer Regression. Dieser Schritt ist nichts Außergewöhnliches.

Als nächstes untersuchen wir das Modell und schauen uns insbesondere die Modellkoeffizienten an, auf die wir in Kürze ausführlicher eingehen werden. Basierend auf den Größen dieser Koeffizienten eliminieren wir das Merkmal mit dem kleinsten Koeffizienten. Indem wir das Merkmal mit dem kleinsten Koeffizienten als das am wenigsten wichtige betrachten, können wir es aus der weiteren Betrachtung ausschließen. Es ist erwähnenswert, dass die Normalisierung oder Standardisierung von Funktionen für diesen Prozess wichtig ist, um sicherzustellen, dass sie in einem vergleichbaren Maßstab vorliegen. Konkrete Beispiele hierfür werden wir später sehen.

Der letzte Schritt besteht darin, die Schritte eins und zwei zu wiederholen, bis wir die gewünschte Anzahl an Funktionen erreicht haben. Im Wesentlichen passen wir das Modell kontinuierlich an und eliminieren das unwichtigste Merkmal, bis wir den gewünschten Satz an Merkmalen haben. Diese einfache, aber effektive Methode bietet einen unkomplizierten Ansatz zur Funktionsauswahl.

Ein kritischer Aspekt der Eliminierung rekursiver Merkmale liegt in der Eliminierung von Modellkoeffizienten oder -gewichten. Um dies zu veranschaulichen, betrachten wir lineare Regressions- und logistische Regressionsmodelle. Die lineare Regression wird zur Modellierung kontinuierlicher Ziele verwendet, während die logistische Regression ein Klassifikator für diskrete oder kategoriale Bezeichnungen ist. Wir werden hier nicht näher auf die Details dieser Modelle eingehen, da sie bereits in früheren Vorlesungen behandelt wurden.

Sowohl bei der linearen als auch bei der logistischen Regression verfügen die Modelle über Koeffizienten oder Gewichte. Bei der linearen Regression stellen diese Gewichte die Steigungen dar, während sie bei der logistischen Regression mit dem Einfluss jedes Merkmals auf das Klassifizierungsergebnis verknüpft sind. Indem wir die Größen dieser Gewichte untersuchen, können wir die Bedeutung jedes Merkmals bestimmen. Durch Eliminieren des Merkmals mit der kleinsten Gewichtung oder dem kleinsten Koeffizienten wird es effektiv aus der Betrachtung entfernt. Alternativ führt das Setzen der Gewichtung auf Null zum gleichen Ergebnis, da die Berechnung der gewichteten Summe den Beitrag des Features ausschließt.

Um besser zu verstehen, wie die Eliminierung von Merkmalen funktioniert, gehen wir ein Beispiel mit logistischer Regression durch. Wir haben ein binäres Klassifizierungsproblem mit zwei Merkmalen, x1 und x2, und möchten die Wahrscheinlichkeit der Klassenzugehörigkeit bestimmen. Durch die Berechnung einer gewichteten Summe anhand der Merkmalswerte und Modellgewichte erhalten wir die Nettoeingabe. Durch Anwenden einer logistischen Sigmoidfunktion auf die Nettoeingabe leiten wir die Klassenzugehörigkeitswahrscheinlichkeit ab. Der Vergleich dieser Wahrscheinlichkeit mit einem Schwellenwert, typischerweise 0,5, ermöglicht uns die Zuweisung von Klassenbezeichnungen.

Die wichtigste Erkenntnis ist, dass die Gewichte in diesen Modellen die Bedeutung jedes Merkmals widerspiegeln. Größere Gewichte weisen auf eine größere Bedeutung hin, da sie einen größeren Beitrag zum Nettoinput leisten und sich anschließend auf das Klassifizierungsergebnis auswirken. Durch die Standardisierung oder Normalisierung der Gewichte wird sichergestellt, dass sie auf derselben Skala liegen, was eine bessere Interpretation ihrer Bedeutung erleichtert.

Lassen Sie uns im Folgenden ein Beispiel für die Verwendung der rekursiven Merkmalsbeseitigung in Scikit-Learn mit dem Wine-Datensatz untersuchen. Der hier vorgestellte Code demonstriert den Prozess. Wir bereiten den Datensatz zunächst vor, indem wir ihn in Trainings- und Testsätze aufteilen und anschließend die Funktionen standardisieren. Anschließend instanziieren wir ein RFE-Objekt aus der RFE-Klasse in scikit-learn. Wir übergeben einen logistischen Regressionsschätzer an das RFE-Objekt und geben die gewünschte Anzahl der auszuwählenden Features an (z. B. 5 in diesem Fall).

Sobald wir das RFE-Objekt instanziiert haben, können wir es mithilfe der Fit-Methode an unsere Trainingsdaten anpassen. Dadurch wird der rekursive Feature-Eliminationsprozess gestartet. Das RFE-Objekt trainiert das logistische Regressionsmodell anhand der Trainingsdaten und eliminiert dann das Merkmal mit dem kleinsten Koeffizienten. Dieser Vorgang wird iterativ wiederholt, bis die gewünschte Anzahl an Features erreicht ist.

Nach der Anpassung des RFE-Objekts können wir über das Attribut support_ auf die ausgewählten Features zugreifen. Dieses Attribut gibt eine boolesche Maske zurück, die angibt, welche Features ausgewählt wurden. Mit dem Attribut „ranking_“ können wir auch die Rangfolge der Features basierend auf ihrer Wichtigkeit ermitteln. Je niedriger der Rang, desto wichtiger ist das Merkmal.

Im nächsten Schritt können wir mithilfe der Transformationsmethode des RFE-Objekts unsere ursprünglichen Trainings- und Testdaten so transformieren, dass sie nur die ausgewählten Features enthalten. Dadurch werden nur neue Feature-Sets mit den ausgewählten Features erstellt.

Schließlich können wir ein logistisches Regressionsmodell anhand der transformierten Trainingsdaten trainieren und seine Leistung anhand der transformierten Testdaten bewerten. Dadurch können wir die Wirksamkeit des Merkmalsauswahlprozesses beurteilen und feststellen, ob er die Vorhersagegenauigkeit des Modells verbessert hat.

Es ist erwähnenswert, dass die Anzahl der auszuwählenden Features und die Schrittgröße Hyperparameter sind, die angepasst werden können, um die optimale Konfiguration für einen bestimmten Datensatz und ein bestimmtes Modell zu finden. Um die beste Kombination dieser Parameter zu finden, können Rastersuche oder andere Hyperparameter-Optimierungstechniken eingesetzt werden.

Insgesamt handelt es sich bei der rekursiven Merkmalseliminierung um eine Wrapper-Methode zur Merkmalsauswahl, die auf dem Training eines Modells und der iterativen Beseitigung der unwichtigsten Merkmale beruht. Es kann sowohl auf Regressions- als auch auf Klassifizierungsprobleme angewendet werden und kann mit verschiedenen Modelltypen verwendet werden. Die Auswahl der Features basiert auf den Koeffizienten oder Gewichtungen, die das Modell den Features zuweist. Durch die iterative Entfernung der unwichtigsten Merkmale zielt RFE darauf ab, die Modellleistung zu verbessern, indem es sich auf die informativsten Merkmale konzentriert.

13.4.1 Recursive Feature Elimination (L13: Feature Selection)
13.4.1 Recursive Feature Elimination (L13: Feature Selection)
  • 2021.12.27
  • www.youtube.com
In this video, we start our discussion of wrapper methods for feature selection. In particular, we cover Recursive Feature Elimination (RFE) and see how we c...
 

13.4.2 Bedeutung der Merkmalspermutation (L13: Merkmalsauswahl)


13.4.2 Bedeutung der Merkmalspermutation (L13: Merkmalsauswahl)

Willkommen zu diesem Video, in dem wir uns mit dem Thema der Permutationsbedeutung befassen. Die Permutationsbedeutung ist ein Teil von Wrapper-Methoden für die Feature-Auswahl, die wir im vorherigen Video kurz besprochen haben. Bei Wrapper-Methoden wird ein Modell verwendet, um eine Feature-Auswahl durchzuführen oder die Feature-Bedeutung abzuschätzen. In einer früheren Vorlesung haben wir die Eliminierung rekursiver Merkmale als Beispiel für eine Wrapper-Methode untersucht. Jetzt werden wir unseren Fokus auf die Wichtigkeit der Permutation verlagern. In den kommenden Videos werden wir auch eine andere Methode namens sequentielle Funktionsauswahl untersuchen.

Bevor ich mich mit den Einzelheiten der Funktionsweise der Permutationswichtigkeit befasse, möchte ich Ihnen einen kurzen Überblick über die Methode geben. Im Wesentlichen geht es bei der Permutationsbedeutung darum, jede Feature-Spalte in einem Datensatz zu mischen. Anschließend bewerten wir anhand eines bereits trainierten Modells die Leistung des Modells anhand des gemischten Datensatzes und vergleichen sie mit der ursprünglichen Leistung. Normalerweise beobachten wir einen Leistungsabfall, wenn eine Feature-Spalte neu gemischt wird. Dieser Leistungsabfall dient als Indikator für die Bedeutung der Funktion. Natürlich mag es etwas kompliziert erscheinen, die Methode in nur zwei Schritten zusammenzufassen, deshalb werde ich Sie in den kommenden Folien detaillierter und langsamer durch den Prozess führen.

Durch Anwenden der Permutationswichtigkeit auf jede Spalte im Datensatz können wir ein Balkendiagramm erstellen, das die Wichtigkeit jedes Merkmals veranschaulicht. Zusätzlich können wir optional die Standardabweichung der Wichtigkeitswerte in die Darstellung einbeziehen. Im kommenden Video werde ich ein Codebeispiel zur Erstellung eines solchen Plots bereitstellen.

Bevor wir uns nun mit der detaillierten Erklärung der Permutationsbedeutung und dem dahinter stehenden Algorithmus befassen, wollen wir einige bemerkenswerte Fakten durchgehen. Die Bedeutung der Permutation führt häufig zu ähnlichen Ergebnissen wie die Bedeutung zufälliger Waldmerkmale basierend auf der Verunreinigung. Der Vorteil der Permutationsbedeutung besteht jedoch darin, dass sie modellunabhängig ist, was bedeutet, dass sie mit jeder Art von Algorithmus oder Modell für maschinelles Lernen verwendet werden kann. Es ist wichtig zu beachten, dass die Permutationsbedeutung zwar keine reine Merkmalsauswahlmethode ist, aber Einblicke in die Merkmale bietet, auf die ein Modell am meisten angewiesen ist. Folglich können wir Merkmalswichtigkeitsmaße als Grundlage für die Auswahl von Merkmalen verwenden.

Wenn Sie sich an unsere vorherige Diskussion über die Wichtigkeit von Zufallsstrukturmerkmalen erinnern, können Sie sich Permutationswichtigkeit als eine Verallgemeinerung einer der Methoden, insbesondere Methode B, in diesem Video vorstellen. Anstatt jedoch Out-of-Bag-Proben zu verwenden, verwendet die Permutationsbedeutung den Holdout-Satz. Wenn Sie eine Auffrischung der Out-of-Bag-Beispiele benötigen, können Sie sich das vorherige Video noch einmal ansehen.

Lassen Sie uns nun Schritt für Schritt in den Algorithmus der Permutationsbedeutung eintauchen. Zunächst beginnen wir mit einem Modell, das an das Trainingsset angepasst wurde. Dieses Modell kann ein beliebiges Modell oder Algorithmus für maschinelles Lernen sein. Betrachten wir als Beispiel einen zufälligen Gesamtstrukturklassifikator. Wir trainieren den Zufallswald auf dem Trainingssatz, was ein Standardschritt ist.

Als Nächstes schätzen wir die Vorhersageleistung des Modells anhand eines unabhängigen Datensatzes, beispielsweise des Validierungssatzes oder des Testsatzes. Wir erfassen diese Leistung als Basisleistung. Nehmen wir zum Beispiel an, wir erreichen mit unserem angepassten Random-Forest-Modell eine Genauigkeit von 99 % für den Validierungssatz. Wir betrachten dies als Basisleistung.

Für jede Feature-Spalte im Datensatz mischen wir diese spezifische Spalte zufällig, während die anderen Spalten und Klassenbezeichnungen unverändert bleiben. Dieser Mischvorgang wird anhand eines Beispieldatensatzes veranschaulicht. Angenommen, wir haben einen Datensatz mit drei Feature-Spalten und vier Trainingsbeispielen. Wir konzentrieren uns auf das Mischen der ersten Spalte, die im Beispiel durch eine andere Farbe dargestellt wird. Nach dem Mischen ändert sich die Reihenfolge der Werte in dieser Spalte. Wir permutieren die Werte nach dem Zufallsprinzip und behalten dabei die ursprünglichen Werte in den Spalten zwei und drei bei.

Ein weiterer Vorteil der Permutationsbedeutung besteht darin, dass korrelierte Merkmale gut verarbeitet werden können. Da die Wichtigkeit jedes Features einzeln durch Mischen seiner Werte bewertet wird, erfasst es den einzigartigen Beitrag jedes Features zur Leistung des Modells, unabhängig von Korrelationen mit anderen Features. Dies ist besonders nützlich in Szenarien, in denen hochdimensionale Datensätze mit miteinander verbundenen Merkmalen vorhanden sind.

Die Permutationswichtigkeit stellt auch ein Maß für die Merkmalsbedeutung dar, das zuverlässiger ist als die inhärente Merkmalsbedeutung, die von einigen Modellen bereitgestellt wird. In Entscheidungsbäumen oder Zufallswäldern beispielsweise basiert die Bedeutung eines Merkmals auf der Reduzierung der Verunreinigung, die es bei der Aufteilung der Daten erreicht. Dieses Maß kann jedoch auf Features mit vielen möglichen Teilungen oder solche, die weiter oben in der Baumstruktur erscheinen, verzerrt sein. Die Permutationswichtigkeit ermöglicht eine direktere und unvoreingenommenere Schätzung der Merkmalsbedeutung, indem die Auswirkung des Mischens jedes Merkmals direkt bewertet wird.

Der Nachteil ist, dass die Permutationsbedeutung rechenintensiv sein kann, insbesondere wenn der Modelltrainingsprozess zeitaufwändig ist oder eine große Anzahl von Features vorhanden ist. Da der Permutationsprozess eine mehrfache Neubewertung der Modellleistung erfordert, kann dies zu einem erheblichen Mehraufwand führen. Allerdings gibt es Optimierungstechniken und Parallelisierungsstrategien, die helfen können, dieses Problem zu entschärfen, beispielsweise die Verwendung paralleler Berechnungen oder die Reduzierung der Anzahl von Permutationen.

Es ist erwähnenswert, dass die Permutationsbedeutung kein Allheilmittel für die Merkmalsauswahl oder Modellinterpretation ist. Obwohl es wertvolle Einblicke in die Bedeutung einzelner Funktionen bietet, sollte es in Verbindung mit anderen Techniken und Domänenwissen verwendet werden. Die Merkmalswichtigkeit allein garantiert nicht die Vorhersagekraft oder Relevanz eines Merkmals. Es ist wichtig, den Kontext, das spezifische Problem und die Einschränkungen des Modells zu berücksichtigen.

Zusammenfassend lässt sich sagen, dass die Bedeutung der Permutation eine leistungsstarke und modellunabhängige Methode zur Bewertung der Bedeutung von Merkmalen in einem Modell für maschinelles Lernen ist. Durch das Mischen von Merkmalswerten und den Vergleich der Leistung des Modells vor und nach dem Mischen wird ein zuverlässiges Maß für die Wichtigkeit von Merkmalen bereitgestellt. Es ist leicht zu verstehen, verarbeitet korrelierte Merkmale gut und ist nicht anfällig für Überanpassung. Es kann jedoch rechenintensiv sein und sollte zusammen mit anderen Techniken für eine umfassende Merkmalsauswahl und Modellinterpretation verwendet werden.

13.4.2 Feature Permutation Importance (L13: Feature Selection)
13.4.2 Feature Permutation Importance (L13: Feature Selection)
  • 2021.12.29
  • www.youtube.com
This video introduces permutation importance, which is a model-agnostic, versatile way for computing the importance of features based on a machine learning c...
 

13.4.3 Codebeispiele für die Wichtigkeit von Merkmalspermutationen (L13: Merkmalsauswahl)


13.4.3 Codebeispiele für die Wichtigkeit von Merkmalspermutationen (L13: Merkmalsauswahl)

Okay, nachdem wir nun die grundlegende Einführung in die Wichtigkeit von Permutationen behandelt haben, werfen wir einen Blick auf einige Codebeispiele, um zu sehen, wie wir die Wichtigkeit von Permutationen in der Praxis nutzen können. Ja, und wie immer habe ich auch die Codebeispiele in Jupyter Notebooks, die unter dem Video verlinkt sind. Und anders als immer werden wir der Einfachheit halber auch wieder mit einem Winddatensatz arbeiten.

Der Winddatensatz ist also wiederum ein Datensatz, der aus 13 Spalten besteht. Und hier ist eine Übersicht, wie die ersten fünf Reihen aussehen. Es gibt also drei Klassen: Klasse eins, zwei und drei. Und es gibt 13 Spalten, aber aus Platzgründen werden hier nicht alle Spalten angezeigt. Aber ja, wir werden diesen Winddatensatz nicht allzu ausführlich besprechen, weil wir ihn schon so oft gesehen haben.

Ja, und dann werden wir den Datensatz wie immer in einen Trainings- und einen Testsatz aufteilen. Hier nehmen wir also den Datensatz, mit Ausnahme der ersten Spalte, die die Beschriftungsspalte ist. Deshalb werden wir den Datensatz in einen Trainings- und einen Testsatz aufteilen, wobei 30 % der Daten für Tests und 70 % für das entsprechende Training verwendet werden. Beachten Sie hier, dass wir keinen Validierungssatz erstellen. Es ist also nur meine persönliche Meinung. Aber ich glaube nicht, dass wir unbedingt einen Validierungssatz benötigen, wenn wir die Permutationsleistung berechnen, denn ja, normalerweise sollten wir unseren Testsatz unabhängig halten. Wenn Sie jedoch anhand des vorherigen Videos darüber nachdenken, wie die Permutationsleistung funktioniert, sehen wir hier nur den Leistungsabfall, wenn wir eine Feature-Spalte permutieren. Wir berechnen die Testgenauigkeit also nicht wirklich neu, sondern verwenden lediglich den Testsatz, um zu prüfen, wie stark die Leistung sinkt, wenn wir eine Spalte neu mischen.

Ja, wir sind hier noch in der Einrichtungsphase. Hier auf dieser Folie bereiten wir also unser Modell vor. Und tatsächlich handelt es sich hier um einen zufälligen Waldklassifikator. Im vorherigen Video haben wir also gelernt, dass die Permutationsbedeutung eine modellunabhängige Methode ist. Das bedeutet, dass wir das für jede Art von Modell berechnen können. Allerdings verwenden wir hier einen Zufallswald, damit wir dann die Permutationsbedeutung mit der auf der Verunreinigung des Zufallswalds basierenden Leistung vergleichen können, was ein interessanter Vergleich sein könnte. Hier richten wir also einen zufälligen Waldklassifikator mit 100 Bäumen ein. Und wir passen es an das Trainingsset an. Und hier ist nur die Genauigkeitsberechnung. Und wir können sehen, dass die Trainingsgenauigkeit 100 % beträgt und die Testgenauigkeit ebenfalls 100 % beträgt, was darauf hindeutet, dass es sich tatsächlich um ein ziemlich gutes Modell handelt, oder es kann auch nur darauf hinweisen, dass der Datensatz ziemlich einfach zu klassifizieren ist.

Eine Sache, die ich hier auch anmerken möchte, ist, dass es bei der Berechnung der Permutationsbedeutung wichtig ist, ein sehr leistungsstarkes Modell zu haben, wenn wir die Merkmalsbedeutung als allgemeine Merkmalsbedeutung interpretieren wollen. Denn wenn wir kein Modell haben, das eine gute Leistung erbringt, können wir vielleicht herausfinden, auf welche Funktionen das Modell am meisten angewiesen ist, aber es sagt uns nicht wirklich, wie wichtig die Funktion im Kontext der Zielvariablen ist wenn das Modell nicht sehr genau ist. Bevor wir uns also nur als Referenz mit der Permutationsbedeutung befassen, geht es hier noch einmal um die auf Verunreinigung basierende Bedeutung. Das ist also die zufällige, auf Waldverunreinigungen basierende Bedeutung, die wir bereits in einem früheren Video besprochen haben. Auch dies dient nur als Referenz, da wir nach der Anpassung des Modells auf dieses Feature-Wichtigkeitsattribut zugreifen.

Dann wenden wir arg_sort an, sodass wir die Sortierreihenfolge der Wichtigkeitswerte vom größten zum kleinsten erhalten. Also vom Größten zum Kleinsten. Und dann erstellen wir ein Balkendiagramm, um die auf der Verunreinigung basierende Bedeutung zu visualisieren. Das Balkendiagramm zeigt die Funktionsnamen auf der x-Achse und die entsprechenden Wichtigkeitswerte auf der y-Achse. Durch die Sortierung der Wichtigkeitswerte in absteigender Reihenfolge werden die wichtigsten Merkmale zuerst dargestellt.

Als nächstes geht der Code zur Berechnung der Permutationswichtigkeit über. Die Permutationsbedeutung wird berechnet, indem die Werte jedes Merkmals im Testsatz zufällig gemischt und der Leistungsabfall des Modells gemessen wird. Je höher der Leistungsabfall, desto wichtiger wird die Funktion eingeschätzt. Der Code verwendet eine for-Schleife, um jedes Feature im Datensatz zu durchlaufen.

Innerhalb der Schleife werden die Merkmalswerte im Testsatz mithilfe von np.random.permutation() gemischt. Anschließend wird der gemischte Testsatz durch den trainierten Random-Forest-Klassifizierer geleitet, um die vorhergesagten Bezeichnungen zu erhalten. Die Genauigkeit des Modells für den gemischten Testsatz wird mithilfe der Funktion precision_score() berechnet. Der Unterschied zwischen der ursprünglichen Testgenauigkeit und der gemischten Testgenauigkeit stellt den Leistungsabfall dar, der durch die Permutation des Features verursacht wird.

Der Leistungsabfall für jede Funktion wird in einer Liste namens important_vals gespeichert. Nach dem Durchlaufen aller Features enthält die Liste important_vals den Rückgang der Leistungswerte für jedes Feature.

Abschließend wird ein Balkendiagramm erstellt, um die Wichtigkeit der Permutation zu visualisieren. Auf der x-Achse sind die Funktionsnamen und auf der y-Achse die entsprechenden Leistungsabfallwerte aufgetragen. Auch hier sind die Wichtigkeitswerte in absteigender Reihenfolge sortiert, um die wichtigsten Merkmale hervorzuheben.

Dieser Code bietet einen Vergleich zwischen der auf Verunreinigung basierenden Wichtigkeit und der Permutationswichtigkeit. Durch den Vergleich der beiden Diagramme können Sie feststellen, ob es Unterschiede in der Rangfolge der Merkmalsbedeutung zwischen den beiden Methoden gibt.

import matplotlib.pyplot as plt
import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.metrics import accuracy_score

# Load the Iris dataset
iris = load_iris()
X = iris.data
y = iris.target

# Create a random forest classifier
clf = RandomForestClassifier(n_estimators= 100 , random_state= 42 )
clf.fit(X, y)

# Compute impurity-based feature importances
importances = clf.feature_importances_

# Plot impurity-based feature importances
plt.figure(figsize=( 8 , 6 ))
plt.bar(range(X.shape[ 1 ]), importances, align= 'center' )
plt.xticks(range(X.shape[ 1 ]), iris.feature_names, rotation= 90 )
plt.xlabel( 'Features' )
plt.ylabel( 'Importance' )
plt.title( 'Impurity-based Feature Importances' )
plt.show()

# Compute permutation importances
importance_vals = []
for feature in range(X.shape[ 1 ]):
    X_permuted = X.copy()
    np.random.shuffle(X_permuted[:, feature])
    y_pred = clf.predict(X_permuted)
    accuracy = accuracy_score(y, y_pred)
    drop_in_performance = accuracy_score(y, y_pred) - accuracy
    importance_vals.append(drop_in_performance)

# Plot permutation importances
plt.figure(figsize=( 8 , 6 ))
plt.bar(range(X.shape[ 1 ]), importance_vals, align= 'center' )
plt.xticks(range(X.shape[ 1 ]), iris.feature_names, rotation= 90 )
plt.xlabel( 'Features' )
plt.ylabel( 'Drop in Performance' )
plt.title( 'Permutation Importances' )
plt.show()
Dieser Code erstellt zwei Balkendiagramme nebeneinander. Das erste Diagramm zeigt die auf der Verunreinigung basierenden Merkmalsbedeutungen und das zweite Diagramm zeigt die Permutationsbedeutungen. Durch die Untersuchung dieser Diagramme können Sie anhand dieser beiden Methoden Einblicke in die relative Bedeutung verschiedener Merkmale im Iris-Datensatz gewinnen.

Stellen Sie sicher, dass die erforderlichen Bibliotheken importiert sind, z. B. matplotlib, numpy, sklearn.ensemble.RandomForestClassifier, sklearn.datasets.load_iris und sklearn.metrics.accuracy_score.

import matplotlib.pyplot as plt
import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.inspection import permutation_importance
from sklearn.model_selection import train_test_split

# Load the Iris dataset
iris = load_iris()
X = iris.data
y = iris.target

# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size= 0.2 , random_state= 42 )

# Create a random forest classifier
clf = RandomForestClassifier(n_estimators= 100 , random_state= 42 )
clf.fit(X_train, y_train)

# Perform permutation importances
result = permutation_importance(clf, X_test, y_test, n_repeats= 10 , random_state= 42 , n_jobs=- 1 )

# Get the feature importances and their indices
importances = result.importances_mean
indices = np.argsort(importances)

# Plot permutation importances
plt.figure(figsize=( 8 , 6 ))
plt.barh(range(X.shape[ 1 ]), importances[indices], align= 'center' )
plt.yticks(range(X.shape[ 1 ]), iris.feature_names[indices])
plt.xlabel( 'Importance' )
plt.ylabel( 'Features' )
plt.title( 'Permutation Importances' )
plt.show()
In diesem Code verwenden wir die Funktion permutation_importance aus dem Modul sklearn.inspection, um die Permutationswichtigkeiten zu berechnen. Der Datensatz wird mithilfe von train_test_split in Trainings- und Testsätze aufgeteilt. Anschließend passen wir einen zufälligen Waldklassifikator an die Trainingsdaten an und berechnen die Permutationswichtigkeiten anhand der Testdaten.

Die resultierenden Permutationswichtigkeiten werden in der Variablen importants gespeichert. Wir verwenden np.argsort, um die Indizes zu erhalten, die die Wichtigkeiten in aufsteigender Reihenfolge sortieren würden. Dies hilft dabei, die Wichtigkeiten in der richtigen Reihenfolge darzustellen.

Schließlich erstellen wir mit plt.barh ein horizontales Balkendiagramm, um die Permutationswichtigkeiten anzuzeigen. Die Y-Achse stellt die Merkmale dar, während die X-Achse die Wichtigkeitswerte darstellt. Die Funktionen plt.xlabel, plt.ylabel und plt.title werden verwendet, um dem Plot Beschriftungen und einen Titel hinzuzufügen.

Bitte stellen Sie sicher, dass die erforderlichen Bibliotheken importiert sind, z. B. matplotlib, numpy, sklearn.ensemble.RandomForestClassifier, sklearn.datasets.load_iris, sklearn.inspection.permutation_importance und sklearn.model_selection.train_test_split.

import matplotlib.pyplot as plt
import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.inspection import permutation_importance
from sklearn.model_selection import train_test_split

# Load the Iris dataset
iris = load_iris()
X = iris.data
y = iris.target

# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size= 0.2 , random_state= 42 )

# Create a random forest classifier
clf = RandomForestClassifier(n_estimators= 100 , random_state= 42 )
clf.fit(X_train, y_train)

# Perform permutation importances
result = permutation_importance(clf, X_test, y_test, n_repeats= 10 , random_state= 42 , n_jobs=- 1 )

# Get the feature importances and their indices
importances = result.importances_mean
indices = np.argsort(importances)

# Plot permutation importances
plt.figure(figsize=( 8 , 6 ))
plt.barh(range(X.shape[ 1 ]), importances[indices], align= 'center' )
plt.yticks(range(X.shape[ 1 ]), iris.feature_names[indices])
plt.xlabel( 'Importance' )
plt.ylabel( 'Features' )
plt.title( 'Permutation Importances' )
plt.show()
In diesem Code verwenden wir die Funktion permutation_importance aus dem Modul sklearn.inspection, um die Permutationswichtigkeiten zu berechnen. Der Datensatz wird mithilfe von train_test_split in Trainings- und Testsätze aufgeteilt. Anschließend passen wir einen zufälligen Waldklassifikator an die Trainingsdaten an und berechnen die Permutationswichtigkeiten anhand der Testdaten.

Die resultierenden Permutationswichtigkeiten werden in der Variablen importants gespeichert. Wir verwenden np.argsort, um die Indizes zu erhalten, die die Wichtigkeiten in aufsteigender Reihenfolge sortieren würden. Dies hilft dabei, die Wichtigkeiten in der richtigen Reihenfolge darzustellen.

Schließlich erstellen wir mit plt.barh ein horizontales Balkendiagramm, um die Permutationswichtigkeiten anzuzeigen. Die Y-Achse stellt die Merkmale dar, während die X-Achse die Wichtigkeitswerte darstellt. Die Funktionen plt.xlabel, plt.ylabel und plt.title werden verwendet, um dem Plot Beschriftungen und einen Titel hinzuzufügen.

Stellen Sie sicher, dass die erforderlichen Bibliotheken importiert sind, z. B. matplotlib, numpy, sklearn.ensemble.RandomForestClassifier, sklearn.datasets.load_iris, sklearn.inspection.permutation_importance und sklearn.model_selection.train_test_split.

13.4.3 Feature Permutation Importance Code Examples (L13: Feature Selection)
13.4.3 Feature Permutation Importance Code Examples (L13: Feature Selection)
  • 2021.12.30
  • www.youtube.com
This video shows code examples for computing permutation importance in mlxtend and scikit-learn. Permutation importance is a model-agnostic, versatile way fo...
 

13.4.4 Sequentielle Funktionsauswahl (L13: Funktionsauswahl)


13.4.4 Sequentielle Funktionsauswahl (L13: Funktionsauswahl)

In den vorherigen Videos habe ich das Konzept der Feature-Wichtigkeit vorgestellt, wobei ich Permutationswichtigkeit als meine Lieblingstechnik verwendet habe. In diesem Video möchte ich eine weitere wichtige Technik namens sequentielle Merkmalsauswahl besprechen, die auch Teil der Wrapper-Methoden ist, über die wir zuvor gesprochen haben.

Bevor wir uns mit der sequentiellen Feature-Auswahl befassen, wollen wir kurz die verschiedenen Arten von Feature-Auswahlmethoden zusammenfassen, die wir bisher besprochen haben. Wir haben mit Filtermethoden begonnen, sind dann zu eingebetteten Methoden wie der Eliminierung rekursiver Merkmale übergegangen und konzentrieren uns jetzt auf Wrapper-Methoden.

Wrapper-Methoden zielen darauf ab, eine optimale Feature-Teilmenge zu finden, indem alle möglichen Feature-Kombinationen ausprobiert werden. Dieser Ansatz wird als umfassende Funktionsauswahl bezeichnet. Um zu verstehen, wie es funktioniert, betrachten wir das Beispiel des Iris-Datensatzes, der vier Merkmale aufweist: Kelchblattlänge, Kelchblattbreite, Blütenblattlänge und Blütenblattbreite. Um die beste Kombination von Funktionen für unser Modell zu finden, müssten wir alle möglichen Teilmengen ausprobieren, von einzelnen Funktionen bis hin zum vollständigen Funktionssatz.

Für den Iris-Datensatz würde dies zu 15 möglichen Kombinationen führen, einschließlich Teilmengen von einem, zwei, drei und vier Merkmalen. Eine umfassende Funktionsauswahl kann jedoch rechenintensiv sein und zu einer Überanpassung führen. Um diese Probleme zu mildern, können wir einen Validierungssatz oder eine K-fache Kreuzvalidierung verwenden, um die Leistung verschiedener Funktionsteilmengen zu bewerten.

Trotz ihrer Einfachheit weist die umfassende Merkmalsauswahl bei der Anwendung auf Datensätze mit einer großen Anzahl von Merkmalen eine Einschränkung auf. Die Anzahl der möglichen Feature-Teilmengen wächst exponentiell mit der Anzahl der Features, was es für große Datensätze unpraktisch macht. Diese Einschränkung motiviert die Verwendung der sequentiellen Merkmalsauswahl, einer Näherungstechnik, die eine Teilmenge von Merkmalskombinationen untersucht, anstatt alle möglichen Kombinationen zu bewerten.

Die sequentielle Funktionsauswahl ist ein iterativer Prozess, der mit dem ursprünglichen Funktionsumfang beginnt und nach und nach Funktionen basierend auf ihrer Leistung auswählt oder entfernt. Ein beliebter Ansatz ist die sequentielle Rückwärtsauswahl, bei der wir mit dem gesamten Funktionsumfang beginnen und schrittweise jeweils eine Funktion entfernen. In jeder Iteration bewerten wir die Leistung der verbleibenden Funktionen und wählen die Teilmenge mit der höchsten Leistung aus. Dieser Prozess wird fortgesetzt, bis wir eine Teilmenge mit einem einzigen Feature übrig haben.

Der sequentielle Rückwärtsauswahlalgorithmus kann wie folgt zusammengefasst werden:

  1. Beginnen Sie mit dem ursprünglichen Funktionsumfang.
  2. Generieren Sie alle möglichen Feature-Teilmengen der Größe n-1, indem Sie jeweils ein Feature entfernen.
  3. Bewerten Sie die Leistung jeder Kandidatenteilmenge.
  4. Wählen Sie die Teilmenge mit der höchsten Leistung aus und entfernen Sie dauerhaft die Funktion, die in dieser Teilmenge fehlt.
  5. Wiederholen Sie die Schritte 2–4, bis die gewünschte Feature-Größe erreicht ist (z. B. nur noch ein Feature übrig bleibt).

Durch Wiederholen der Schritte 2–4 reduzieren wir den Funktionsumfang schrittweise, bis wir den optimalen Teilsatz erreichen. Die endgültige Teilmenge wird auf der Grundlage der höchsten Bewertungspunktzahl ausgewählt. Im Falle eines Gleichstands wird die kleinere Teilmenge aus Gründen der Recheneffizienz bevorzugt. Die Anzahl der Iterationen bei der sequentiellen Rückwärtsauswahl entspricht der Anzahl der Features minus eins.

Die sequentielle Vorwärtsauswahl ist eine weitere Variante der sequentiellen Merkmalsauswahl. Anstatt Features zu entfernen, beginnt die sequentielle Vorwärtsauswahl mit einem leeren Feature-Set und fügt nach und nach ein Feature nach dem anderen hinzu. Der Prozess umfasst das Training eines Klassifikators für jedes einzelne Merkmal und die Bewertung seiner Leistung. Die Funktion mit der höchsten Leistung wird ausgewählt und der Teilmenge hinzugefügt. Dieser Vorgang wird fortgesetzt, bis die maximale Anzahl an Funktionen erreicht ist.

Zusammenfassend lässt sich sagen, dass die sequentielle Merkmalsauswahl eine nützliche Technik zum Finden einer optimalen Teilmenge von Merkmalen ist. Es bietet einen Kompromiss zwischen Recheneffizienz und der Suche nach einer guten Funktionskombination. Sequentielle Rückwärtsauswahl und sequentielle Vorwärtsauswahl sind zwei gängige Varianten der sequentiellen Merkmalsauswahl, jede mit ihren eigenen Vorteilen und Anwendungsfällen. Im nächsten Video werden wir untersuchen, wie man die sequentielle Funktionsauswahl programmgesteuert implementiert, und uns mit den Einschränkungen einer umfassenden Funktionsauswahl befassen.

13.4.4 Sequential Feature Selection (L13: Feature Selection)
13.4.4 Sequential Feature Selection (L13: Feature Selection)
  • 2022.01.05
  • www.youtube.com
This video explains how sequential feature selection works. Sequential feature selection is a wrapper method for feature selection that uses the performance ...
 

13.4.5 Sequentielle Funktionsauswahl – Codebeispiele (L13: Funktionsauswahl)


13.4.5 Sequentielle Funktionsauswahl – Codebeispiele (L13: Funktionsauswahl)

Okay, es ist Zeit, unsere Diskussion über die Funktionsauswahl abzuschließen. In diesem Video zeige ich, wie man die sequentielle Funktionsauswahl in Python verwendet. Ich zeige Ihnen zunächst ein Beispiel mit der MLxtend-Bibliothek, der ursprünglichen Implementierung, die ich vor einigen Jahren entwickelt habe. Später werde ich auch demonstrieren, wie man mit scikit-learn die gleichen Ergebnisse erzielt, was eine schlankere Implementierung bietet.

Bevor wir uns mit dem Code befassen, empfehle ich Ihnen, sich die Dokumentation anzusehen, die zusätzliche Beispiele enthält, die ich in diesem Video nicht behandeln werde, um es nicht zu langwierig und überfordernd zu machen. Für detailliertere Informationen ist es immer hilfreich, die Dokumentation zu Rate zu ziehen.

Beginnen wir zunächst mit dem Laden des „Wasserzeichen“-Plugins, das ich entwickelt habe, um die Versionen meiner Notizbücher und Softwarebibliotheken im Laufe der Jahre zu verfolgen. Es empfiehlt sich, sicherzustellen, dass die Versionsnummern unseren Erwartungen entsprechen, insbesondere wenn einige Optionen aufgrund von Versionsdiskrepanzen möglicherweise nicht mehr funktionieren. Wir werden später auch die Matplotlib-Bibliothek verwenden, also importieren wir sie, um sicherzustellen, dass die Diagramme im Notebook korrekt angezeigt werden.

Fahren wir nun mit der Vorbereitung des Datensatzes für die Funktionsauswahl fort. Wie in den vorherigen Videos verwenden wir den Weindatensatz. Wir laden den Datensatz mithilfe von Pandas aus dem UCI-Dataset-Repository für maschinelles Lernen. Nach dem Laden des Datensatzes drucken wir einige grundlegende Informationen aus, um sicherzustellen, dass alles korrekt geladen wurde. Es ist auch wichtig zu überprüfen, ob die Klassenbezeichnungen als Ganzzahlen dargestellt werden.

Als nächstes teilen wir den Datensatz in Trainings- und Testsätze auf, wie wir es in früheren Videos getan haben. Darüber hinaus standardisieren wir den Datensatz, da wir einen K-Nearest-Neighbor-Klassifikator verwenden, der empfindlich auf die Merkmalsskalierung reagiert. Wir teilen den Datensatz in 80 % Trainingssatz und 20 % Testsatz auf und standardisieren beide Sätze.

Um vor der Merkmalsauswahl eine Basislinie festzulegen, passen wir einen K-Nearest-Neighbor-Klassifikator an den standardisierten Datensatz an und berechnen die Trainings- und Testgenauigkeiten. In diesem Beispiel wählen wir willkürlich fünf Nachbarn für den Klassifikator aus, aber dieser Parameter könnte für eine optimale Leistung einer Rastersuche unterzogen werden. Obwohl wir hier keine Rastersuche durchführen, um den Code und das Video einfacher zu halten, ist die Kombination der Rastersuche mit der sequentiellen Funktionsauswahl ein gängiger Ansatz. Beispiele hierfür finden Sie in der Dokumentation.

Die Basisergebnisse zeigen, dass wir beim Trainingssatz eine Genauigkeit von 98,6 % und beim Testsatz eine Genauigkeit von 94 % erreichen. Die Leistung ist bei Verwendung aller 13 Funktionen aus dem Weindatensatz recht gut. Es kann jedoch zu einer gewissen Überanpassung aufgrund des mit K-Nearest-Neighbor-Klassifizierern verbundenen Dimensionsfluchs kommen. Um dies zu mildern, können wir eine kleinere Teilmenge von Funktionen auswählen, um möglicherweise die Leistung zu verbessern.

Lassen Sie uns nun demonstrieren, wie Sie mithilfe der sequentiellen Feature-Auswahl eine Teilmenge von fünf Features auswählen. Wir importieren die SequentialFeatureSelector-Klasse aus der MLxtend-Bibliothek und kürzen den Importnamen der Einfachheit halber auf sfs. Diese Klasse verwendet das Modell, die gewünschte Feature-Teilmengengröße und die Auswahlrichtung (vorwärts, rückwärts, schwebend) als Eingabe. Für die sequentielle Vorwärtsauswahl legen wir die Richtung auf vorwärts fest. Mit dem ausführlichen Parameter können wir die Menge der während des Trainings angezeigten Ausgabe steuern, was für die Überwachung des Fortschritts nützlich sein kann. Wir geben die Bewertungsmetrik als Genauigkeit an und verwenden eine 5-fache Kreuzvalidierung, um die Funktionsteilmengen zu bewerten. Die parallele Verarbeitung kann aktiviert werden, indem der Parameter n_jobs auf eine positive Ganzzahl oder -1 gesetzt wird, um alle verfügbaren CPU-Kerne zu nutzen. In diesem Fall setzen wir ihn für eine schnellere Ausführung auf 8.

Die Ausgabe zeigt den Fortschritt des Feature-Auswahlprozesses, beginnend mit einem Feature und schrittweiser Erhöhung der Anzahl der Features, bis die gewünschte Teilmengengröße von fünf erreicht ist. Die Leistung jeder Funktionsteilmenge wird ebenfalls angezeigt, was auf eine Verbesserung hinweist, wenn weitere Funktionen hinzugefügt werden.

Nach Abschluss können wir über die Attribute k_feature_idx_ bzw. k_feature_names_ des sfs-Objekts auf die ausgewählten Feature-Indizes und die entsprechenden Feature-Namen zugreifen. Darüber hinaus können wir mithilfe des k_score_-Attributs auf den Leistungsverlauf der Funktionsteilmengen zugreifen. Lassen Sie uns die ausgewählten Feature-Indizes, Namen und die entsprechenden Bewertungen ausdrucken:

print( 'Selected feature indices:' , sfs.k_feature_idx_)
print( 'Selected feature names:' , sfs.k_feature_names_)
print( 'Selected feature scores:' , sfs.k_score_)

Die Ausgabe zeigt die Indizes, Namen und Bewertungen der ausgewählten fünf Features.

Als Nächstes können wir den K-Nearest-Neighbor-Klassifikator für die ausgewählte Feature-Teilmenge neu trainieren. Dazu müssen wir ein neues Trainings- und Testset erstellen, das nur die ausgewählten Funktionen enthält. Wir können die Transformationsmethode des SFS-Objekts verwenden, um die ursprünglichen Datensätze in den neuen Feature-Space umzuwandeln:

X_train_selected = sfs.transform(X_train)
X_test_selected = sfs.transform(X_test)
Nach der Transformation der Datensätze können wir einen neuen K-Nearest-Neighbor-Klassifikator an die ausgewählte Feature-Teilmenge anpassen und die Trainings- und Testgenauigkeiten berechnen. Drucken wir die Ergebnisse aus:

knn_selected = KNeighborsClassifier(n_neighbors= 5 )
knn_selected.fit(X_train_selected, y_train)

train_acc_selected = knn_selected.score(X_train_selected, y_train)
test_acc_selected = knn_selected.score(X_test_selected, y_test)

print( 'Training accuracy on selected features:' , train_acc_selected)
print( 'Test accuracy on selected features:' , test_acc_selected)
Die Ausgabe zeigt die Trainings- und Testgenauigkeiten, die nur mit den ausgewählten fünf Funktionen erreicht wurden.

Durch den Vergleich der Ergebnisse mit den Basisgenauigkeiten können wir die Auswirkung der Merkmalsauswahl auf die Leistung des Klassifikators bewerten. In einigen Fällen kann die Merkmalsauswahl zu einer besseren Generalisierung und einer verbesserten Modellleistung führen, indem Überanpassungen reduziert und irrelevante oder redundante Merkmale entfernt werden.

Das war's für die Demonstration mit der MLxtend-Bibliothek. Kommen wir nun zur Verwendung von scikit-learn für die sequentielle Funktionsauswahl.

In scikit-learn ist die Klasse SequentialFeatureSelector im Modul feature_selection verfügbar. Wir importieren es wie folgt:

from sklearn.feature_selection import SequentialFeatureSelector
Die Verwendung der scikit-learn-Version ähnelt der MLxtend-Version, weist jedoch einige geringfügige Unterschiede bei den Parameternamen und dem Attributzugriff auf. Die scikit-learn-Version bietet außerdem mehr Flexibilität hinsichtlich der Verwendung verschiedener Algorithmen zur Funktionsauswahl und Bewertungsmetriken.

Ich hoffe, diese Demonstration hilft Ihnen zu verstehen, wie Sie die sequentielle Funktionsauswahl in Python verwenden. Denken Sie daran, für weitere Beispiele und Informationen die Dokumentation zu Rate zu ziehen.

13.4.5 Sequential Feature Selection -- Code Examples (L13: Feature Selection)
13.4.5 Sequential Feature Selection -- Code Examples (L13: Feature Selection)
  • 2022.01.06
  • www.youtube.com
This final video in the "Feature Selection" series shows you how to use Sequential Feature Selection in Python using both mlxtend and scikit-learn.Jupyter no...