Regressionsgerade - Schnittpunktfindung
-
Danke otze vorerst einmal für deine Bemühungen!
Aber wie sieht so eine Regressionsrechnugn in 3D aus?????
Bin über jede Hilfe sehr dankbar, es ist überaus dringend!
-
oh, dich hab ich ganz uebersehen, sorry.
-
Dieser Thread wurde von Moderator/in rapso aus dem Forum Spiele-/Grafikprogrammierung in das Forum Mathematik und Physik verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Ich habe jetzt folgendes gefunden: Ausgleichsgerade für den 2D Fall mit Summe der der kleinsten Fehlerquadrate ...
Minimierung kleinste Fehlerquadrate: http://img136.imageshack.us/img136/4015/minh.jpg
Parameter A und B: http://img196.imageshack.us/img196/7772/38794482.jpg
x,y sind gemessene Wertepaare. A und B sind Schätzwerte.
Ist es das was ich brauche, um eine Gerade durch die Punkte zu finden? Wie sieht es in 3D für (x,y,z) aus??
Bitte helft mir, ich will nicht durchfallen!
Danke!
-
Im mehrdimensionalen bestimmst du die Regressionsgerade so:
du hast eine Menge von Punkten p_1,...,p_n
Bilde zuerst den Mittelpunkt: m = (p_1 + ... + p_n)/n
Bilde nun die Matrix A = [ (p_1 - m) (p_2 - m) ... (p_n - m) ] (die Differenzvektoren bilden die Spalten)
Und jetzt bildest du die Kovarianzmatrix K = A*A^t (A^t ist die transponierte Matrix zu A)
Nun berechnest du die Eigenwerte von K und wählst den betragsmäßig größten aus, den nennen wir e. Nun bestimmst du den normierten Eigenvektor zu e, d.h. der hat die Länge 1 und wir nennen ihn v.Die Ausgleichsgerade ist dann x = e*v + m oder in gewohnter Form g(x) = x*v + m (x ist eine einfache reelle Zahl, ggf. ist dir die Schreibweise g(t) = t*v + m geläufiger).
-
Mathematikker schrieb:
Im mehrdimensionalen bestimmst du die Regressionsgerade so:
du hast eine Menge von Punkten p_1,...,p_n
Bilde zuerst den Mittelpunkt: m = (p_1 + ... + p_n)/n
Bilde nun die Matrix A = [ (p_1 - m) (p_2 - m) ... (p_n - m) ] (die Differenzvektoren bilden die Spalten)
Und jetzt bildest du die Kovarianzmatrix K = A*A^t (A^t ist die transponierte Matrix zu A)
Nun berechnest du die Eigenwerte von K und wählst den betragsmäßig größten aus, den nennen wir e. Nun bestimmst du den normierten Eigenvektor zu e, d.h. der hat die Länge 1 und wir nennen ihn v.Die Ausgleichsgerade ist dann x = e*v + m oder in gewohnter Form g(x) = x*v + m (x ist eine einfache reelle Zahl, ggf. ist dir die Schreibweise g(t) = t*v + m geläufiger).
Beachte bitte dass bei der ersten Schreibweise der Geraden x ein Vektor ist (im drei-dimensionalen Raum ein drei-dimensionaler Vektor) und in der zweiten Schreibweise eine reelle Zahl.
-
Mathematikker schrieb:
Im mehrdimensionalen bestimmst du die Regressionsgerade so:
du hast eine Menge von Punkten p_1,...,p_n
Bilde zuerst den Mittelpunkt: m = (p_1 + ... + p_n)/n
Bilde nun die Matrix A = [ (p_1 - m) (p_2 - m) ... (p_n - m) ] (die Differenzvektoren bilden die Spalten)
Und jetzt bildest du die Kovarianzmatrix K = A*A^t (A^t ist die transponierte Matrix zu A)
Nun berechnest du die Eigenwerte von K und wählst den betragsmäßig größten aus, den nennen wir e. Nun bestimmst du den normierten Eigenvektor zu e, d.h. der hat die Länge 1 und wir nennen ihn v.Die Ausgleichsgerade ist dann x = e*v + m oder in gewohnter Form g(x) = x*v + m (x ist eine einfache reelle Zahl, ggf. ist dir die Schreibweise g(t) = t*v + m geläufiger).
Hallo Mathematiker!
Vielen Dank erstmal für deine Hilfe. Ganz blick ich da aber nicht durch.
Die Kovarianzmatrix hab ich mal. Dann wirds problematisch.Kann ich ab der Kovarianzmatrix mit SVD weitermachen? Denn K = U*S*V^t hätte ich.
Danke!
Adamn
-
Habe folgendes gefunden:
// =============== SVD TEST ======================================== int nobs = 9; // number of observations int npred = 2; // number of predictor values double y[] = { 2, 3, 1 }; double x1[] = { 3, 6, 5 }; double x2[] = { 1, 5, 10 }; cout << "\n\nTest 5 - singular value\n"; // Singular value decomposition method // load data - 1s into col 1 of matrix int npred1 = npred+1; NEWMAT::Matrix X(nobs,npred1); NEWMAT::ColumnVector Y(nobs); X.Column(1) = 1.0; X.Column(2) << x1; X.Column(3) << x2; Y << y; // do SVD NEWMAT::Matrix U, V; NEWMAT::DiagonalMatrix D; SVD(X,D,U,V); // X = U * D * V.t() NEWMAT::ColumnVector Fitted = U.t() * Y; NEWMAT::ColumnVector A = V * ( D.i() * Fitted ); Fitted = U * Fitted; NEWMAT::ColumnVector Residual = Y - Fitted; double ResVar = Residual.SumSquare() / (nobs-npred1); // get variances of estimates D << V * (D * D).i() * V.t(); // Get diagonals of Hat matrix NEWMAT::DiagonalMatrix Hat; Hat << U * U.t(); // print out answers cout << "\nEstimates and their standard errors\n\n"; NEWMAT::ColumnVector SE(npred1); for (int i=1; i<=npred1; i++) SE(i) = sqrt(D(i)*ResVar); cout << setw(11) << setprecision(5) << (A | SE) << endl; cout << "\nObservations, fitted value, residual value, hat value\n"; cout << setw(9) << setprecision(3) << (X.Columns(2,3) | Y | Fitted | Residual | Hat.AsColumn()); cout << "\n\n"; }
Mit Datensatz:
Real y[] = { 8.3, 5.5, 8.0, 8.5, 5.7, 4.4, 6.3, 7.9, 9.1 }; Real x1[] = { 2.4, 1.8, 2.4, 3.0, 2.0, 1.2, 2.0, 2.7, 3.6 }; Real x2[] = { 1.7, 0.9, 1.6, 1.9, 0.5, 0.6, 1.1, 1.0, 0.5 };
Spuckt das Programm folgendes aus:
Test 5 - singular value Estimates and their standard errors 1.39166 0.53188 1.98310 0.20932 0.95221 0.27731 Observations, fitted value, residual value, hat value 2.400 1.700 8.300 7.770 0.530 0.280 1.800 0.900 5.500 5.818 -0.318 0.190 2.400 1.600 8.000 7.675 0.325 0.229 3.000 1.900 8.500 9.150 -0.650 0.446 2.000 0.500 5.700 5.834 -0.134 0.271 1.200 0.600 4.400 4.343 0.057 0.480 2.000 1.100 6.300 6.405 -0.105 0.143 2.700 1.000 7.900 7.698 0.202 0.153 3.600 0.500 9.100 9.007 0.093 0.808
Datensatz dieses Programmes ist y[], x1[], x2[] ... sind das meine x,y,z Werte? Sprich berechnet diese Funktion eine 3d-Regressionsgerade?
Ich bitte um eure Hilfe, vielen Dank!
Adamn
-
Ich wiederhole mich gerne noch einmal: Durch die Nebenbedingung eines gemeinsamen Schnittpunktes ist dies keine Regressionsaufgabe mehr. Deswegen ist es ziemlich sinnfrei, mit Techniken zur Regression an dieses Problem ran zu gehen.
-
otze schrieb:
Ich wiederhole mich gerne noch einmal: Durch die Nebenbedingung eines gemeinsamen Schnittpunktes ist dies keine Regressionsaufgabe mehr. Deswegen ist es ziemlich sinnfrei, mit Techniken zur Regression an dieses Problem ran zu gehen.
Du hast geschrieben: "berechne den Punkt, der der beste Kandidat für einen gemeinsamen Schnittpunkt ist". Das werde ich auch machen müssen.
Wärst du doch bitte so nett u. gibst mir eine genaue Anweisung, wie ich dann eine Gerade für eine Punktwolke finden soll!? Ich kann mit deiner früheren Ausführung nicht viel anfangen.
Ich verbringe schon die ganzen letzten Tage mit googeln auf der Suche nach einer Lösung, aber irgendwie steh ich auf der Leitung. Wenn du mir helfen könntest u. ich eine Möglichkeit hätte dich zu entschädigen, ich würde es sofort machen!!!