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
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.
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.
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..
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
@ utente85109 congratulazioni per una risposta così chiara – Nic
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