Über y erklärt durch eine einzelne Variable x unter Verwendung der Matrix-Arithmetikbibliothek numpy von Python Ich möchte eine minimale quadratische Anpassung durchführen.
Verwenden Sie zunächst numpy, um einen kubischen Graphen probabilistisch zu zeichnen.
Zeichnen eines Diagramms
#Modulimport
import numpy as np
import matplotlib.pyplot as plt
#Erklärende Variable(1 Dimension)
x = np.arange(-3,7,0.5)
#Antwortvariable(Es war eine dreidimensionale Funktion der erklärenden Variablen und wurde zufällig basierend auf der Normalverteilung erzeugt.
y = 10*np.random.rand()+x * np.random.rand() +
2*np.random.rand()*x**2 +x**3
#Zeichnung
plt.scatter(x,y)
plt.show()
Bei der Methode der kleinsten Quadrate die L2-Norm der Daten und der vorhergesagte Wert Interpretieren Sie es als Fehler und finden Sie den Koeffizienten der Regressionslinie, um ihn zu minimieren. Wenn die Daten, die Sie vorhersagen möchten, y sind und die Regressionslinie $ p $ ist, ist der Fehler
Error = \sum_{i=1}^{N}(y_i - p_i)
Es wird sein. Die Minimierung dieses Fehlers ist das Ziel der Regression im kleinsten Quadrat.
Außerdem wird $ p_i $ durch die Gleichung n-ter Ordnung wie folgt ausgedrückt.
Linearer Ausdruck\\
p_i = a_1 x + a_0 \\
Quadratische Formel\\
p_i = a_2 x^2 + a_1 x + a_0 \\
Formel dritter Ordnung\\
p_i = a_3 x^3 + a_2 x^2 + a_1 x + a_0 \\
Gleichung n-ter Ordnung\\
p_i = a_n x^n + ... a_2 x^2 + a_1 x + a_0\\
Dieses Mal möchte ich die Polyfit-Funktion von numpy verwenden, um den Koeffizienten $ A = (a_0, a_1, .. a_N) $ der Gleichung nach dem Anpassen zu ermitteln. Finden Sie den Koeffizienten der Regressionsgleichung mit der Polyfit-Funktion. Wenden Sie dann den Koeffizienten auf die Gleichung n-ter Ordnung an Finden Sie die Regressionsgleichung, aber wenn es kompliziert wird Es ist auch praktisch, die Funktion polyfit1d zu verwenden.
Anpassen und Zeichnen der dadurch erhaltenen Gleichung n-ter Ordnung
#Linearer Ausdruck
coef_1 = np.polyfit(x,y,1) #Koeffizient
y_pred_1 = coef_1[0]*x+ coef_1[1] #Anpassungsfunktion
#Quadratische Formel
coef_2 = np.polyfit(x,y,2)
y_pred_2 = coef_2[0]*x**2+ coef_2[1]*x + coef_2[2]
#Formel dritter Ordnung
coef_3 = np.polyfit(x,y,3)
y_pred_3 = np.poly1d(coef_3)(x) #np.poly1d,Erhaltener Koeffizient coef_3 wird automatisch auf die Formel angewendet.
#Zeichnung
plt.scatter(x,y,label="raw_data") #Originale Daten
plt.plot(x,y_pred_1,label="d=1") #Linearer Ausdruck
plt.plot(x,y_pred_2,label="d=2") #Quadratische Formel
plt.plot(x,y_pred_3,label = "d=3") #Formel dritter Ordnung
plt.legend(loc="upper left")
plt.title("least square fitting")
plt.show()
Diesmal scheint die Anpassung nach der kubischen Formel gut zu sein. Je höher die Ordnung, desto kleiner ist der Fehler. Übertraining, das nur vom resultierenden Datensatz abhängt Seien wir vorsichtig.
Recommended Posts