2010-02-28 3 views
8

Ich habe ziemlich viel Zeit damit verbracht, einen einfachen Weg zu finden - im Idealfall existiert dort irgendwo eine magische Bibliothek, die meine 3D-Datenpunkte aufnimmt und 2 Punkte auf der besten Fitlinie zurückgibt entweder orthogonale Regression oder kleinste Quadrate und geben auch den Fehler der angepassten Linie zurück. Gibt es so etwas und wenn ja, wo?Passen Sie eine 3D-Linie an 3D-Punktdaten in Java an?

Antwort

10

Dies ist einfach genug zu tun, aber um es selbst zu schreiben, benötigen Sie einen Eigenwertlöser oder eine Singulärwertzerlegung. Erstellen Sie die nx3-Matrix A Ihrer (x-xbar, y-ybar, z-zbar) -Daten als Spalten. Speichere diese Spalte für später, ich werde es V0 = [xbar, ybar, zbar] nennen.

Nun berechnet die Eigenwerte und Eigenvektoren von A * = A, das heißt die 3x3-Matrix von A Transponierte von A. multipliziert gebildet

Wenn diese Daten auf einer Linie in R^3 liegt, dann einer von denen Eigenwerte sind signifikant größer als die anderen beiden Eigenwerte. Wenn dies nicht zutrifft, wird die orthogonale Regressionslinie nicht gut geschätzt.

Man nehme den Eigenvektor, der dem größten Eigenwert von A '* A zugeordnet ist. Dann, wenn V die entsprechende Eigenvektor ist, wird die orthogonale Regressionslinie definiert als

V (t) = V0 + t * V

Jeder Punkt auf dieser Linie kann durch einen Wert des Parameters t gegeben werden.

Alternativ die Einzelwertzerlegung von A berechnen, und das Recht singulären Vektor nehmen, die zu dem größten Einzelwert von A.

In jedem Fall entspricht, wenn Sie die Fehler für die Datenpunkte berechnen wollen, dies wäre definiert als einfach der orthogonale Abstand zu der fraglichen Linie.

+0

@ user85109 congrats für so eine klare Antwort – Nic

+0

Für einen formellen Nachweis der vorgestellten Methode kann man sich den hier vorgestellten Link ansehen: http://mathhelpforum.com/advanced-statistics/181810-3d-line-best- fit.html – Nic

1

Google für "java lineare kleinste Quadrate Regression Bibliothek" und Sie sollten ein paar Optionen finden. Einer ist Drej. Ich habe das selbst nicht benutzt.

EDIT - Ich bin nicht zuversichtlich, dass dies die Frage beantwortet - ich weiß nicht, ob 3D-Daten unterstützt werden.

1

Es ist einfach genug, um es zu tun, wenn Sie den Trick kennen: http://www.scribd.com/doc/21983425/Least-Squares-Fit

Weitere Dimensionen mehr Koeffizienten bedeutet, aber sie sind leicht genug, um in hinzufügen Die Ideen sind alle gleich..

+1

Falsch. Was zählt, ist der Kodimension, und wenn Sie eine Linie in 3D haben, ist die Kodimension 2 (für eine Linie in 2D ist es 1). Daher bricht die gesamte Logik, die üblicherweise zur Herleitung der kleinsten Quadrate verwendet wird (wie in Ihrem Link), ziemlich vollständig aus, fürchte ich. Siehe die Antwort von Hackschnitzel unten. – AVB

Verwandte Themen