schnell & effizient-least-squares-fit-Algorithmus in C?
Bin ich versucht zu implementieren eine lineare least-squares-fit auf 2 arrays von Daten: Zeit vs amplitude. Die einzige Technik, die ich kenne so weit ist, testen Sie alle möglichen m-und b-Punkte (y = m*x+b) und dann finden Sie heraus, welche Kombination passt meiner Daten am besten so, dass es die am wenigsten Fehler. Allerdings denke ich, dass die Iteration von so vielen Kombinationen ist manchmal nutzlos, weil es tests alles. Gibt es irgendwelche Techniken, um den Prozess zu beschleunigen, die ich nicht kennen? Danke.
InformationsquelleAutor der Frage O_O | 2011-02-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es effiziente algorithmen für die least-squares-fitting; siehe Wikipedia für details. Es gibt auch Bibliotheken, die die Implementierung von algorithmen für Sie, wahrscheinlich effizienter als eine naive Implementierung würde das tun; die GNU Scientific Library ist ein Beispiel, aber es gibt andere, die unter milderen Lizenzen.
InformationsquelleAutor der Antwort Jeremiah Willcock
Versuchen, diesen code. Es passt
y = mx + b
zu Ihrem (x,y) - Daten.Argumente zu
linreg
sindDer Rückgabewert ist bei Erfolg 0 !=0 bei Fehler.
Hier ist der code
Beispiel
Können Sie laufen dieses Beispiel online.
Hier ist die Ausgabe
Hier ist die Excel-plot und lineare fit (für die Verifikation).
Alle Werte Stimmen exakt mit dem C-code oben (Hinweis, C-code gibt
r
während Excel zurückR**2
).InformationsquelleAutor der Antwort Mark Lakata
Vom Numerical Recipes: The Art of Scientific Computing in (15.2) Einbau-Daten an eine Gerade Linie:
Lineare Regression:
Den unten struct führt die genannten Berechnungen:
wo
struct Gamma
:sowie
stuct Gauleg18
:und schließlich fuinction
Gamma::invgamp()
:InformationsquelleAutor der Antwort Ziezi
Blick auf Abschnitt 1 der dieses Papier. Dieser Abschnitt bringt eine 2D-lineare regression als eine matrix-Multiplikation übung. So lange, wie Sie Ihre Daten brav, diese Technik soll ermöglichen, Sie zu entwickeln, die eine schnelle least-squares-fit.
Abhängig von der Größe Ihrer Daten, könnte es sich lohnen, algebraisch reduzieren Sie die matrix-Multiplikation zur einfachen Satz von Gleichungen, wodurch die Notwendigkeit zu schreiben matmult () - Funktion. (Seien Sie gewarnt, dies ist völlig unpraktisch für mehr als 4 oder 5 Daten-Punkte!)
InformationsquelleAutor der Antwort Throwback1986
Dem ursprünglichen Beispiel oben die gut für mich gearbeitet mit Steigung und offset, aber ich hatte eine harte Zeit mit der corr coef. Vielleicht habe ich nicht meine Klammer arbeiten die gleichen wie die angenommene Vorrang? Trotzdem, mit etwas Hilfe von anderen web-Seiten habe ich endlich die Werte, die mit der linearen Trendlinie in Excel. Dachte, ich würde teilen meine code mit Mark Lakata den Variablen-Namen. Hoffe, das hilft.
InformationsquelleAutor der Antwort Jack
Die Schnellste, effizienteste Weg zur Lösung von least-squares -, soweit ich informiert bin, ist zu subtrahieren (die Steigung)/(2. Ordnung Steigung) von dem parameter-Vektor. (2. Ordnung Steigung = D. H. die Diagonale des hessischen.)
Hier ist die intuition:
Lassen Sie uns sagen, Sie wollen zu optimieren-least-squares über einen einzigen parameter. Dies ist äquivalent zur Suche nach dem Scheitelpunkt einer Parabel. Dann, für beliebige parameter initial, x0der Scheitel der Verlust der Funktion liegt bei x0 - f(1) /f(2). Das ist, weil die Zugabe - f(1) /f(2) für x immer null heraus, die Ableitung, f(1).
Seite Hinweis: die Umsetzung dieser in Tensorflow, die Lösung schien im w0 - f(1) /f(2) /(Anzahl der GEWICHTE), aber ich bin mir nicht sicher, ob das aufgrund Tensorflow oder ob es durch etwas anderes..
InformationsquelleAutor der Antwort Default picture