Kurvenanpassung in Python (mit Beispielen)

Von Fabian
Kategorie: Python
Lesezeit: 3 Minuten

Oft möchten Sie vielleicht eine Kurve an einen Datensatz in Python anpassen.

Kurvenpython

Das folgende Schritt-für-Schritt-Beispiel erklärt, wie man in Python Kurven mit der Funktion numpy.polyfit() an Daten anpasst und wie man bestimmt, welche Kurve am besten zu den Daten passt.

Schritt 1: Daten erstellen und visualisieren

Lassen Sie uns zuerst einen gefälschten Datensatz erstellen und dann ein Streudiagramm erstellen, um die Daten zu visualisieren:

import pandas as pd
import matplotlib.pyplot as plt

#Dataframe erstellen
df = pd.DataFrame({'x': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
                   'y': [3, 14, 23, 25, 23, 15, 9, 5, 9, 13, 17, 24, 32, 36, 46]})

#Streudiagramm von x vs. y erstellen
plt.scatter(df.x, df.y)

Kurvenpython

Schritt 2: Mehrere Kurven anpassen

Als Nächstes passen wir mehrere polynomiale Regressionsmodelle an die Daten an und visualisieren die Kurve jedes Modells im selben Diagramm:

import numpy as np

#Polynommodelle bis Grad 5 anpassen
model1 = np.poly1d(np.polyfit(df.x, df.y, 1))
model2 = np.poly1d(np.polyfit(df.x, df.y, 2))
model3 = np.poly1d(np.polyfit(df.x, df.y, 3))
model4 = np.poly1d(np.polyfit(df.x, df.y, 4))
model5 = np.poly1d(np.polyfit(df.x, df.y, 5))

#Streudiagramm erstellen
polyline = np.linspace(1, 15, 50)
plt.scatter(df.x, df.y)

#Hinzufügen angepasster Polynomlinien zum Streudiagramm 
plt.plot(polyline, model1(polyline), color='green')
plt.plot(polyline, model2(polyline), color='red')
plt.plot(polyline, model3(polyline), color='purple')
plt.plot(polyline, model4(polyline), color='blue')
plt.plot(polyline, model5(polyline), color='orange')
plt.show()

Kurvenpython

Um zu bestimmen, welche Kurve am besten zu den Daten passt, können wir uns das angepasste R-Quadrat jedes Modells ansehen.

Dieser Wert gibt uns den Prozentsatz der Variation in der Antwortvariablen an, der durch die Prädiktorvariablen im Modell erklärt werden kann, bereinigt um die Anzahl der Prädiktorvariablen.

#Funktion zur Berechnung des angepassten r-Quadrats definieren
def adjR(x, y, degree):
    results = {}
    coeffs = np.polyfit(x, y, degree)
    p = np.poly1d(coeffs)
    yhat = p(x)
    ybar = np.sum(y)/len(y)
    ssreg = np.sum((yhat-ybar)**2)
    sstot = np.sum((y - ybar)**2)
    results['r_squared'] = 1- (((1-(ssreg/sstot))*(len(y)-1))/(len(y)-degree-1))

    return results

#berechnetes angepasstes R-Quadrat jedes Modells
adjR(df.x, df.y, 1)
adjR(df.x, df.y, 2)
adjR(df.x, df.y, 3)
adjR(df.x, df.y, 4)
adjR(df.x, df.y, 5)

{'r_squared': 0.3144819}
{'r_squared': 0.5186706}
{'r_squared': 0.7842864}
{'r_squared': 0.9590276}
{'r_squared': 0.9549709}

Aus der Ausgabe können wir ersehen, dass das Modell mit dem höchsten angepassten R-Quadrat das Polynom vierten Grades ist, das ein angepasstes R-Quadrat von 0,959 hat.

Schritt 3: Visualisieren Sie die endgültige Kurve

Schließlich können wir mit der Kurve des Polynommodells vierten Grades ein Streudiagramm erstellen:

#Polynom vierten Grades anpassen
model4 = np.poly1d(np.polyfit(df.x, df.y, 4))

#Streudiagramm definieren
polyline = np.linspace(1, 15, 50)
plt.scatter(df.x, df.y)

#Hinzufügen einer angepassten Polynomkurve zum Streudiagramm
plt.plot(polyline, model4(polyline), '--', color='red')
plt.show()

Kurvenpython

Wir können die Gleichung für diese Zeile auch mit der Funktion print() erhalten:

print(model4)

          4          3         2
-0.01924 x + 0.7081 x - 8.365 x + 35.82 x - 26.52

Die Kurvengleichung lautet wie folgt:

y = -0,01924 x 4 + 0,7081 x 3 – 8,365 x 2 + 35,82 x – 26,52

Wir können diese Gleichung verwenden, um den Wert der Antwortvariablen basierend auf den Prädiktorvariablen im Modell vorherzusagen. Wenn zum Beispiel x = 4 ist, würden wir vorhersagen, dass y = 23,32:

y = -0,0192(4) 4 + 0,7081(4) 3 – 8,365(4) 2 + 35,82(4) – 26,52 = 23,32

Zusätzliche Ressourcen

Eine Einführung in die polynomiale Regression So führen Sie eine polynomiale Regression in Python durch

Statistik: Der Weg zur Datenanalyse

* Amazon Affiliate Link


Das könnte Sie auch interessieren: