[PYTHON] Führen Sie eine minimale quadratische Anpassung mit numpy durch.

Ü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

Führen Sie eine minimale quadratische Anpassung mit numpy durch.
Gleitender Durchschnitt mit Numpy
Modellbefestigung mit lmfit
Erste Schritte mit Numpy
Lernen Sie mit Chemo Informatics NumPy
Verkettung von Matrizen mit Numpy
Summencode mit Numpy
Führen Sie eine Regressionsanalyse mit NumPy durch
Erweitern Sie NumPy mit Rust
Lösen mit Ruby und Python AtCoder ARC 059 C Minimum-Quadrat-Methode
Ich habe GP mit Numpy geschrieben
CNN-Implementierung mit nur Numpy
Künstliche Datengenerierung mit Numpy
[Python] Berechnungsmethode mit numpy
Versuchen Sie die Matrixoperation mit NumPy
Animation der Diffusionsgleichung mit NumPy
Schuldenrückzahlungssimulation mit Numpy
SMO mit Python + NumPy implementiert
Kleben Sie die Saiten mit Numpy zusammen
Führen Sie logische Operationen mit Perceptron aus
[Python] Kurvenanpassung mit Polypolyse
Behandle numpy Arrays mit f2py
Verwenden Sie OpenBLAS mit numpy, scipy
Führen Sie mit PyTorch eine geschichtete Aufteilung durch
Implementierung der logistischen Regression mit NumPy
Minimum-Square-Methode und wahrscheinlichste Schätzmethode (Vergleich durch Modellanpassung)