2010-02-28 14 views
8

Ho passato una discreta quantità di tempo a cercare di dare la caccia a un modo semplice di fare questo - idealmente, una biblioteca magica esiste là fuori da qualche parte che prenderà il mio set di punti di dati 3D e restituire 2 punti sulla retta di regressione utilizzando Regressione ortogonale o minimi quadrati e restituisce anche l'errore della linea adattata. Esiste una cosa del genere, e se sì, dove?Adatta una linea 3D ai dati dei punti 3D in Java?

risposta

10

Questo è abbastanza facile da fare, ma per scrivere voi stessi avrete bisogno di un risolutore autovalore o un decomposizione in valori singolari. Crea la matrice nx3 A, dei tuoi dati (x-xbar, y-ybar, z-zbar) come colonne. Salva i mezzi di colonna per dopo, lo chiamerò V0 = [xbar, ybar, zbar].

Ora, calcolare gli autovalori e autovettori di A '* A, cioè, la matrice 3x3 formata da A transpose applica A.

Se questi dati si trova su una linea in R^3, allora uno di quelli gli autovalori saranno significativamente più grandi degli altri due autovalori. Se ciò non è vero, la linea di regressione ortogonale non sarà ben valutata.

Prendere l'autovettore associato il più grande autovalore di A '* A. Poi, se V è corrispondente autovettore, la linea di regressione ortogonale è definito come

V (t) = V0 + t * V

Qualsiasi punto su quella linea può essere data da un valore del parametro t.

In alternativa, calcolare il valore di decomposizione singolare di una, e prendere la giusta vettore singolare che corrisponde al valore più grande singolare A.

In entrambi i casi, se si vuole calcolare gli errori per i punti dati, questo sarebbe definito semplicemente come la distanza ortogonale della linea in questione.

+0

@ utente85109 congratulazioni per una risposta così chiara – Nic

+0

Per una dimostrazione formale del metodo presentato, si può dare un'occhiata al link presentato qui: http://mathhelpforum.com/advanced-statistics/181810-3d-line- best- fit.html – Nic

1

Google per "biblioteca dei minimi quadrati di regressione java lineare" e si dovrebbe trovare alcune opzioni. Uno è Drej. Non l'ho usato da solo, però.

EDIT - io non sono sicuro che questo risponde alla domanda - non so se i dati 3D è supportato.

1

E 'abbastanza facile da fare se si conosce il trucco: http://www.scribd.com/doc/21983425/Least-Squares-Fit

più dimensioni significa più coefficienti, ma sono abbastanza facili da aggiungere a Le idee sono tutti uguali..

+1

sbagliato. Ciò che conta è la codimensione, e quando si ha una linea in 3D, la codimensione è 2 (per una linea in 2D è 1). Quindi, tutta la logica comunemente usata per ricavare minimi quadrati (come nel tuo link) si rompe piuttosto completamente, temo. Vedi risposta cippato di seguito. – AVB