[PYTHON] Effectuez un ajustement carré minimum avec numpy.

À propos de y expliqué par une seule variable x utilisant la bibliothèque arithmétique matricielle de Python numpy Je voudrais faire un ajustement carré minimum.

Tout d'abord, utilisez numpy pour dessiner un graphe cubique de manière probabiliste.

Dessiner un graphique


#Importation de module
import numpy as np
import matplotlib.pyplot as plt

#Variable explicative(1 dimension)
x = np.arange(-3,7,0.5)
#Variable de réponse(Il s'agissait d'une fonction tridimensionnelle des variables explicatives et était générée aléatoirement sur la base de la distribution normale.
y = 10*np.random.rand()+x * np.random.rand() + 
    2*np.random.rand()*x**2  +x**3

#dessin
plt.scatter(x,y)
plt.show()

生データグラフ

Dans la méthode des moindres carrés, la norme L2 des données et la valeur prédite Interprétez-le comme une erreur et trouvez le coefficient de la droite de régression pour le minimiser. Si les données que vous souhaitez prédire sont y et que la droite de régression est $ p $, l'erreur sera

Error = \sum_{i=1}^{N}(y_i - p_i)

Ce sera. Le but de la régression des moindres carrés est de minimiser cette erreur.

De plus, $ p_i $ est exprimé par l'équation d'ordre n comme suit.

Expression linéaire\\
p_i = a_1 x + a_0 \\
Formule quadratique\\
p_i = a_2 x^2 + a_1 x + a_0 \\
Formule du troisième ordre\\
p_i = a_3 x^3 +  a_2 x^2 + a_1 x + a_0 \\
équation d'ordre n\\
p_i = a_n x^n + ...  a_2 x^2 + a_1 x + a_0\\

Cette fois, j'aimerais utiliser la fonction polyfit de numpy pour trouver le coefficient $ A = (a_0, a_1, .. a_N) $ de l'équation après ajustement. Trouvez le coefficient de l'équation de régression avec la fonction polyfit. Appliquez ensuite le coefficient à l'équation d'ordre n Trouvez l'équation de régression, mais si cela se complique Il est également pratique d'utiliser la fonction polyfit1d.

Ajustement et dessin de l'équation d'ordre n-ième obtenu par celui-ci



#Expression linéaire
coef_1 = np.polyfit(x,y,1) #coefficient
y_pred_1 = coef_1[0]*x+ coef_1[1] #Fonction d'adaptation

#Formule quadratique
coef_2 = np.polyfit(x,y,2) 
y_pred_2 = coef_2[0]*x**2+ coef_2[1]*x + coef_2[2] 

#Formule du troisième ordre
coef_3 = np.polyfit(x,y,3) 
y_pred_3 = np.poly1d(coef_3)(x) #np.poly1d,Coef obtenu_3 est automatiquement appliqué à la formule.

#dessin

plt.scatter(x,y,label="raw_data") #données originales
plt.plot(x,y_pred_1,label="d=1") #Expression linéaire
plt.plot(x,y_pred_2,label="d=2") #Formule quadratique
plt.plot(x,y_pred_3,label = "d=3") #Formule du troisième ordre
plt.legend(loc="upper left")
plt.title("least square fitting")
plt.show()

フィッティング後のグラフ

Cette fois, l'ajustement par la formule cubique semble être bon. Plus l'ordre est élevé, plus l'erreur a tendance à être petite, Surentraînement qui ne dépend que du jeu de données résultant Soyons prudents.

Recommended Posts

Effectuez un ajustement carré minimum avec numpy.
Moyenne mobile avec numpy
Montage du modèle avec lmfit
Premiers pas avec Numpy
Apprenez avec Chemo Informatics NumPy
Concaténation de matrices avec Numpy
Code de bourdonnement avec numpy
Effectuer une analyse de régression avec NumPy
Étendre NumPy avec Rust
Résolution avec Ruby et Python AtCoder ARC 059 C Méthode du carré minimum
J'ai écrit GP avec numpy
Implémentation CNN avec juste numpy
Génération artificielle de données avec numpy
[Python] Méthode de calcul avec numpy
Essayez l'opération matricielle avec NumPy
Animation de l'équation de diffusion avec NumPy
Simulation de remboursement de dette avec numpy
Implémentation de SMO avec Python + NumPy
Coller les chaînes avec Numpy
Effectuer des opérations logiques à l'aide de Perceptron
[Python] Ajustement de courbe avec polypoly
Gérez les tableaux numpy avec f2py
Utilisez OpenBLAS avec numpy, scipy
Effectuer un fractionnement stratifié avec PyTorch
Implémentation de la régression logistique avec NumPy
Méthode du carré minimum et méthode d'estimation la plus probable (comparaison par ajustement du modèle)