10.2 Lineare Regression mit polyfit und polyval#

Lernziele#

Lernziele

  • Sie können mit polyfit die Koeffizienten einer Regressionsgerade zu gegebenen Messwerten bestimmen.

  • Sie können mit polyval aus den berechneten Koeffizienten die Regressionsgerade bestimmen.

Koeffizienten der Regressionsgerade berechnen mit polyfit#

Python bzw. das Modul NumPy unterstützt die Suche nach der Regressionspolynomen mit der Funktion polyfit(). Eine detaillierte Bechreibung finden Sie ìn der NumPy-Dokumentation (polyfit). Aufgerufen wird polyfit mit

p = polyfit(x, y, grad)

Dabei sind x und y die die Messdaten und grad ist ein Integer mit dem Polynomgrad. Für eine lineare Funktion setzen wir grad = 1. Das Ergebnis ist eine Liste (genauer gesagt ein Tupel). Die Liste enthält die Koeffizienten des Polynoms in absteigender Reihenfolge.

Ist der Polynomgrad 1, dann ist p[0] die Steigung der linearen Regressionsgerade und der y-Achsenabschnitt ist in p[1] gespeichert:

\[f(x) = p[0] \cdot x + p[1].\]

Um die Anwendung von polyfit() zu zeigen, werden zunächst die folgenden sieben Messpunkte visualisiert:

import matplotlib.pyplot as plt

x = [-1, 0, 1, 2,  3, 4, 5]
y = [-2.52,  0.85,   3.21,  7.19,  8.93, 12.89, 15.40]

plt.figure()
plt.scatter(x,y)
plt.xlabel('Ursache')
plt.ylabel('Wirkung')
plt.title('Künstliche Messdaten mit linearem Zusammenhang');
../_images/78d75849c46e769235183ab93a012fa0c5b2da114c9570c63a9391fa269ddf23.png

Als nächstes verwenden wir polyfit, um die Koeffizienten einer Regressionsgerade von Python berechnen zu lassen.

import numpy as np

koeffizienten = np.polyfit(x,y, 1)
print(koeffizienten)
[2.98428571 0.59571429]

Die gefundene Regressionsgerade lautet also

\[f(x) = 2.98\cdot x + 0.59.\]

Mini-Übung

Lassen Sie zusätzlich zu den Messwerten die gefundene Regressionsgerade in der Farbe rot visualisieren.

# Hier Ihr Code

Lösung

# Wertetabelle für Regressionsgerade
x_modell = np.linspace(-1, 5)
y_modell = 2.98 * x_modell + 0.59

# Visualisierung Messwerte und Regressionsgerade
plt.figure()
plt.scatter(x,y)
plt.plot(x_modell, y_modell, color='red')
plt.xlabel('Ursache')
plt.ylabel('Wirkung')
plt.title('Künstliche Messdaten mit linearem Zusammenhang');

Regressionsgerade aus Koeffizienten mit polyval aufstellen#

Eine weitere Funktion aus dem NumPy-Modul ist die Funktion polyval(). Die polyval-Funktion wird dazu benutzt, ein Polynom aufzustellen. Der Aufruf der polyval-Funktion sieht prinzipiell so aus:

y = np.polyval(koeffizienten, x)

Dabei ist koeffizienten die Liste mit den Koeffizienten des Polynoms, die z.B. aus der Berechnung polyfit()stammen. Die Koeffizienten sind dabei wieder absteigend sortiert. Zuerst kommt der Koeffizient der höchsten Potenz. x ist eine Liste von Zahlen oder ein NumPy-Array, für die das Polynom ausgewertet werden soll.

Wenn wir beispielhaft die Regressionsgerade des Beispiels an der Stelle \(x = 2.5\) auswerten wollen, so schreiben wir

y = np.polyval(koeffizienten, 2.5)
print(f'Die Regressionsgerade an der Stelle x = 2.5 ist {y:.2f}.')
Die Regressionsgerade an der Stelle x = 2.5 ist 8.06.

Mini-Übung

Lassen Sie die Regressionsgerade mit polyval aus den mit polyfit für das Intervall \([-1,5]\) auswerten und visualisieren Sie die Messwerte (in blau) zusammen mit der Regressionsgeraden (in rot).

# Hier Ihr Code

Lösung

# Wertetabelle für Regressionsgerade
x_modell = np.linspace(-1, 5)
y_modell = np.polyval(koeffizienten, x_modell)

# Visualisierung Messwerte und Regressionsgerade
plt.figure()
plt.scatter(x,y)
plt.plot(x_modell, y_modell, color='red')
plt.xlabel('Ursache')
plt.ylabel('Wirkung')
plt.title('Künstliche Messdaten mit linearem Zusammenhang');