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?
quelle
Antworten:
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
quelle
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.
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
quelle
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.
quelle