Minimieren Sie die Anzahl der Punkte in einer stückweisen linearen Annäherung

Ich habe M Datenpunkte ( X ich , j ich ) in einem bestimmten Intervall. Ich möchte eine stückweise lineare Funktion finden F ( X ) die sich diesen annähern M Punkte mit einer Mindestpunktzahl N so dass mein Näherungsfehler unterhalb einer Toleranz liegt ϵ .

Mein M Punkte:Punkte

Die Funktion F ist eine stückweise lineare Funktion, die mit definiert ist N Punkte ( X A ich , j A ich ) . Für N = 4 , es würde so aussehen:

Annäherung

Näherungsfehler:

1 M 1 ich M ( j ich F ( X ich ) ) 2 ϵ

Um dieses Problem zu lösen, muss ich etwas finden N , eine Möglichkeit, den optimalen Punktesatz zu erhalten ( X A ich , j A ich ) . 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 N = 1 , 2 , 3 , . . . 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?

Der Douglas-Peucker-Algorithmus kann verwendet werden, um eine solche Näherung zu finden max ich ( j ich F ( X ich ) ) ϵ stattdessen.
Damit umgehen ich ( j ich F ( X ich ) ) 2 Stattdessen könnten Sie einen vollständigen Graphen auf Knoten betrachten { 1 , 2 , , M } ; jede Kante zuordnen ( ich , J ) Kosten w ich J = ich < k < J ( j k F ich J ( X k ) ) 2 , Wo F ich J ist die lineare Näherung zwischen ( X ich , j ich ) Und ( X J , k J ) ; dann finden Sie den kürzesten Weg von 1 Zu M nur verwenden N 1 Kanten.
@Rahul, danke! Ich denke, der Douglas-Peucker-Algorithmus könnte tatsächlich eine geeignete Lösung für mein Problem sein. Ich mag auch sehr Ihren graphbasierten Ansatz für den quadratischen Fehler. Beachten Sie, dass bei beiden Ansätzen ein Nachteil darin besteht, dass die ( X A ich , j A ich ) werden unter den ausgewählt ( X ich , j ich ) , was vielleicht nicht optimal ist. Ich denke auch, dass ich die Douglas-Peucker-Lösung verwenden könnte, um einen Gradientenabstiegsalgorithmus zu initialisieren, der viel näher am globalen Optimum liegt ...
Mir scheint, dass Douglas-Peucker durch genaue Anpassung an bestimmte Eingabepunkte keine besseren Lösungen findet, die alle Punkte verfehlen (wie in der Abbildung von OP).
Dies kann als gemischtes ganzzahliges Optimierungsproblem formuliert werden, das begrenzt gelöst werden kann N

Antworten (4)

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 ( X A 2 , j A 2 ) 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

Kann dieses Konzept auf stückweise Polynome vom Grad n mit k stetigen Ableitungen erweitert werden?

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:

  1. Beginnen Sie mit der linearen besten Näherung F 0 auf sagen [ A , B ] (das sind nur zwei Pausen). Wenn der Fehler ausreichend klein ist, stoppe.

  2. Andernfalls fügen Sie eine Pause hinzu C (zum Beispiel in der Mitte) und berechnen Sie die beste Annäherung F 1 . Wenn der Fehler ausreichend klein ist, stoppe.

  3. Andernfalls vergleichen Sie den Fehler von F 1 An [ A , C ] Und [ C , B ] . Wählen Sie beispielsweise das Teilintervall mit dem größeren Fehler [ A , C ] , und fügen Sie einen neuen Einbruch hinzu [ A , C ] . Berechnen Sie die beste Näherung F 2 . Wenn der Fehler ausreichend klein ist, stoppe.

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