Wie sollten Feature-Auswahl und Hyperparameter-Optimierung in der Pipeline für maschinelles Lernen angeordnet werden?


14

Mein Ziel ist es, Sensorsignale zu klassifizieren. Das bisherige Konzept meiner Lösung lautet: i) Konstruieren von Features aus dem Rohsignal ii) Auswählen relevanter Features mit ReliefF und einem Clustering-Ansatz iii) Anwenden von NN, Random Forest und SVM

Ich bin jedoch in einem Dilemma gefangen. In ii) und iii) gibt es Hyperparameter wie k-Nearest Neigbours for ReliefF oder die Fensterlänge, für die das Sensorsignal ausgewertet wird, oder die Anzahl der versteckten Einheiten in jeder Schicht von NN

Ich sehe hier drei Probleme: 1) Das Optimieren der Auswahlparameter für Features beeinflusst die Leistung des Klassifikators. 2) Die Optimierung der Hyperparameter des Klassifikators beeinflusst die Auswahl der Merkmale. 3) Die Bewertung jeder möglichen Konfigurationskombination ist nicht möglich.

Meine Fragen lauten also: a) Kann ich eine vereinfachende Annahme treffen, dass die Auswahlparameter für die Tuning-Funktion von den Tuning-Klassifikatorparametern entkoppelt werden können? b) Gibt es andere mögliche Lösungen?


Ich denke, dass die Optimierung der Entkopplungsmerkmalsauswahl und der Klassifiziereroptimierung gültig ist, da die Heuritsik für ReliefF darauf abzielt, die Varianz zwischen Klassen zu maximieren und die Varianz innerhalb der Klasse zu minimieren, was auch auf einen guten Klassifikator hinweist. Daher macht die Abstimmung der optimalen Parameter für reliefF auch einen guten Klassifikator "wahrscheinlicher". Es wäre jedoch sehr schön, eine mathematische Formulierung zu haben, um diese Idee zu untermauern.
Grunwalski

