Lineare Regression / Fehlerquadrate

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
ilonar
User
Beiträge: 13
Registriert: Donnerstag 13. Dezember 2018, 14:05

Moin!

ich bin noch totaler Python Anfänger, und habe nun das folgende Problem:
Ich habe aus Messdaten einen S-förmigen Plot erhalten.
In der Theorie sollte hier jedoch ein linearer Graph vorliegen.
Nun möchte ich den Fehler von der S-Kurve zu einem linearen Verlauf in % beschreiben.

Mein Ansatz wäre hierzu, dass ich den linearen Verlauf erst mal durch den ersten und letzten Messpunkt darstelle.
Nun fehlt mir allerdings der Ansatz, wie ich den Fehler zwischen diesen berechne...

Wäre toll wenn mir da jemand auf die Sprünge helfen könnte!
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ist denke ich nicht der richtige Ansatz, denn es gibt doch lineare Fittings, die den Fehler dann schon minimieren. Und ggf. liefern die schon gleich die Summe der Fehlerquadrate zurueck. Selbst wenn sie das nicht tun, ist das Problem "Abstand Punkt/Linie" ja recht einfach.

Allerdings ist mir unklar, was du da mit Prozenten willst. Das bedeutet ja immer ein Verhaeltnis - und was ist hier die zweite Groesse? Das einzige, das mir da einfallen wuerde, waere die Ausgangsdaten zu normalisieren (also zu erzwingen, dass die Kurve von 0..1 sowohl in Werte als auch Definitionsbereich geht), und dann kann man die Abweichung als Prozentzahl der Gesamtflaeche 1 sehen.
einfachTobi
User
Beiträge: 491
Registriert: Mittwoch 13. November 2019, 08:38

Bei einem linearen Verlauf kannst du dich doch nach dem Korrelationskoeffizienten richten. Scipy kann dir eine lineare Regression nach der Methode der kleinsten Fehlerquadrate erstellen. Hier ein Beispiel:

Code: Alles auswählen

import numpy as np
from scipy.stats import linregress
from matplotlib import pyplot as plt

werte_x = np.linspace(0, 80.0 * np.pi, 1000)
werte_y = np.sin(werte_x)

regression = linregress(werte_x, werte_y)

print(f'Korrelationskoeffizient R:\t{regression.rvalue}')
werte_y_regression = regression.slope * werte_x + regression.intercept
plt.plot(werte_x, werte_y)
plt.plot(werte_x, werte_y_regression)
plt.show()

ilonar
User
Beiträge: 13
Registriert: Donnerstag 13. Dezember 2018, 14:05

Sorry für die späte Antwort, war noch in ein anderes Problem vertieft.
Das hier hat auf jeden Fall sehr geholfen, danke dir!
einfachTobi hat geschrieben: Donnerstag 13. Februar 2020, 17:20 Bei einem linearen Verlauf kannst du dich doch nach dem Korrelationskoeffizienten richten. Scipy kann dir eine lineare Regression nach der Methode der kleinsten Fehlerquadrate erstellen. Hier ein Beispiel:

Code: Alles auswählen

import numpy as np
from scipy.stats import linregress
from matplotlib import pyplot as plt

werte_x = np.linspace(0, 80.0 * np.pi, 1000)
werte_y = np.sin(werte_x)

regression = linregress(werte_x, werte_y)

print(f'Korrelationskoeffizient R:\t{regression.rvalue}')
werte_y_regression = regression.slope * werte_x + regression.intercept
plt.plot(werte_x, werte_y)
plt.plot(werte_x, werte_y_regression)
plt.show()

Antworten