Beschreibt die Methode der kleinsten Quadrate. Berechnen Sie zuerst mit konkreten numerischen Werten, suchen Sie dann die allgemeine Formel und implementieren Sie sie schließlich in Python.
Die Regressionsanalyse ist eine Methode zur Ableitung der Formel, die am besten zu den Probendaten passt, und zur Vorhersage des numerischen Werts der neuen Daten, eine der typischen Methoden. Leiten Sie einen relationalen Ausdruck ab, der den Fehler zwischen den Beispieldaten und dem aus dem Ausdruck erhaltenen Wert minimiert.
Angenommen, Sie sagen das Wachstum von Hatsuka-Rettich voraus. Derzeit messen wir am 4. Tag, wie viele Zentimeter Blätter jeden Tag herauskommen.
Tag 1 | Tag 2 | Tag 3 | Tag 4 |
---|---|---|---|
Ich habe diese Daten grafisch dargestellt. Die $ x $ -Achse ist die Anzahl der Tage und die $ y $ -Achse ist die Blattlänge.
Die hypothetische Funktion sei eine lineare Funktion. Die Gleichung der linearen Funktion lautet
y = ax + b
Berechnen Sie also die Werte von $ a $ und $ b $, um eine schöne Funktion zu erhalten. Suchen Sie als Bild eine lineare Funktion, die so gut wie möglich zu den Daten passt, wie in der roten Grafik dargestellt.
Zunächst wird aus der hypothetischen Funktion $ y = ax + b $ der Wert von $ y $ am 0. bis 4. Tag (die Anzahl der Tage beträgt $ x $) berechnet und der Fehler aus den tatsächlichen Wachstumsdaten berechnet. (Tag 0 ist der Tag, an dem die Samen begraben werden)
Tage( |
Tag 0 | Tag 1 | Tag 2 | Tag 3 | Tag 4 |
---|---|---|---|---|---|
Aufzeichnung | |||||
Berechnet aus der Formel( |
|||||
Error( |
Der Fehler ist die Länge des rosa Teils in der folgenden Grafik.
Quadrieren Sie und addieren Sie dann, damit der Fehler nicht negativ ist. Unter der Annahme, dass der Gesamtfehler $ J $ ist, lautet die Berechnung wie folgt.
J = b^2+((a+b)-0.3)^2+((2a+b)-1.9)^2+((3a+b)-2.8)^2+((4a+b)-4.3)^2\\
\\
=30a^2+20ab-59.4a+5b^2-18.6b+30.03
Finden Sie $ a $ und $ b $, die dieses $ J $ minimieren, und Sie sind fertig.
Wenn $ J $ teilweise als Funktion von $ a $ als 0 differenziert wird und $ J $ teilweise als Funktion von $ b $ als 0 differenziert wird und zwei gleichzeitige Gleichungen gelöst werden, ist $ J $ das Minimum. Naru $ a $ und $ b $ werden berechnet.
Hier finden Sie den Mindestwert einer zweidimensionalen Funktion mit zwei Variablen. http://mathtrain.jp/quadratic
Die obige Formel unterscheidet sich teilweise durch $ a $ ($ \ frac {∂J} {∂a} $), und die untere Formel unterscheidet sich teilweise durch $ b $ ($ \ frac {∂J} {∂b). } $).
\left\{
\begin{array}{ll}
0 = 60a+20b-59.4 \\
0 = 20a+10b-18.6
\end{array}
\right.
Wenn Sie die simultanen Gleichungen lösen,
\left\{
\begin{array}{ll}
a = 1.11 \\
b=-0.36
\end{array}
\right.
Nebenan
y = 1.11x - 0.36
Ich konnte die Funktion ableiten. Nach dem Zeichnen mit einem Diagramm
Es fühlt sich sehr gut an !!
radish_plot.py
import matplotlib.pyplot as plt
import numpy as np
# data set
plt.plot([0,0.3,1.9,2.8,4.3], "bo")
plt.title("radish growth")
plt.xlabel("X:days")
plt.ylabel("Y:length")
plt.xlim([0,4])
plt.xticks(np.arange(1,5,1))
plt.ylim([0,4])
plt.yticks(np.arange(0,6,1))
# Graph
x = np.arange(0,10,0.01)
y = 1.11*x -0.36
plt.plot(x,y,"r-")
plt.show()
Im konkreten Beispiel ist die hypothetische Funktion eine lineare Funktion, kann jedoch für eine quadratische Funktion oder eine kubische Funktion besser geeignet sein. Vielleicht ist es normalerweise eine komplexere Beziehung.
Wenn Sie das Beispiel des Hatsuka-Rettichs an eine quadratische Funktion anpassen,
Und dies kann als eine bessere Formel angesehen werden. Das Wachstum von Hatsuka-Rettich kann nicht nur durch die Anzahl der Tage, sondern auch durch die Sonnenzeit und die Wassermenge beeinflusst werden.
Betrachten wir daher ein konkretes Beispiel, indem wir es in eine allgemeine Formel umwandeln.
Wenn es $ x_ {1} $ gibt, bestimmen $ x_ {2} $ Faktoren die Länge des Blattes, wie z. B. die Anzahl der Tage, die Menge an Sonnenschein, die Menge an Wasser, die gegeben werden soll, und $ \ cdots $$ n $. , $ x_ {3} $ $ \ cdots $ $ x_ {n} $. Der Koeffizient von $ x_ {n} $ sei $ \ theta_ {n} $.
Die Funktion und Hypothesenfunktion, die Sie endgültig ableiten möchten, kann durch die folgende Formel ausgedrückt werden. ($ X_ {1} $ bedeutet nicht $ x $ im Quadrat, sondern eine Funktion, die von $ x $ abhängt. Es kann hilfreich sein, sich den letzten Python-Code anzusehen.)
h_{\theta}(x) = \theta_{0}x_{0} + \theta_{1}x_{1} + \theta_{2}x_{2} +\cdots + \theta_{n}x_{n}
$ \ Theta_ {0} $ ist der $ b $ Teil des konkreten Beispiels und wird als $ x_ {0} = 1 $ betrachtet. Plötzlich kam $ h_ {\ theta} (x) $ heraus, aber $ y $ im konkreten Beispiel ist die Länge des Blattes.
Die obige hypothetische Funktion kann wie folgt mit der konkreten Beispielfunktion $ y = 1.11x --0.36 $ verknüpft werden.
Angenommen, es gibt mehrere Beispieldaten für diese hypothetische Funktion, und die Daten lauten wie folgt.
(1 behoben) |
(Tage) |
(Sonnenlichtzeit h) |
(Wassergehalt ml) |
(Blattlänge cm) |
|
---|---|---|---|---|---|
Die Daten in der Spalte $ j $ der Zeile $ i $ können als $ x_ {j} ^ {(i)} $, $ y ^ {(i)} $ dargestellt werden. Wenn sie zugeordnet sind, sieht es so aus. Es ist eine Form. Es sieht aus wie ein Exponent, zeigt aber nur die Daten an.
(1 behoben) |
(Tage) |
(Sonnenlichtzeit h) |
(Wassergehalt ml) |
(Blattlänge cm) |
|
---|---|---|---|---|---|
Wenn die Daten in der ersten Spalte $ h_ {\ theta} (x) $ zugewiesen werden, werden sie als $ h_ {\ theta} (x ^ {(1)}) $ ausgedrückt.
Auf diese Weise kann der Gesamtfehler aus der hypothetischen Funktion wie folgt umgeschrieben werden. $ m $ ist die Anzahl der Datensätze. Im Beispiel der obigen Tabelle ist es 4.
J(\theta_{0},\theta_{1}, \cdots,\theta_{n})= \sum_{i=1}^{m} (h_{\theta}(x^{(i)})-y^{(i)})^2
Der Gesamtfehler $ J (\ theta_ {0}, \ theta_ {1}, \ cdots, \ theta_ {n}) $ wird minimiert $ \ theta_ {0}, \ theta_ {1}, \ cdots, \ theta_ Das Ziel ist es, eine Menge von {n} $ abzuleiten.
Von hier aus ersetzen wir es durch eine Matrix. Eine Matrix ist ein leistungsstarkes Element, mit dem Daten gleichzeitig berechnet werden können.
Um die hypothetische Funktion $ h_ {\ theta} (x) $ als Matrix darzustellen, müssen zunächst $ \ theta_ {0} $, $ \ theta_ {1} $, $ \ cdots $ $ \ theta_ {n} $, $ X_ {0} $, $ x_ {1} $, $ \ cdots $ $ x_ {n} $ wird durch eine Matrix dargestellt.
\theta=\begin{bmatrix}
\theta_{0} \\
\theta_{1} \\
\vdots\\
\theta_{n}
\end{bmatrix}
,
x=\begin{bmatrix}
x_{0} \\
x_{1} \\
\vdots\\
x_{n}
\end{bmatrix}
Auf diese Weise platziert, kann $ h_ {\ theta} (x) $ durch das Produkt der transponierten Matrix von $ \ theta $ und der Matrix $ x $ dargestellt werden.
h_{\theta}(x)= \theta^T x\\
Die Translokation und das Stapeln der Matrix finden Sie hier. http://www.sist.ac.jp/~kanakubo/research/hosoku/trans_gyoretu.html
Der Datensatz $ x ^ {(i)} $ in der Spalte $ i $ wird durch eine Matrix dargestellt, und die Matrix $ X $ bei allen Datensätzen wird durch die transponierte Matrix jeder Spalte dargestellt. $ y ^ {(i)} $ wird auch durch eine Matrix dargestellt.
x^{(i)}=\begin{bmatrix}
x_{0}^{(i)} \\
x_{1}^{(i)} \\
\vdots\\
x_{n}^{(i)}
\end{bmatrix}
,
X=\begin{bmatrix}
(x^{(1)})^T \\
(x^{(2)})^T \\
\vdots\\
(x^{(m)})^T
\end{bmatrix}
=
\begin{bmatrix}
x_{0}^{(1)} & x_{1}^{(1)} & \cdots & x_{n}^{(1)} \\
x_{0}^{(2)} & x_{1}^{(2)} & \cdots & x_{n}^{(2)} \\
\vdots & \vdots & & \vdots\\
x_{0}^{(m)} & x_{1}^{(m)} & \cdots & x_{n}^{(m)} \\
\end{bmatrix}
,
y=\begin{bmatrix}
y^{(1)} \\
y^{(2)} \\
\vdots\\
y^{(m)}
\end{bmatrix}
Es sieht verwirrend aus, aber ich habe gerade die obige Tabelle in eine Matrix konvertiert.
Und die Geschichte bläst sofort weg.
Auf diese Weise kann $ \ theta $, das den Gesamtfehler $ J (\ theta) $ minimiert, durch Lösen der folgenden Matrixgleichung erhalten werden.
\theta =
(X^tX)^{-1}X^ty
Hier erfahren Sie, warum diese Formel verwendet wird. http://mathtrain.jp/leastsquarematrix
Außerdem wird $ X ^ {-1} $ als inverse Matrix von $ X $ bezeichnet (siehe hier). http://mathtrain.jp/inversematrix
Fügen Sie den Datensatz in diese Formel ein, um $ \ theta $ zu finden, und geben Sie ihn in $ \ theta_ {0}, \ theta_ {1}, \ cdots, \ theta_ {n} $ von $ h (\ theta) $ ein, um das Minimum zu erhalten Die Funktionsformel (Modellfunktion) nach der Quadratmethode ist vervollständigt.
Ich habe diese Methode der kleinsten Quadrate in Python geschrieben. Sie werden in nur einer Zeile nach $ \ theta $ gefragt! !!
Erstens ist der Datensatz. Der Funktion $ y = 3 + 2 \ cos (x) + \ frac {1} {2} x $ wird eine Zufallszahl hinzugefügt, um einen Fehler zu erzeugen.
linalg_lstsq.py
x = arange(-3, 10, 0.1)
y = 3 + 2 * np.cos(x) + (1/2) * x + np.random.normal(0.0, 1.0, len(x))
In der allgemeinen Formel ist $ x_ {1} $ $ \ cos (x) $ und $ x_ {2} $ ist $ x $. Wenn die zu berechnenden Koeffizienten so berechnet werden können, dass $ \ theta_ {0} $ $ 3 $ ist, ist $ \ theta_ {1} $ $ 2 $ und $ \ theta_ {2} $ liegt nahe bei $ \ frac {1} {2} $. Es ist in Ordnung.
Erstellen Sie eine Matrix $ X $ mit allen Datensätzen.
linalg_lstsq.py
n = 3
X = np.zeros((len(x), n), float)
X[:,0] = 1
X[:,1] = np.cos(x)
X[:,2] = x
Der Ausdruck für $ \ theta $ ist diese eine Zeile, die linalg.lstsq in der Numpy-Bibliothek verwendet.
linalg_lstsq.py
(theta, residuals, rank, s) = linalg.lstsq(X, y)
https://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.lstsq.html
Infolgedessen wurde es so.
linalg_lstsq.py
import numpy as np
import matplotlib.pyplot as plt
# data-set
x = np.arange(-3, 10, 0.1)
y = 3 + 2 * np.cos(x) + (1/2) * x + np.random.normal(0.0, 1.0, len(x))
n = 3
X = np.zeros((len(x), n), float)
X[:,0] = 1
X[:,1] = np.cos(x)
X[:,2] = x
# Least square method
(theta, residuals, rank, s) = np.linalg.lstsq(X, y)
# data-set plot
plt.plot(x, y, 'b.')
# h(theta) plot
plt.plot(x, theta[0] + theta[1] * X[:,1] + theta[2] * X[:,2], 'r-')
plt.title("linalg.lstsq")
plt.xlabel("X-axis")
plt.ylabel("Y-axis")
plt.show()
print('θ[0]: %s' % theta[0])
print('θ[1]: %s' % theta[1])
print('θ[2]: %s' % theta[2])
Ich konnte einen ziemlich genauen Wert erhalten, und selbst wenn Sie sich die Grafik ansehen, passt sie! !!
Da ich gerade angefangen habe, maschinelles Lernen zu studieren, lerne ich die Standardalgorithmen und -ideen. Ich kann nichts ganz Neues schreiben, aber ich hoffe, es hilft jemandem.