2009-02-25 15 views
6

Das Kurvenanpassungsproblem für 2D-Daten ist bekannt (LOWESS usw.), aber bei einer Reihe von 3D-Datenpunkten, wie passe ich eine 3D-Kurve an (z. B. Glättungs-/Regressions-Spline) zu diesen Daten?Kurvenanpassung 3D-Datensatz

MORE: Ich versuche, eine Kurve zu finden, passend zu den Daten von Vektoren X, Y, Z, die keine bekannte Beziehung haben. Im Wesentlichen habe ich eine 3D-Punktwolke und muss eine 3D-Trendlinie finden.

MEHR: Ich entschuldige mich für die Mehrdeutigkeit. Ich habe mehrere Ansätze ausprobiert (ich habe immer noch nicht versucht, die lineare Anpassung zu modifizieren) und ein zufälliges NN scheint am besten zu funktionieren. Das heißt, ich wähle zufällig einen Punkt aus der Punktwolke, finde den Schwerpunkt seiner Nachbarn (innerhalb einer beliebigen Sphäre), iteriere. Es ist schwierig, die Zentroide zu einem glatten Spline zu verbinden, aber die erhaltenen Zentroide sind passierbar.

Um das Problem zu klären, sind die Daten keine Zeitreihe und ich suche nach einem glatten Spline, der die Punktwolke Ie am besten beschreibt, wenn ich diesen 3D Spline auf einer Ebene projizieren würde, die aus 2 Variablen besteht, Der projizierte Spline (auf 2D) ist eine glatte Anpassung der projizierten Punktwolke (auf 2D).

IMG: Ich habe ein Bild eingefügt. Die roten Punkte stellen den Schwerpunkt dar, der aus dem oben erwähnten Verfahren erhalten wurde.

3D Point Cloud and Local Centroids http://img510.imageshack.us/img510/2495/40670529.jpg

+3

Bild fehlt –

Antwort

1

Sie könnten versuchen, Additiv (dh einzelnen Index-Modelle), wie GAM finden es ist ein gieriger Ansatz, sehr skalierbar, gut implementiert in mehreren R-Paketen

1

Es hängt davon ab, was Sie damit meinen. Wenn Sie eine Menge von Punkten f (x, y) -> z haben und Sie eine Funktion finden wollen, die alle trifft, können Sie einfach einen Spline machen.

Wenn Sie eine bekannte Funktion haben und die Parameter anpassen möchten, um den RMS-Fehler zu minimieren, betrachten Sie x, ya ein zusammengesetztes Objekt p (z. B. als wäre es ein Komplex oder ein 2-Vektor) und verwenden Sie ein Analog des 2d-Falles auf f (p) -> z.

Wenn Sie genauer festlegen können, was Sie erreichen möchten, kann ich mit Vorschlägen spezifischer sein.

- MarkusQ

So die bearbeitete Problem Anweisung gegeben, ich folgende vorschlagen würde:

  • Wenn es eine Zeitreihe (implizierte Ihre Verwendung des Begriffs "Trendlinie") ist I‘ Betrachte es als drei parametrische Funktionen (x (t), y (t), z (t)) und tue 2d Fitting auf jedem von ihnen.
  • Alternativ (aber immer noch eine geordnete Reihe vorausgesetzt) ​​möchten Sie vielleicht eine lineare Anpassung finden (eine Linie durch das Herz der Wolke) und dann eine Art (wahrscheinlich polare) Funktion basierend auf der senkrechten Projektion von hinzufügen die Punkte zur Linie.
  • Wenn es keine Zeitreihe ist (impliziert durch die Ausdrücke "keine bekannte Beziehung" und "Punktwolke"), müssen Sie definieren, welche "Kurve" Sie an sie anpassen möchten. Willst du eine Linie? Eine Oberfläche/Mannigfaltigkeit? Möchten Sie, dass es eine Funktion von einer oder zwei der Variablen ist oder unabhängig von ihnen (z. B. der konvexen Hülle). Muss es glatt, graduell begrenzt oder ... sein?

Wirklich ist die Frage immer noch zu Ende.

2

Eine ähnliche Fragen ist hier:

Simple multidimensional curve fitting

Im Allgemeinen Sie ein Problem wie dieses aus einem statistischen Lern ​​Sicht betrachten könnte.Mit anderen Worten, Sie haben eine Reihe von Basisfunktionen (z. B. Splines), die auf eine bestimmte Weise parametrisiert sind, und dann verwenden Sie kleinste Quadrate oder eine andere Regressionstechnik, um optimale Koeffizienten zu finden. Ich bin zufällig Elements of Statistical Learning

0

Ich würde versuchen, die Spacefilling Curve Heuristik verwenden. Sortieren Sie die Punkte beispielsweise nach der Reihenfolge, in der sie von einer raumfüllenden Kurve besucht werden. Eine Lösung für Ihr Problem wäre eine Spline-Kurve durch die Punkte in dieser Reihenfolge. Um eine kürzere und glattere Kurve (aber einen größeren RMS-Abstand von den Punkten zur Kurve) zu erhalten, können Sie den Spline zwingen, nur jeden k-ten Punkt zu durchlaufen. Sie könnten die Kurve verbessern, wenn Sie nach dem Auswählen jedes k-ten Punktes nach einem kürzeren Hamilton-Pfad durch sie gesucht haben (wie das Problem des reisenden Verkäufers, aber für offene Pfade). Sie können auch die Spline-Knoten anpassen, um die RMS-Distanz zu verringern. Bei der Berechnung der RMS-Distanz würde ich die Reihenfolge der spacefilling-Kurve verwenden, um anzugeben, welcher Teil des Splines am ehesten einem gegebenen Punkt am nächsten kommt.