Erläuterung des Konzepts der Regressionsanalyse mit Python Teil 2

Suche nach α- und β-Werten

Schnapp dir ein Bild mit einer Grafik

In [Teil 1] dieses Artikels (http://qiita.com/kenmatsu4/items/8b4e908d7c93d046110d) finden Sie den Mindestwert, wenn Sie jeweils $ \ alpha $ und $ \ beta $ mit einem bestimmten Wert festlegen. Um jedoch die Parameter $ \ alpha, \ beta $ der ungefähren Geraden (Regressionsgeraden) für diese Daten tatsächlich zu finden, suchen Sie nicht nach dem Fall, in dem $ \ alpha $ und $ \ beta $ gleichzeitig die Mindestwerte haben. Darf nicht sein.

Die in [Teil 1](http://qiita.com/kenmatsu4/items/8b4e908d7c93d046110d#Let's berechne) behandelte Funktion $ S $ kann als Funktion mit zwei Variablen von $ \ alpha $ und $ \ beta $ organisiert werden. Es sieht aus wie.


S(\alpha, \beta) = 
\left( \sum_i^n x_i^2 \right) \alpha^2 + n\beta^2
+ 2 \left( \sum_i^n x_i \right)\alpha \beta
- 2 \left( \sum_i^n x_i y_i \right)\alpha 
- 2 \left( \sum_i^n y_i \right)\beta
+ \sum_i^n y_i^2

Zusätzlich kann jeder Koeffizient aus den Daten erhalten werden (berechnet in [Teil 1](http://qiita.com/kenmatsu4/items/8b4e908d7c93d046110d#Let's berechne)).

n=50
\left( \sum_i^n x_i^2 \right) =34288
\left( \sum_i^n y_i^2 \right)=11604
\left( \sum_i^n x_iy_i \right)=18884
\left( \sum_i^n x_i \right)=1240
\left( \sum_i^n y_i \right)=655

Und wenn Sie dies ersetzen


S(\alpha, \beta) = 
34288 \alpha^2 + 50\beta^2
+ 2480\alpha \beta
- 37768\alpha 
- 1310 \beta
+ 11604

Es wird sein. Zeichnen wir einen Graphen dieser quadratischen Kurve. Die vertikale Achse $ S $ ist die Summe der Quadrate des Abstands (Fehlers) zwischen jedem Datenpunkt und der geraden Linie. Finden Sie den Ort, an dem dies der kleinste ist.


from mpl_toolkits.mplot3d.axes3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import cm

# set field
X = np.linspace(0.2, 1.3, 100)
Y = np.linspace(-25, 15, 100)

# set data
#sum(x**2)
sum_x_2 = 34288.2988
#sum(y**2)
sum_y_2 = 11603.8684051
#dot(x,y)
sum_xy = 18884.194896
#sum(x)
sum_x = 1239.7
#sum(y)
sum_y = 655.0152
X, Y = np.meshgrid(X, Y)
#S(α,β)=34288α^2 + 50β^2 + 2480αβ − 37768α − 1310β + 11604
S = (sum_x_2 * (X**2)) + (50 * (Y**2)) + (2 * sum_x * X * Y) + (-2 * sum_xy  * X) + (-2 * sum_y * Y) + sum_y_2

# prepare plot
fig = plt.figure(figsize=(18,6))
ax = fig.add_subplot(121, projection='3d', azim=60)
ax.set_xlabel("alpha")
ax.set_ylabel("beta")
ax.set_zlabel("S")

# draw 3D graph
surf = ax.plot_surface(X, Y, S, rstride=1, cstride=1, cmap=cm.coolwarm,
        linewidth=0, antialiased=False)

# draw contour
ax = fig.add_subplot(122)
plt.contour(X,Y,S,50)
ax.set_xlabel("alpha")
ax.set_ylabel("beta")

plt.show()

4dc53003-39ef-ef17-db45-7db46f1efdd9.png

Das 3D-Diagramm links ist etwas verwirrend, aber wenn man das Konturdiagramm rechts betrachtet, liegt der Mindestwert in der Mitte der Ellipse in etwa nahe an dem zuvor visuell vorhergesagten $ \ alpha = 0,74, \ beta = -5 $. Ich werde das machen!

Versuchen Sie, durch Berechnung zu lösen

Um es durch Berechnung zu lösen, teilen Sie $ S $ durch $ \ alpha $ bzw. $ \ beta $ und finden Sie den Wert, der zu 0 wird. Wenn $ S $ als Funktion von $ \ alpha $ bzw. $ \ beta $ geschrieben wird, ist dies wie folgt.


S(\alpha) = \left( \sum_i^n x_i^2 \right) \alpha^2
 + 2\left( \sum_i^n (x_i\beta - x_i y_i ) \right) \alpha 
 + n\beta^2 - 2\beta\sum_i^n y_i + \sum_i^n y_i^2

S(\beta) = n\beta^2
+ 2 \left( \sum_i^n (x_i\alpha - y_i) \right) \beta
+ \alpha^2\sum_i^n x_i^2 - 2\alpha \sum_i^n x_iy_i + \sum_i^n y_i^2

Da dies teilweise differenziert und auf 0 gesetzt ist,


\frac{\partial S}{\partial \alpha} = 0,

\frac{\partial S}{\partial \beta } = 0,

Löst die simultanen Gleichungen von. Mit anderen Worten


\frac{\partial S}{\partial \alpha} =  2\left(\sum_i^n x_i^2 \right) \alpha +  2\left( \sum_i^n x_i \right) \beta - 2\sum_i^n x_i y_i = 0

\frac{\partial S}{\partial \beta} = 2n\beta + 2\left( \sum_i^n x_i\right) \alpha - 2\sum_i^ny_i = 0

Wird geklärt werden. Ersetzen des aus den Daten erhaltenen Wertes

\frac{1}{2}\frac{\partial S}{\partial \alpha} =  34288 \alpha +  1240 \beta - 18884 = 0
\frac{1}{2}\frac{\partial S}{\partial \beta} = 50 \beta + 1240 \alpha - 655 = 0

Wenn Sie die simultanen Gleichungen mit Python lösen,

from sympy import *
a, b = symbols('a b')
init_printing()

# 34288α + 1240β − 18884 = 0
#    50β + 1240α −   655 = 0
solve([34288 * a + 1240 * b - 18884, 50* b + 1240 * a - 655], [a, b])

a --> 0.746606334842
b --> -5.41583710407

\alpha = 0.746606334842
\beta  = -5.41583710407

Sie können die Lösung wie bekommen

Wenn Sie die Werte von $ \ alpha und \ beta $ erneut einsetzen und eine gerade Linie im Streudiagramm zeichnen, ist das Ergebnis wie folgt.

import numpy as np
import matplotlib.pyplot as plt

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

fig = plt.figure(figsize=(10,6))
ax = fig.add_subplot(111)
ax.set_xlim(0,50)
ax.set_title("Stopping Distances of Cars with estimated regression line")
ax.set_xlabel("speed(km/h)")
ax.set_ylabel("distance(m)")
plt.scatter(data[:,1],data[:,2])

x = np.linspace(0,50,50)
y = 0.746606334842 * x -5.41583710407
plt.plot(x,y)

estimated.png

Dies ist die Regressionslinie: Lächeln:

Fortsetzung zur Erklärung mit Animation.

Recommended Posts

Erläuterung des Konzepts der Regressionsanalyse mit Python Teil 2
Erläuterung des Konzepts der Regressionsanalyse mit Python Teil 1
Erläuterung des Konzepts der Regressionsanalyse mit Python Extra 1
Schneiden Sie einen Teil der Zeichenfolge mit einem Python-Slice aus
Berechnen Sie den Regressionskoeffizienten der einfachen Regressionsanalyse mit Python
Überprüfen Sie das Konzept und die Terminologie der Regression
Zeitvariationsanalyse von Schwarzen Löchern mit Python
[Python] Lesen Sie den Quellcode von Flasche Teil 2
Verkürzung der Analysezeit von Openpose mithilfe von Sound
Versuchen Sie es mit dem Python-Webframework Tornado Part 1
[Python] Lesen Sie den Quellcode von Flasche Teil 1
Versuchen Sie es mit dem Sammlungsmodul (ChainMap) von python3
Versuchen Sie es mit dem Python-Webframework Tornado Part 2
[Python + OpenCV] Malen Sie den transparenten Teil des Bildes weiß
der Zen von Python
Grundlagen der Regressionsanalyse
Regressionsanalyse mit Python
Vorhersage der Zukunft der Bevölkerungsentwicklung in Numazu City durch Zeitreihen-Regressionsanalyse mit Prophet
[Python] [Word] [python-docx] Einfache Analyse von Diff-Daten mit Python
Python - Erläuterung und Zusammenfassung der Verwendung der 24 wichtigsten Pakete
Python-Implementierung der Bayes'schen linearen Regressionsklasse
Der Schmerz von gRPC mit Python. November 2019. (Persönliches Memo)
Studie aus Python Hour8: Verwenden von Paketen
Auf dem Weg zum Ruhestand von Python2
Statische Analyse von Python-Programmen
Python: Grundlagen der Verwendung von Scikit-Learn ①
Einfache Regressionsanalyse mit Python
Über die Funktionen von Python
Datenanalyse mit Python-Pandas
Python x GIS-Grundlagen (1)
Die Kraft der Pandas: Python
Denken Sie an die Analyseumgebung (Teil 1: Übersicht) * Stand Januar 2017
Anzeigen mit dem Python-Modul des mobilen Nifty Cloud-Backends
[Python] LASSO-Regression mit Gleichungsbeschränkung unter Verwendung der Multiplikatormethode
[Python] Ich habe versucht, Daten mit der API von Wikipedia zu sammeln
Python x GIS-Grundlagen (3)
Die Geschichte von Python und die Geschichte von NaN
Bilderfassung von Firefox mit Python
Erste einfache Regressionsanalyse in Python
Wrap (Teil der) AtCoder Library in Cython zur Verwendung in Python
[Python] Der Stolperstein des Imports
Erster Python 3 ~ Der Beginn der Wiederholung ~
[Python] Ich habe die Route des Taifuns mit Folium auf die Karte geschrieben
Python: Anwendung des überwachten Lernens (Rückkehr)
[Python] PCA-Scratch im Beispiel "Einführung in die multivariate Analysemethode"
Trübungsentfernung mit Python detailEnhanceFilter
Existenz aus Sicht von Python
[Python] LINE-Benachrichtigung über die neuesten Informationen mithilfe der automatischen Suche von Twitter
pyenv-change die Python-Version von virtualenv
[Python] Ich habe die Theorie und Implementierung der logistischen Regression gründlich erklärt
[In-Database Python Analysis-Lernprogramm mit SQL Server 2017] Schritt 6: Verwenden des Modells
[Python] Die potenzielle Feldplanung von Python Robotics verstehen
Bewerten Sie die Leistung eines einfachen Regressionsmodells mithilfe der LeaveOneOut-Schnittstellenvalidierung
Überprüfung der Grundlagen von Python (FizzBuzz)
Grundlagen von Python x GIS (Teil 2)