Eine spezielle Variante dieser Frage: Sollte die Merkmalsauswahl Teil der Kreuzvalidierungsroutine sein (wie in: # für jeden Klassifikator-Hyperparametersatz: # für jeden k-fachen CV-Lauf: 1) Merkmalsauswahl, 2) Merkmalsskalierung, 3) Klassifikatoranpassung 4) auf Testset vorhersagen?
Nikolas Rieble

1
@ NikolasRieble Ich habe gerade eine Antwort auf die ursprüngliche Frage geschrieben und auch Ihre Frage in die Antwort aufgenommen
Dennis Soemers

Antworten:


14

Wie Sie bereits selbst beobachtet haben, kann Ihre Auswahl von Merkmalen (Merkmalsauswahl) einen Einfluss darauf haben, welche Hyperparameter für Ihren Algorithmus optimal sind, und welche Hyperparameter Sie für Ihren Algorithmus auswählen, kann einen Einfluss darauf haben, welche Auswahl von Merkmalen optimal wäre.

Also, ja, wenn Sie wirklich wirklich daran interessiert sind, jedes einzelne Prozent der Leistung aus Ihrem Modell herauszuholen, und Sie sich den erforderlichen Rechenaufwand leisten können, besteht die beste Lösung wahrscheinlich darin, die Funktionsauswahl und die Hyperparameter-Optimierung "gleichzeitig" durchzuführen. Das ist wahrscheinlich nicht einfach (abhängig davon, wie Sie die Funktionen auswählen). Die Art und Weise, wie ich mir das vorstelle, wäre, als würde ich verschiedene Merkmalssätze als Kandidaten haben und die Auswahl eines Merkmalssatzes aus all diesen Kandidatensätzen als zusätzlichen Hyperparameter behandeln.

In der Praxis ist dies jedoch möglicherweise nicht wirklich möglich. Wenn Sie es sich nicht leisten können, alle möglichen Kombinationen zu bewerten, würde ich im Allgemeinen empfehlen:

  1. Optimieren Sie Hyperparameter sehr locker, nur um sicherzustellen, dass Sie einigen Hyperparametern keine extrem schlechten Werte zuweisen. Dies kann oft nur von Hand erfolgen, wenn Sie ein gutes intuitives Verständnis Ihrer Hyperparameter haben, oder mit einem sehr kurzen Verfahren zur Optimierung von Hyperparametern, bei dem nur eine Reihe von Funktionen verwendet werden, von denen Sie wissen, dass sie ansonsten anständig gut sind.

  2. Funktionsauswahl mit Hyperparametern, die möglicherweise nicht zu 100% optimiert sind, aber zumindest auch nicht besonders schrecklich. Wenn Sie bereits über einen etwas anständig konfigurierten Algorithmus für maschinelles Lernen verfügen, sind gute Funktionen für Ihre Leistung wesentlich wichtiger als mikrooptimierende Hyperparameter. Extreme Beispiele: Wenn Sie keine Funktionen haben, können Sie nichts vorhersagen. Wenn Sie eine Betrugsfunktion haben, die die Klassenbezeichnung enthält, können Sie alles perfekt klassifizieren.

  3. Optimieren Sie Hyperparameter mit den im obigen Schritt ausgewählten Funktionen. Dies sollte jetzt ein guter Funktionsumfang sein, bei dem es sich möglicherweise lohnt, Hyperparams ein wenig zu optimieren.


Um die zusätzliche Frage zu beantworten, die Nikolas in den Kommentaren gestellt hat, wie all diese Dinge (Funktionsauswahl, Hyperparameteroptimierung) mit der k-fachen Kreuzvalidierung interagieren: Ich würde sagen, es kommt darauf an.

Immer wenn Sie Daten in einer der Falten für irgendetwas verwenden und dann die Leistung in derselben Falte bewerten, erhalten Sie eine voreingenommene Schätzung Ihrer Leistung (Sie überschätzen die Leistung). Wenn Sie also Daten in allen Falten für den Funktionsauswahlschritt verwenden und dann die Leistung für jede dieser Falten bewerten, erhalten Sie voreingenommene Schätzungen der Leistung für jede dieser Falten (was nicht gut ist). Wenn Sie eine datengesteuerte Hyperparameteroptimierung haben und Daten aus bestimmten Falten (oder allen Falten) verwenden und dann auf denselben Falten auswerten, erhalten Sie erneut voreingenommene Schätzungen der Leistung. Mögliche Lösungen sind:

  1. Wiederholen Sie die gesamte Pipeline innerhalb jeder Falte separat (z. B. innerhalb jeder Falte, wählen Sie die Funktionen aus + Hyperparameteroptimierung und Trainingsmodell). Dies bedeutet, dass Sie durch die k-fache Kreuzvalidierung unvoreingenommene Schätzungen der Leistung dieser vollständigen Pipeline erhalten .

  2. Teilen Sie Ihren ursprünglichen Datensatz in einen Vorverarbeitungsdatensatz und einen Zug- / Testdatensatz auf. Sie können Ihre Funktionsauswahl + Hyperparameteroptimierung für den '' Vorverarbeitungsdatensatz '' vornehmen. Anschließend korrigieren Sie Ihre ausgewählten Features und Hyperparameter und führen eine k-fache Kreuzvalidierung für den Zug- / Testdatensatz durch. Dies bedeutet, dass Sie durch die k-fache Kreuzvalidierung unvoreingenommene Schätzungen der Leistung Ihres ML-Algorithmus erhalten, wenn Sie die festgelegten Werte für Feature-Set und Hyperparameter angeben .

Beachten Sie, wie die beiden Lösungen zu leicht unterschiedlichen Leistungsschätzungen führen. Welches interessanter ist, hängt von Ihrem Anwendungsfall ab und davon, wie Sie Ihre maschinellen Lernlösungen in der Praxis einsetzen möchten. Wenn Sie beispielsweise ein Unternehmen sind, das beabsichtigt, die gesamte Pipeline aus Funktionsauswahl + Hyperparameteroptimierung + Training automatisch jeden Tag / jede Woche / jeden Monat / jedes Jahr / was auch immer auszuführen, sind Sie auch an der Leistung dieses Vorgangs interessiert Pipeline, und Sie werden die erste Lösung wollen.

Wenn Sie es sich andererseits nur leisten können, die Funktionsauswahl + Hyperparameteroptimierung ein einziges Mal in Ihrem Leben durchzuführen und anschließend Ihren Algorithmus nur ein wenig regelmäßig neu zu trainieren (wobei die Werte für Feature-Set und Hyperparameter festgelegt sind), dann ist die Leistung Nur an diesem Schritt interessiert Sie, und Sie sollten sich für die zweite Lösung entscheiden


Können Sie auch Referenzen angeben?
Nikolas Rieble

1
In diesem Beitrag finden Sie einige Bilder eines bekannten Buches: nodalpoint.com/not-perform-feature-selection . Diese scheinen mit meiner möglichen Lösung 1 übereinzustimmen. Ich habe nicht unbedingt eine Referenz für den anderen Fall, außer ... mir selbst? Ich habe dort meine Argumentation / Motivation angegeben, die meiner Meinung nach überprüft wird. Das ist also die Referenz: D
Dennis Soemers

1
Dieses Kapitel der ESL sollte zu 100% für jeden Vorhersagemodellierer gelesen werden müssen.
Matthew Drury

Wie erhalten Sie in Bezug auf Lösung 1 Ihren endgültigen Funktionsumfang und Ihre Modellhyperparameter, nachdem Sie die Funktionsauswahl (fs) und die Hyperparameteroptimierung (ho) in mehreren Lebensläufen ausgeführt haben? Wenn wir diese in einer Iteration von cv ausführen, führen wir dann zuerst fs aus und verwenden dann diese Funktionen?
Überfliegen Sie den

1
K.- -1

4

Niemand erwähnte Ansätze, die die Optimierung von Hyperparametern und die Auswahl von Merkmalen gleich machen, also werde ich darüber sprechen. In diesem Fall sollten Sie zu Beginn alle gewünschten Funktionen entwickeln und alle einbeziehen.

Forschungen in der Statistik-Community haben versucht, die Auswahl von Features zu einem Optimierungskriterium zu machen. Grundsätzlich bestrafen Sie ein Modell so, dass es einen Anreiz bietet, nur wenige Funktionen auszuwählen, die ihm helfen, die beste Vorhersage zu treffen. Sie fügen jedoch einen Abstimmungsparameter hinzu, um zu bestimmen, wie hoch die Strafe sein sollte.

Mit anderen Worten, Sie erlauben dem Modell, die Features für Sie auszuwählen, und Sie haben mehr oder weniger die Kontrolle über die Anzahl der Features. Dies reduziert die Berechnung tatsächlich, da Sie nicht mehr entscheiden müssen, welche Funktionen, sondern nur wie viele Funktionen und das Modell den Rest erledigen.

Wenn Sie also eine Kreuzvalidierung für den Parameter durchführen, führen Sie auch eine Kreuzvalidierung für die Funktionsauswahl durch.

Es gibt bereits viele ML-Modelle, die diese Funktionsauswahl auf die eine oder andere Weise enthalten.

  • Doppelt regulierte Support-Vektor-Maschinen die wie normale SVM sind, jedoch über eine Funktionsauswahl verfügen
  • Elastisches Netz das sich mit linearer Regression befasst
  • Drop-Out-Regularisierung in neuronalen Netzen (keine Referenz für diese)
  • Zufällige Gesamtstruktur führt normalerweise zufällige Teilmengen der Features aus, sodass die Auswahl der Features für Sie sozusagen erfolgt

Kurz gesagt, es wurde versucht, die Parameteroptimierung und die Merkmalsauswahl gleichzeitig zu integrieren, um die Komplexität zu verringern und eine Kreuzvalidierung durchführen zu können


0

Ich denke, Sie überdenken dort ziemlich viel. Die Funktionsauswahl, die Teil des Feature-Engineerings ist, ist normalerweise hilfreich, aber einige redundante Funktionen sind in der frühen Phase eines maschinellen Lernsystems nicht sehr schädlich. Die beste Vorgehensweise besteht darin, dass Sie zuerst alle aussagekräftigen Features generieren und dann damit Algorithmen auswählen und Modelle optimieren. Nach dem Optimieren des Modells können Sie den Feature-Set kürzen oder neue Features verwenden.

Das maschinelle Lernverfahren ist eigentlich ein iterierender Prozess, bei dem Sie Feature-Engineering durchführen, dann einige Algorithmen ausprobieren, dann die Modelle optimieren und zurückgehen, bis Sie mit dem Ergebnis zufrieden sind.


Sie meinen, es wird versucht, bis es funktioniert: D.
Grunwalski

Versuchen Sie es in einem ML-Verfahren, nicht zufällig. Eigentlich ist ML per se ein bisschen Hacking.
THN
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.