lineare Regression in Numpy

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Jetzt sagst Du zwar immer noch nicht, wo der Hase im Pfeffer ist, aber ich will mal raten:
smith0815 hat geschrieben:Wenn ich zu Beginn 10 Werte festlege, hat jeder Punkt 10 Werte.
Heißt das, es handelt sich um eine 10-fach-Bestimmung eines Wertes? Dann wäre das schon mal viel, viel einfacher! (edit: Und nicht 10D.)

Schau mal unter numpy.polynomial.Polyfit.fit(): Die Funktion kann ein beliebiges Polynom fitten. Der Vorteil dieser Funktion: Sie akzeptiert Gewichte. Du könntest - ob das zulässig ist, solltest Du selber wissen - Deine Werte mitteln und den reziproken Standardfehler (oder ein Vielfaches) als Gewicht für den Fit nutzen.

Von Interesse ist vielleicht auch ein älterer Thread von mir: http://www.python-forum.de/viewtopic.php?f=11&t=8363 (inzwischen veraltet, aber es gibt Dir vielleicht einen Eindruck wie man sonst herangehen könnte.)

Wenn Du dann die Koeffizienten kennst, ist die Evaluation ganz einfach. Aber das überlasse ich erstmal Dir zum üben ;-)

Ist es das was Du brauchst? Falls nicht, werde ich nicht ohne Kenntnis des physikalischen Hintergrundes weiter antworten - denn den kennen wir immer noch nicht. Und ohne Wissen über die Natur der Daten kann man wirklich schlecht entscheiden, wie die beste Herangehensweise ist.

Gruß,
Christian
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

smith0815 hat geschrieben:Wie lautet die (beste Schätzung) Regressionsfunktion (z.B. 3. Grades).
Es gibt keine universelle „beste“ Schätzfunktion. Die hängt immer vom Problem ab und ich verstehe dein Problem immer noch nicht, das ist alles zu wage was du so erzählst.
Wenn das doch nicht so einfach ist, werde ich mir dann doch eine Uni-Beratung suchen.
Tu das.
smith0815
User
Beiträge: 99
Registriert: Dienstag 13. April 2010, 11:08

d.h.

es gibt keinen Numpy oder Scipy Befehl, der mir aus einer Punktewolke eine Regressionsfunktion errechnet?
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Doch. Nur ist unsere Forumskristallkugel kaputt, so dass wir nicht sehen können, was genau Dein Problem ist. Und da Du nicht in der Lage bist (oder willens bist) es zu beschreiben oder Bezug auf bereits gepostete Vorschläge und Fragen zu nehmen, können wir nicht helfen.
smith0815
User
Beiträge: 99
Registriert: Dienstag 13. April 2010, 11:08

Ich hab jetzt mal nachgelesen.

die einfachste Funktion lautet:
y=w1x + w0

wobei x die genannten 10 Messwerte, y der eine Sollausgabewert und w1 bzw. w0 die gesuchten Parameterwerte sind.

Gibt es also eine Numpy oder Scipy-Funktion, bei der ich x,y und den Grad der Funktion angebe und (in diesem einfachen Fall)
w1 und w0 als Ausgabewert erhalte?
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Also:
1. Hat das nichts, aber auch gar nichts mit Zehn- oder Mehrdimensionalität zu tun.
2. Nochmal: Ich habe da Etwas verlinkt. Ist es das was Du brauchst? Wenn nein, warum nicht?
smith0815
User
Beiträge: 99
Registriert: Dienstag 13. April 2010, 11:08

wenn ich das einfache Beispiel um meine Werte erweitere, müsste die Funktion etwa so aussehen
yi = w0 + w1x1i + w2x2i +...+ w10x10i+ ei

oder?

in der ols.py die du angegeben hast verstehe ich nicht jeden angegebenen statistischen Wert, aber wenn die "coefficient"s dem w0 - wi entsprechen geht es schon in die richtige Richtung, nur wo stelle ich ein, welcher Ordnung die Funktion sein soll (x^1, x^2, ...)?
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Das war nicht der einzige Link (aber zugegeben: Die andere Anmerkung ist kein Link im engeren Sinne - lesen darfst Du sie trotzdem).

Da Du nicht sagst, was der Hintergrund ist, können wir auch nicht sagen, was die Lösung ist. OLS ist ein bißchen was Anderes als numpy.polynomial.Polyfit.fit() (wo Du den Grad direkt angeben kannst). In beiden Fällen, kannst Du die Zahl der Variablen, bzw. den Grad der Funktion angeben - Du solltest allerdings die zugehörige Doku lesen (bei ols.py ist es im Kopf des Moduls und der verlinkten Seite).

Bei Deiner Gleichung verstehe ich schon wieder nicht was Du genau sagen willst. In Zusammenhang mit dem Rest des Threads wäre es angebracht die Notation etwas penibler zu gestalten.

Wie wäre es, Du holtest Dir mal ein Mathebuch und versuchst das Problem erst in natürlicher, dann mathematischer Sprache zu formulieren und suchst Dir 'dann' in Python die beste Lösung? Sorry, das soll nicht hochnäsig sein, auch wenn es das womöglich so klingt. Aber hier ist der Punkt gekommen wo wir beide längst aneinander vorbei reden. Vielleicht fällt ja sonst jemandem hier im Forum was Besseres ein. Ich vermute nach wie vor, daß Die Lösung für Dein Problem das rel. einfache Fitten eines Polynoms ist, aber dazu bräuchten wir halt eine gemeinsame Sprache.

Gruß,
Christian

PS Auf der verlinkten OLS-Seite steht im Übrigen auch ein Link zu numpy.linalg.lstsq(). Vielleicht ist das verständlicher für Dich?
smith0815
User
Beiträge: 99
Registriert: Dienstag 13. April 2010, 11:08

OK werde ich mir anschauen und mich auch etwas mehr einlesen.
Danke
Antworten