2010-02-28 8 views
8

He pasado una buena cantidad de tiempo tratando de encontrar una forma sencilla de hacerlo; idealmente, existe una biblioteca mágica en alguna parte que tomará mi conjunto de puntos de datos 3D y devolverá 2 puntos en la línea de mejor ajuste usando ya sea regresión ortogonal o mínimos cuadrados y también devuelve el error de la línea ajustada. Existe tal cosa, y si es así, ¿dónde?¿Adaptar una línea 3D a datos de puntos 3D en Java?

Respuesta

10

Esto es bastante fácil de hacer, pero para escribirlo usted mismo necesitará un solucionador de valor propio o una descomposición de valor singular. Cree la matriz nx3 A, de sus datos (x-xbar, y-ybar, z-zbar) como columnas. Guarde esos medios de columna para más adelante, lo llamaré V0 = [xbar, ybar, zbar].

Ahora, calcular los valores propios y los vectores propios de A '* A, es decir, la matriz de 3x3 formado de una transposición multiplicado por A.

Si estos datos se encuentra en una línea en R^3, entonces uno de los los valores propios serán significativamente más grandes que los otros dos valores propios. Si esto no es cierto, entonces la línea de regresión ortogonal no será estimada correctamente.

Tome el vector propio asociado con el valor propio más grande de A '* A. Entonces, si V es el vector propio correspondiente, la línea de regresión ortogonal se define como

V (t) = V0 + t * V

Cualquier punto en que la línea puede ser dada por un valor del parámetro t.

Alternativamente, calcular la descomposición en valores singulares de A, y tomar el vector singular derecho que corresponde al mayor valor singular de A.

En cualquier caso, si desea calcular los errores de los puntos de datos, esto se definiría simplemente como la distancia ortogonal a la línea en cuestión.

+0

@ user85109 felicitaciones por una respuesta tan clara – Nic

+0

Para obtener una prueba formal del método presentado, se puede consultar el enlace que se presenta aquí: http://mathhelpforum.com/advanced-statistics/181810-3d-line-best- fit.html – Nic

1

Google para "biblioteca de regresión lineal de mínimos cuadrados de Java" y debe encontrar algunas opciones. Uno es Drej. Aunque no he usado esto yo mismo.

EDIT - No estoy seguro de que esto responda la pregunta - No sé si se admiten datos 3D.

1

Es bastante fácil hacerlo si se conoce el truco: http://www.scribd.com/doc/21983425/Least-Squares-Fit

más dimensiones significa más coeficientes, pero son lo suficientemente fácil de añadir en las ideas son todos iguales..

+1

Mal. Lo que importa es la codificación, y cuando tienes una línea en 3D, la codificación es 2 (para una línea en 2D es 1). Por lo tanto, me temo que toda la lógica comúnmente utilizada para derivar el ajuste de mínimos cuadrados (como en su enlace) se rompe completamente. Consulte la respuesta de las astillas de madera a continuación. – AVB

Cuestiones relacionadas