Erläuterung des Konzepts der Regressionsanalyse mit Python Teil 1 verwendet die Methode der kleinsten Quadrate, um die optimale gerade Linie für die Daten zu zeichnen. Ich erklärte, die Parameter einzustellen, um den Unterschied (Fehler) von zu minimieren. Als zusätzliche Ausgabe habe ich hier versucht, ein Diagramm zu zeichnen, indem ich animierte, wie sich die einzelnen Parameter ändern. Wenn Sie dies versuchen, erhalten Sie ein Bild.
Die "Summe der quadratischen Fehler" im Titel des Diagramms ist die Summe der Quadrate der Fehler. Die beste Position ist also dort, wo dies die kleinste ist.
Lassen Sie uns zunächst sehen, wie sich die Neigung ändert.
Ich verwende die Funktion matplotlib.animation.FuncAnimation, um die Animation mit matplotlib auszugeben. Lassen Sie uns die Funktion, die das Diagramm zeichnet, verlassen und den Wert, der durch Animation geändert werden soll, als Argument verwenden. Hier machen wir eine Animationsfunktion. Diese Animationsfunktion wird in der FuncAnimation-Funktion aufgerufen, und der in nframe von 0 bis frame festgelegte Wert wird in der Reihenfolge als Argument festgelegt und aufgerufen.
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 von mph/In h konvertieren
data[:,2] = map(lambda y: y * 0.3048, data[:,2]) #Konvertieren Sie von ft nach m
def animate(nframe):
plt.clf() # clear graph canvas
slope = 0.746606334842 * (float(nframe)/50) *2 #Die Steigung ändert sich, wenn sich der nframe des Arguments ändert
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")
Im Gegensatz zu zuvor bewegt sich der Abschnitt.
def animate(nframe):
plt.clf() # clear graph canvas
slope = 0.746606334842
intercept = -5.41583710407 + (float(nframe-25)/50) * 50 #Intercept ändert sich, wenn sich der nframe des Arguments ändert
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