Integration einer ersten Schätzung (Heuristik) in ein Vorhersagemodell (maschinelles Lernen)Ich versuche, ein Tool namens Blend Search zu entwickeln. Es funktioniert schon ganz gut, aber ich stelle mir eine Verbesserung vor, deren technische Umsetzung mir noch nicht klar ist.
Was Blend Search leistet:
>> input ist eine Sammlung von Komponenten mit ihren Eigenschaften
>> Erzeugung einer Kompositionsmatrix
>> Anwendung von Heuristiken (einfachen Modellen) zur Berechnung der Eigenschaften von Mischungen
>> Anwendung eines komplexeren Modells, aktuell eines Boosted Trees. Dessen Prädiktoren sind die durch Heuristiken geschätzten Eigenschaften der Mischungen, und sein Ergebnis ist ebenfalls eine Eigenschaft der Mischung.
Ich habe eine Boosted-Tree-Visualisierung erstellt (siehe beigefügtes Video).
Einer der Prädiktoren (Prädiktor 3) liefert bereits eine erste Schätzung meiner Zielgröße (Vorhergesagt). Ursprünglich sollten die beiden anderen Prädiktoren diese erste Schätzung verfeinern. Heute liefert das Modell konsistente Vorhersagen; wir weichen nur selten vom vorhergesagten Bereich ab.
Tatsächlich korrigiere ich aber nicht meine ursprüngliche Schätzung, sondern den Durchschnitt der Y-Werte im Trainingsdatensatz (den standardmäßigen Achsenabschnitt des Boosted Tree). Wenn ich meine Blend Search skalieren möchte, ist dieser Ansatz nicht mehr robust genug.
Ich möchte Vorhersagen treffen können, indem ich meine anfängliche Schätzung korrigiere. Beispielsweise wünsche ich mir einen variablen Achsenabschnitt für meinen Boosted Tree. Ich kann mir die optimale Lösung noch nicht genau vorstellen, bin mir aber ziemlich sicher, dass es bereits einige Techniken gibt. Falls Sie Ideen dazu haben, würde ich mich sehr über Ihre Anregungen freuen.
Prädiktive Modellierung und maschinelles LernenBetreff: Integration einer ersten Schätzung (Heuristik) in ein Vorhersagemodell (maschinelles Lernen)Hallo @RikkiTikkiTavi ,
Ich bin mir nicht sicher, ob ich die algorithmische Modellierungskette vollständig verstanden habe, aber ich hätte da vielleicht eine Idee. Es gibt zwei Möglichkeiten, Vorhersagen zu verbessern: Boosting (zur Reduzierung von Vorhersageverzerrungen) und Bagging/Modellmittelung (zur Reduzierung der Vorhersagevarianz).
- Boosting-Ansatz: Um die Vorhersagen der Zielgröße durch Korrektur einer Verzerrung (vorhergesagte mittlere Antwort vs. gemessene mittlere Antwort) zu verbessern, kann ein Machine-Learning-Modell trainiert werden, das die Residuen dieser Zielgröße aus den Rohdaten und/oder geschätzten Daten sowie aus den Vorhersagen der Zielgröße vorhersagt (um Fehler basierend auf den ursprünglichen Variablen und Vorhersagen zu modellieren). Dadurch erhält man ein Modell, das Fehler im Boosting-Baum vorhersagt und als Korrekturschicht für den Boosting-Baum dient (indem die Residuenvorhersagen zu den Vorhersagen des Boosting-Baums addiert/subtrahiert werden).
Ich habe diesen Ansatz bereits mehrfach angewendet, und die Leistungssteigerungen können beträchtlich sein. Es könnte sich lohnen, für die Fehlermodellierung ein anderes Modell zu verwenden als für die Vorhersagen (z. B. in Ihrem Fall ein anderes als Boosted Tree). Validieren Sie dieses neue Modell außerdem gründlich und vermeiden Sie Überanpassung. Verwenden Sie dazu eine geeignete Validierungsstrategie (zum Vergleich mit dem Boosted-Tree-Modell) und eine Teststrategie (zur Bewertung der Leistung unter realen Bedingungen). Um Datenlecks zu vermeiden, verwenden Sie für die Fehlerberechnung ausschließlich die zum Vorhersagezeitpunkt verfügbaren Daten: Prädiktoren plus Vorhersagen der Zielgröße.
- Bagging/Modellmittelung: Eine weitere Möglichkeit zur Reduzierung der Vorhersagevarianz besteht darin, zusätzlich zum Boosted-Tree-Modell mehrere Modelle parallel zu trainieren und den Mittelwert oder Median ihrer Vorhersagen zu berechnen. Bei diesem Ansatz ist es jedoch entscheidend, eine geeignete Validierungs- und Teststrategie zu implementieren.
Die Wahl zwischen diesen Optionen hängt von der Leistung Ihres ursprünglichen Boosted-Tree-Modells und dem Rauschen in den Daten ab: Neigt der Boosted Tree zu Überanpassung oder sind die verwendeten Daten verrauscht, empfiehlt sich ein Bagging-Ansatz. Ist die Leistung des Boosted Tree hingegen unzureichend und weist er eine hohe Verzerrung auf (was angesichts des Modellverhaltens eher unwahrscheinlich erscheint, sofern keine spezifischen Parameter verwendet werden), ist der Boosting-Ansatz effektiver. Da das verwendete Vorhersagemodell (Boosted Tree) bereits einen Boosting-ähnlichen Ansatz nutzt, würde ich dem Testen von Bagging-Ensembles Priorität einräumen.
Hoffentlich inspirieren Sie diese Optionen.
Betreff: Integration einer ersten Schätzung (Heuristik) in ein Vorhersagemodell (maschinelles Lernen)Hallo @Victor_G ,
Ich hatte bereits versucht, die Residuen (die Differenz zwischen dem tatsächlichen Wert meiner Zielgröße und ihrer anfänglichen Schätzung) vorherzusagen. Auf dem Trainingsdatensatz konnte ich eine leichte Verbesserung erzielen, jedoch nicht auf dem Testdatensatz (der RMSE verdoppelte sich). Mein Testdatensatz repräsentiert die angestrebte Skalierung; er besteht aus einer Untergruppe mit sehr unterschiedlichen Zusammensetzungen, deren Eigenschaften jedoch nahezu im gleichen Bereich wie die des Trainingsdatensatzes liegen. Mein aktueller Boosted Tree liefert auf dem Testdatensatz recht gute Vorhersagen.
Die Idee der Modellmittelung ist interessant. Muss ich Modelle finden, die ausreichend unterschiedliche Fehler aufweisen, um den Ansatz zu testen? Ich denke, ich werde zunächst Bagging ausprobieren. Mir ist bewusst, dass meine Daten verrauscht sind, und ich vermute, dass sich diese Art von Modell auch leichter in mein Blend Search-Tool integrieren lässt als eine Reihe von 2, 3, 4... verschiedenen Modellen.
Vielen Dank für Ihre Ideen;
Betreff: Integration einer ersten Schätzung (Heuristik) in ein Vorhersagemodell (maschinelles Lernen)Hallo @RikkiTikkiTavi ,
Ja, die Schwierigkeit dieses Ansatzes liegt in der richtigen Validierungsstrategie, um Overfitting zu vermeiden (Verbesserung im Trainingsdatensatz, aber stabile oder sogar sich verschlechternde Leistung im Validierungsdatensatz).
Ich bin etwas besorgt, dass es aufgrund Ihrer Beschreibung der Testdaten zu einer Domänenverschiebung kommen könnte: Es besteht die Gefahr, dass die vom Modell während des Trainings gelernten Beziehungen zwischen Eingaben und Ausgaben sich von denen der Testdaten unterscheiden. Wäre es möglich, die Trainings-, Validierungs- und Testdaten zu mischen/ zu stratifizieren , um diese Verschiebung zu vermeiden (und nur die Scale-up-Daten im Test zu verwenden)? Dadurch könnte das Modell auch Informationen über den Scale-up erhalten, beispielsweise durch die Angabe dieser Information in einer neuen Variable während des Trainings (z. B. `experiment_type: R&D / Scale-up / Prod`; dies hängt davon ab, ob die verschiedenen Phasen unterschiedliche Achsenabschnitte aufweisen und daher diese Variable benötigen).
Was den weiteren Ablauf betrifft, hier einige Anmerkungen/Ideen:
- Beginnen Sie mit der Festlegung der Trainings-/Validierungs-/Teststrategie , wenn möglich durch eine stratifizierte Aufteilung in Bezug auf die Variablen, um sicherzustellen, dass der gesamte experimentelle Raum in jedem der Datensätze abgedeckt wird (um ein relevantes Training und eine gute Generalisierung der Leistung zu gewährleisten).
- Vor dem Training des Boosted Trees (oder eines anderen Modells) sollten Vergleichsmodelle erstellt werden: ein Benchmark-Modell (ich empfehle Random Forest ), das in der Validierung die anderen Modelle übertrifft, und ein Modell zur Bestimmung der unteren Leistungsgrenzen der getesteten Modelle. Dies kann beispielsweise ein einfaches Modell sein, das lediglich die durchschnittliche Antwort des Trainingsdatensatzes über alle anderen Datensätze (Validierung und Test) hinweg vorhersagt. Sind die anderen Modelle schlechter oder gleichwertig mit diesem Modell (z. B. mit einem RMSE nahe oder höher als der des einfachen Modells), kann dies auf übermäßiges Rauschen in den Daten im Verhältnis zum Signal, fehlende Informationen der Faktoren und/oder unzureichende Variabilität der Antwort hinweisen.
- Ich würde außerdem empfehlen, verschiedene Modelle zu testen, beispielsweise mit der Modell-Screening Plattform, indem man eine Kreuzvalidierung ausschließlich mit dem Trainingsdatensatz durchführt. So lassen sich die vielversprechendsten Modelle auswählen und weiterverarbeiten.
- Abhängig von der Leistung der Modelle ist ein erneutes Training mit dem Trainingsdatensatz möglich, um ihre Leistung mit der des Validierungsdatensatzes zu vergleichen und das beste Modell auszuwählen. Parallel dazu können die ausgewählten, bereits mit der vorherigen Kreuzvalidierung trainierten Modelle mithilfe der Modellvergleichsplattform einer Modellmittelung unterzogen werden. Der interessante Aspekt der Modellmittelung besteht darin, Modelle mit unterschiedlichen Konstruktionstypen (induktiven Verzerrungen) – wie baumbasierte Modelle wie Boosted Trees, Random Forest oder XGBoost – mit anderen Modellen wie multivariater Regression, SVM, Gaußprozessen oder kleinen neuronalen Netzen zu kombinieren, abhängig von ihrer Leistung. Diese Modelle sollten eine gute individuelle Leistung aufweisen (sie müssen das Signal in den Daten erfasst haben) und idealerweise leicht unterschiedliche Fehlerraten (einige überschätzen bestimmte Beobachtungen, während andere sie unterschätzen). Der Vergleich dieses Makromodells mit einzelnen, mit dem Trainingsdatensatz neu trainierten Modellen kann dann mithilfe derselben Modellvergleichsplattform durch Vergleich der Leistungsergebnisse auf dem Validierungsdatensatz erfolgen.
- Sobald die beste Option ausgewählt ist (Makromodell oder individuelles Modell), wird die Leistung anhand des Testdatensatzes geschätzt, um das Verhalten des Modells nach der Bereitstellung zu bewerten.
Es ist auch möglich, andere Machine-Learning-Modelle als das natürliche Bagging des Random Forest zu bootstrappen , um die Robustheit der Modelle im Training zu verbessern.
Ich hoffe, diese Vorschläge helfen Ihnen weiter.