Explication of the concept of regression analysis using Python Part 1 utilise la méthode des moindres carrés pour tracer la ligne droite optimale pour les données, et la ligne droite et les données J'ai expliqué de définir les paramètres pour minimiser la différence (erreur) de. Ici, comme édition supplémentaire, j'ai essayé de dessiner un graphique en animant la façon dont chaque paramètre change. Si vous essayez de cette façon, vous obtiendrez une image.
La "somme des erreurs carrées" dans le titre du graphique est la somme des carrés des erreurs, donc la meilleure position est là où c'est la plus petite.
Voyons d'abord comment l'inclinaison change.
J'utilise la fonction matplotlib.animation.FuncAnimation pour générer l'animation avec matplotlib. Sortons la fonction qui dessine le graphique et prenons la valeur à modifier par animation comme argument. Ici, nous créons une fonction animée. Cette fonction d'animation est appelée dans la fonction FuncAnimation et la valeur définie dans nframe de 0 à frames est définie dans l'ordre en tant qu'argument et appelée.
import numpy as np
import matplotlib.pyplot as plt
from moviepy.editor import *
from matplotlib import animation as ani
data= np.loadtxt('cars.csv',delimiter=',',skiprows=1)
data[:,1] = map(lambda x: x * 1.61, data[:,1]) #km de mph/Convertir en h
data[:,2] = map(lambda y: y * 0.3048, data[:,2]) #Convertir de ft en m
def animate(nframe):
plt.clf() # clear graph canvas
slope = 0.746606334842 * (float(nframe)/50) *2 #La pente change à mesure que la nframe de l'argument change
intercept = - 5.41583710407
x = np.linspace(0,50,50)
y = slope * x + intercept
plt.ylim(-10,80)
plt.xlim(0,50)
plt.xlabel("speed(km/h)")
plt.ylabel("distance(m)")
plt.scatter(data[:,1],data[:,2])
# draw errors
se = 0
i = 0
for d in data:
plt.plot([d[1],d[1]],[d[2],d[1]*slope+intercept],"k")
se += (y[i] - d[2]) ** 2
i += 1
plt.title("Stopping Distances of Cars (slope=%.3f, sum of square errors=%5d)" % (slope, se))
# based line: y = 0.74x -5
plt.plot(x,y)
fig = plt.figure(figsize=(10,6))
anim = ani.FuncAnimation(fig, animate, frames=50, blit=True)
anim.save('regression_anim.mp4', fps=13)
clip = VideoFileClip("regression_anim.mp4")
clip.write_gif("regression_anim.gif")
Contrairement à avant, la section se déplace.
def animate(nframe):
plt.clf() # clear graph canvas
slope = 0.746606334842
intercept = -5.41583710407 + (float(nframe-25)/50) * 50 #Intercepter les modifications lorsque la nframe de l'argument change
x = np.linspace(0,50,50)
y = slope * x + intercept
plt.ylim(-30,80)
plt.xlim(0,50)
plt.xlabel("speed(km/h)")
plt.ylabel("distance(m)")
plt.scatter(data[:,1],data[:,2])
# draw errors
se = 0
i = 0
for d in data:
plt.plot([d[1],d[1]],[d[2],d[1]*slope+intercept],"k")
se += (y[i] - d[2]) ** 2
i += 1
plt.title("Stopping Distances of Cars (slope=%.3f, sum of square errors=%5d)" % (slope, se))
# based line: y = 0.74x -5
plt.plot(x,y)
fig = plt.figure(figsize=(10,6))
anim = ani.FuncAnimation(fig, animate, frames=50, blit=True)
anim.save('regression_anim_i.mp4', fps=13)
clip = VideoFileClip("regression_anim_i.mp4")
clip.write_gif("regression_anim_i.gif")
Recommended Posts