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:
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.
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.
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:
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 .
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