Da ich im vorherigen Artikel die Gesamtklassifikation des maschinellen Lernens zusammengefasst habe, werde ich jede konkrete Implementierung aus dieser Zeit beschreiben.
Klicken Sie hier für den vorherigen Artikel https://qiita.com/U__ki/items/4ae54da6cadec8a84d1b
Das Thema ist diesmal "Wie groß ist der Fernseher, der zur Größe des Raums passt?" Vielleicht haben einige Leute beschlossen, vom Frühling zu ziehen. Für diejenigen, die sich fragen, wie sie die Größe des Fernsehgeräts bestimmen können, das der Größe des neuen Raums entspricht, möchte ich die Größe des Fernsehgeräts, das der Größe des Raums entspricht, mithilfe einer einfachen Regressionsanalyse ermitteln.
Ich beschloss, simulierte Daten mit Pandas zu erstellen und sie dann anhand dieser Daten zu analysieren.
Unter Bezugnahme auf diesen Artikel (* https://www.olive-hitomawashi.com/lifestyle/2019/10/post-294.html*) lauten die empfohlenen Daten zur TV-Größe, die der Raumgröße entsprechen, wie folgt. tat. (Wenn Sie dies haben, brauchen Sie diesen Artikel nicht)
[TV-Größe] 6. Potenz: 24 Zoll 8 Tatami-Matten: 32 Zoll 10 Tatami-Matten: 40 Zoll 12 Tatami-Matten: 50 Zoll
Geben Sie diese Daten als CSV-Datei mit Pandas aus.
create_csv.py
#CSV-Erstellung Pandas
import pandas as pd
df=pd.DataFrame([
["6", "24"],
["8", "32"],
["10", "40"],
["12", "50"]],
columns=["room_size", "tv_inch"]
)
df.to_csv("room_tv.csv", index=False)
df ist eine Abkürzung für Data Flame. Durch Setzen von index = False wird auch die Indexnummer in csv entfernt. Dadurch wird eine neue Datei mit dem Namen room_tv.csv im selben Ordner erstellt.
Wenn die folgenden Dateien im Ordner erstellt werden, ist dies erfolgreich.
room_tv.csv
room_size,tv_inch
6,24
8,32
10,40
12,50
Jetzt haben Sie die CSV-Datei, um diese Zeit zu verwenden.
Als nächstes werden wir dieses Mal die einfache Hauptregressionsanalyse durchführen.
Die einfache Regressionsanalyse besteht aus den folgenden drei Komponenten. ** ・ Modellentscheidung ** ** - Auswertungsfunktion einstellen ** ** - Minimieren Sie die Bewertungsfunktion (bestimmen Sie die Steigung) **
Laden Sie zuerst csv.
main.py
df=pd.read_csv("room_tv.csv")
Wenn Sie ein Jupyter-Notizbuch verwenden, werden die zuvor erstellten Daten wie unten gezeigt angezeigt.
Als nächstes schauen wir uns diesmal die Daten an. Matplotlib ist leicht zu verstehen und mit Python zu veranschaulichen.
main.py
x=df["room_size"]
y=df["tv_inch"]
import matplotlib.pyplot as plt
plt.scatter(x,y)
plt.show()
Hier ist x die Größe des Raums und y die Größe des Fernsehgeräts.
Ich habe Daten, die einfach zu handhaben scheinen. Diesmal scheint es, dass eine lineare Funktion damit umgehen kann (** Modellbestimmung **).
Derzeit können Sie diese Daten so verwenden, wie sie sind, aber wenn Sie diese Daten verwenden y=ax+b Dann erscheinen zwei Variablen, a und b. Die Berechnung kann so wie sie ist durchgeführt werden, aber es wird eine ** Datenmittelung ** durchgeführt, um eine Variable zu reduzieren.
** Datenmittelung ** Nehmen Sie den Durchschnittswert aller Daten und verwenden Sie den von den einzelnen Daten abgezogenen Wert. Mit Pandas ist es extrem einfach, den Durchschnittswert der Daten zu ermitteln oder für alle Daten zu subtrahieren. Auf diese Weise kann nur y = ax berücksichtigt werden.
main.py
#Ermitteln Sie den Durchschnittswert der Daten
xm=x.mean()
ym=y.mean()
#Zentralisiert durch Subtrahieren des Durchschnittswerts von allen Daten
xc=x-xm
yc=y-ym
#Redisplay
plt.scatter(xc,yc)
plt.show()
Mit dem obigen Code wurde die folgende Abbildung angezeigt.
Es scheint, dass sich gegenüber dem vorherigen Diagramm nicht viel ändert, aber da Abschnitt (b) nicht berücksichtigt werden muss, werden zukünftige Berechnungen viel einfacher sein.
\hat{y}=ax
Sie müssen nur ein etwa finden.
Ich möchte die Formel so bestimmen, dass der vorhergesagte Wert (durch maschinelles Lernen) im Vergleich zum gemessenen Wert der kleinste ist. Die Sache dafür heißt die Bestimmung der Bewertungsfunktion. Es hat die gleiche Bedeutung wie "Verlustfunktion" in der Datenwissenschaft. Obwohl die Erklärung hier verringert wird, wird der quadratische Fehler bestätigt und der kleinere bestimmt. Verwendung von y als Messwert und y ^ (Waihat) als Vorhersagewert
\begin{align}
L&=(y_1-\hat{y_1})^2+(y_2-\hat{y_2})^2+....+(y_N-\hat{y_1N})^2\\
&=\sum_{n=1}^{N}(y_n-\hat{y_n})^2
\end{align}
Kann vertreten werden durch. Zu diesem Zeitpunkt wird * L * als Bewertungsfunktion bezeichnet.
Die Bewertungsfunktion erscheint als quadratische Funktion, wie wir zuvor gesehen haben. Daher ist der Punkt, an dem die Neigung 0 ist, das Minimum, und der Punkt, an dem der quadratische Fehler klein ist, wird erhalten.
Wenn Sie den Punkt finden möchten, an dem die Steigung der quadratischen Gleichung 0 ist, was im Bereich der Mathematik der High School liegt, können Sie den Punkt unterscheiden und finden, an dem "= 0" ist.
Weil die Variable a ist
\frac{\partial}{\partial a}(L)=0
Fragen. Ersetzen Sie die obige Formel und erweitern Sie sie
\begin{align}
L&=\sum_{n=1}^{N}y_n^2-2(\sum_{n=1}^{N}x_ny_n)a+(\sum_{n=1}^{N}x_n^2)a^2\\
&=c_o-2c_1a+c_2a^2
\end{align}
Ersatz
\frac{\partial}{\partial a}(c_o-2c_1a+c_2a^2)=0\\
\\
a=\frac{\sum_{n=1}^{N}x_ny_n}{\sum_{n=1}^{N}x_n^2}
Schreiben wir einen Code dazu.
main.py
#Finden Sie den Wert jedes Quadrats aus der Formel
xx=xc*xc
xy=xc*yc
#Frage nach einer
a=xy.sum()/xx.sum()
#Versuchen Sie zu zeichnen
plt.scatter(xc,yc, label="y")
plt.plot(x,a*x, label="y_hat", color="green")
plt.legend()
plt.show()
Die Grafik ist unten dargestellt.
Da x im Bereich des Messwertes bestimmt wird, ist das Liniensegment kurz, es wurde jedoch a erhalten.
Aus dem Obigen wurde die Neigung a erhalten. Da es jedoch zentralisiert ist, wenn es tatsächlich angewendet wird
Vergessen Sie nicht, x (x-Wert) -x (Durchschnittswert) mit a und schließlich y (Durchschnittswert) zu multiplizieren.
Abschließend werde ich eine Zusammenfassung davon schreiben.
main.py
import pandas as pd
import matplotlib.pyplot as plt
df=pd.read_csv("room_tv.csv")
x=df["room_size"]
y=df["tv_inch"]
#Mittelwertbildung
xm=x.mean()
ym=y.mean()
#Zentralisierung
xc=x-xm
yc=y-ym
xx=xc*xc
xy=xc*yc
a=xy.sum()/xx.sum()
plt.scatter(xc,yc, label="y")
plt.plot(x,a*x, label="y_hat", color="green")
plt.legend()
plt.show()
Bonus
main.py
#Datenübersicht
df.describe()
Dadurch werden die Daten wie folgt analysiert. Nützlich für die Verarbeitung komplexerer und großer Datenmengen.
Der Code war kurz, aber sehr aussagekräftig. Das nächste Mal möchte ich eine multiple Regressionsanalyse durchführen. Als zukünftige Entwicklungen werde ich nicht nur programmierbezogene Elemente wie Codierung und Fehlerbehandlung veröffentlichen, sondern auch solche, die sich auf die Neurowissenschaften beziehen.
Recommended Posts