À 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