Ich habe Datenpunkte in einem bestimmten Intervall. Ich möchte eine stückweise lineare Funktion finden die sich diesen annähern Punkte mit einer Mindestpunktzahl so dass mein Näherungsfehler unterhalb einer Toleranz liegt .
Die Funktion ist eine stückweise lineare Funktion, die mit definiert ist Punkte . Für , es würde so aussehen:
Näherungsfehler:
Um dieses Problem zu lösen, muss ich etwas finden , eine Möglichkeit, den optimalen Punktesatz zu erhalten . Ich kann versuchen, meinen Näherungsfehler mit Gradientenabstieg zu minimieren, aber die Funktion ist nicht konvex, sodass sie möglicherweise nicht zum globalen Optimum konvergiert.
Wenn ich den vorherigen Schritt löse, kann ich den Algorithmus einfach einfach ablaufen lassen und höre auf, wenn mein Näherungsfehler unterschritten wird
Ich höre mich nach einem ziemlich häufigen Problem an, für das es vielleicht schon eine Lösung gibt. Kennen Sie einen oder können Sie einen Lösungsansatz für dieses Problem vorschlagen?
Ich würde das Problem folgendermaßen angehen.
Nehmen Sie das Intervall, das die ersten drei Punkte enthält. Berechnen Sie den Korrelationskoeffizienten
.
- Wenn
nicht gut genug ist, nehmen Sie nur die ersten beiden Punkte, markieren Sie sie als im 1. Intervall und untersuchen Sie die nächsten drei. - elf
ziemlich gut ist, fügen Sie einen vierten Punkt hinzu und berechnen Sie den Koeffizienten neu; weiter bis
bleibt gut;
Wiederholen Sie dies, bis Sie alle Punkte in zusammenhängende Intervalle mit guter Korrelation aufgeteilt haben.
Sie müssen nur überlegen, was Sie mit den Punkten an der Grenze der Intervalle tun:
- Sie können die Intervalle unzusammenhängend halten;
- oder man nimmt den letzten Punkt in die Berechnung der Korrelation für den nächsten wieder mit und überlappt so die Intervalle.
Hier ist der Weg, der mir offensichtlich erscheint; Vielleicht weist jemand Weiser darauf hin, wie es ineffizient ist oder an perversem Input scheitert.
Betrachten Sie den zweidimensionalen Raum linearer Funktionen. Jeder Eingabepunkt definiert mit seinen Toleranzen ein Band akzeptabler Linien. Ein Schnittpunkt solcher Bänder ist ein konvexes Polygon.
Beginnen Sie also links, stapeln Sie die Beschränkungen, bis dieses Polygon verschwindet, und gehen Sie dann um eins zurück. Ihre erste Linie wird durch einen Punkt irgendwo in diesem Polygon dargestellt; Sie können auch seinen Schwerpunkt oder den Durchschnitt seiner Ecken verwenden.
Machen Sie es dann erneut, beginnend mit dem letzten Punkt, der von der ersten Zeile "bedeckt" wird. Dein ist natürlich der Schnittpunkt der ersten beiden Lösungsgeraden.
Es könnte interessant sein zu sehen, ob das Starten von rechts zu einem anderen Ergebnis führt.
(Meine ästhetische Präferenz wäre, alle maximal kompatiblen Untersequenzen zu verwenden, aber das ist nicht meine Frage.)
Bearbeiten: Dies ist die Hauptidee des folgenden Papiers und wird hier diskutiert
Es ist nicht einfach, weil die stückweise lineare Funktion nicht differenzierbar von den Unterbrechungspunkten abhängt (sie ist jedoch stetig). Und die Sache wird hässlich, wenn Sie die Anzahl der Pausen variieren.
Es ist viel einfacher, die beste Näherung für feste Unterbrechungen zu berechnen . Somit würde eine einfache Heuristik wie folgt aussehen:
Beginnen Sie mit der linearen besten Näherung auf sagen (das sind nur zwei Pausen). Wenn der Fehler ausreichend klein ist, stoppe.
Andernfalls fügen Sie eine Pause hinzu (zum Beispiel in der Mitte) und berechnen Sie die beste Annäherung . Wenn der Fehler ausreichend klein ist, stoppe.
Andernfalls vergleichen Sie den Fehler von An Und . Wählen Sie beispielsweise das Teilintervall mit dem größeren Fehler , und fügen Sie einen neuen Einbruch hinzu . Berechnen Sie die beste Näherung . Wenn der Fehler ausreichend klein ist, stoppe.
Ansonsten ... und so weiter
Ich weiß nicht, ob es auf ein Minimum konvergiert, aber ich habe einmal eine Funktion zum "Umwandeln" von GPS-Punkten in eine Straße erstellt.
Dazu habe ich einen rechteckigen Bereich genommen, dessen Seite das Doppelte der Toleranzkumulationspunkte ist, solange das Rechteck alle enthalten könnte. An diesem Punkt begann ich mit einem anderen Rechteck, das zumindest den letzten Punkt des vorherigen Rechtecks enthielt.
Benutzer856
Benutzer856
Eric Leibenguth
Anton Scherwood
LinAlg