Ich versuche die Regressionsaufgabe zu lösen. Ich habe herausgefunden, dass 3 Modelle für verschiedene Teilmengen von Daten gut funktionieren: LassoLARS, SVR und Gradient Tree Boosting. Mir ist aufgefallen, dass ich, wenn ich mit all diesen drei Modellen Vorhersagen mache und dann eine Tabelle mit den tatsächlichen Ergebnissen meiner drei Modelle erstelle, sehe, dass jedes Mal mindestens eines der Modelle den tatsächlichen Ergebnissen sehr nahe kommt, obwohl es zwei andere sind könnte relativ weit weg sein.
Wenn ich den minimal möglichen Fehler berechne (wenn ich für jedes Testbeispiel die Vorhersage vom 'besten' Prädiktor nehme), erhalte ich einen Fehler, der viel kleiner ist als der Fehler eines Modells allein. Also dachte ich darüber nach, Vorhersagen aus diesen drei verschiedenen Modellen zu einer Art Ensemble zusammenzufassen. Die Frage ist, wie man das richtig macht? Alle meine 3 Modelle werden mit Hilfe von Scikit-Learn erstellt und optimiert. Bietet es eine Methode, um Modelle in ein Ensemble zu packen? Das Problem hierbei ist, dass ich nicht nur die Vorhersagen aller drei Modelle mitteln möchte, sondern dies mit Gewichtung tun möchte, wobei die Gewichtung auf der Grundlage von Eigenschaften eines bestimmten Beispiels bestimmt werden sollte.
Auch wenn scikit-learn diese Funktionalität nicht bietet, wäre es schön, wenn jemand weiß, wie man diese Aufgabe löst - die Gewichtung jedes Modells für jedes Beispiel in Daten herauszufinden. Ich denke, dass es durch einen separaten Regressor möglich ist, der auf all diesen 3 Modellen aufbaut und versucht, für jedes der 3 Modelle ein optimales Gewicht auszugeben, aber ich bin mir nicht sicher, ob dies der beste Weg ist, dies zu tun.
quelle
model.named_steps['lin_regr'].coef_
) ansehen, erhalten Sie möglicherweise einige Einblicke, inwieweit jedes Modell in einem Ensemble zur endgültigen Lösung beiträgt.X, y = make_regression(n_features=10, n_targets=1)
, ergibt sich ein Dimensionsfehler. kann mir bitte jemand erklären was zu tun istOk, nachdem ich einige Zeit mit googeln verbracht hatte, fand ich heraus, wie ich das Gewichten in Python auch mit Scikit-Learn machen konnte. Betrachten Sie das Folgende:
Ich trainiere eine Reihe meiner Regressionsmodelle (wie erwähnt SVR, LassoLars und GradientBoostingRegressor). Dann führe ich sie alle mit Trainingsdaten durch (dieselben Daten, die für das Training jedes dieser 3 Regressoren verwendet wurden). Ich erhalte Vorhersagen für Beispiele mit jedem meiner Algorithmen und speichere diese 3 Ergebnisse in einem Pandadatenrahmen mit den Spalten "predictedSVR", "predictedLASSO" und "predictedGBR". Und ich füge die letzte Spalte in diesen Datenbereich ein, den ich "vorhergesagt" nenne, was ein echter Vorhersagewert ist.
Dann trainiere ich einfach eine lineare Regression für diesen neuen Datenrahmen:
Wenn ich also eine Vorhersage für ein neues Beispiel machen möchte, führe ich einfach jeden meiner 3 Regressoren separat aus und dann mache ich Folgendes:
auf den Ausgängen meiner 3 Regressoren. Und ein Ergebnis bekommen.
Das Problem hierbei ist, dass ich im Durchschnitt optimale Gewichte für Regressoren finde. Die Gewichte sind für jedes Beispiel, für das ich versuchen werde, Vorhersagen zu treffen, gleich.
Wenn jemand eine Idee hat, wie man mit den Funktionen des aktuellen Beispiels stapelt (gewichtet), wäre es schön, sie zu hören.
quelle
LinearRegression()
anstattLogisticRegression()
Modell benutzt?Wenn Ihre Daten offensichtliche Teilmengen haben, können Sie einen Cluster-Algorithmus wie k-means ausführen und dann jeden Klassifikator den Clustern zuordnen, für die er eine gute Leistung erbringt. Wenn ein neuer Datenpunkt eintrifft, bestimmen Sie, in welchem Cluster er sich befindet, und führen Sie den zugehörigen Klassifizierer aus.
Sie können auch die umgekehrten Abstände von den Schwerpunkten verwenden, um eine Reihe von Gewichten für jeden Klassifikator zu erhalten und eine lineare Kombination aller Klassifikatoren vorauszusagen.
quelle
Ich bewerkstellige eine Art Gewichtung, indem ich Folgendes tue, sobald alle Ihre Modelle vollständig trainiert sind und eine gute Leistung erbringen:
Sie können Ihr Ensemble weiter stimmen, indem Sie im Laufe der Zeit den korrekten Prozentsatz messen. Sobald Sie einen signifikant großen, neuen Datensatz erhalten haben, können Sie den Schwellenwert in Schritten von 0,1 darstellen, beispielsweise gegen den korrekten Prozentsatz, wenn Sie diesen Schwellenwert für die Bewertung verwenden, um eine Vorstellung davon zu erhalten, welcher Schwellenwert zu 95% korrekt ist für Klasse 1 und so weiter. Sie können den Testsatz und die f1-Ergebnisse aktualisieren, sobald neue Daten eingehen, und die Drift verfolgen und die Modelle neu erstellen, wenn die Schwellenwerte oder die Genauigkeit sinken.
quelle