Die Texte in diesem Artikel wurden teilweise mit Hilfe künstlicher Intelligenz erarbeitet und von uns korrigiert und überarbeitet. Für die Generierung wurden folgende Dienste verwendet:
Wie wir maschinelles Lernen bei der Erstellung unserer Artikel einsetzenEinordnung
Neuronale Netze sind leistungsstarke Lernmodelle aus dem Machine Learning, die selbst komplexe Muster aus Daten lernen können. Sie werden häufig für verschiedene Klassifikationsaufgaben eingesetzt, z.B. zur Identifikation von Objekten in Bildern oder zur Vorhersage von Stimmungen in Texten. Aber was ist, wenn wir neuronale Netze für Regressionsaufgaben verwenden wollen, z.B. für die Schätzung von Hauspreisen oder für Umsatzprognosen von Unternehmen? Wie können wir neuronale Netze so anpassen, dass sie mit kontinuierlichen Ausgaben statt mit diskreten Ausgaben umgehen können? In diesem Blogeintrag werden wir uns mit diesen Fragen beschäftigen und einige der Optionen und Techniken vorstellen, die für die Verwendung von neuronalen Netzen für Regressionsaufgaben zur Verfügung stehen.
Regression als Aufgabe
Grundsätzlich geht es bei der Regression darum, eine Funktion möglichst genau durch eine andere Funktion zu approximieren. Dies kann verschiedene Gründe haben, z.B. kann die Auswertung der zu approximierenden Funktion zu lange dauern (dies ist bei der Leistung von neuronalen Netzen nach einem Training der Fall), die Funktion ist zu kompliziert oder eine Reihe anderer Gründe.
Regression wird laut Wikipedia auch als Regressionsanalyse bezeichnet. Im Weiteren wird hier allerdings nur der Begriff Regression verwendet. 1
Eine Regressionsmethode ist die Methode der kleinsten Quadrate 2, bei der an jedem Datenpunkt der Fehler zwischen der Originalfunktion und der Ersatzfunktion berechnet, quadriert und die Summe über alle Datenpunkte gebildet wird:
Der Gesamtfehler ist hier . In der Formel steht für die Gesamtzahl der Datenpunkte. Die Aufgabe eines entsprechenden Regressionsalgorithmus ist es nun den entsprechenden Fehler zu minimieren:
Loss-Metrik
Es gibt viele verschiedene Loss-Metriken, um entsprechende Fehler in den Daten zu berechnen.
- Mean Absolute Error: Hierbei wird der Fehler klassisch durch
berechnet.
- Mean Squared Error: Hierbei wird der Fehler berechnet und anschließend quadriert
- Mean Squared Logarithmic Error: Hierbei wird der Fehler logarithmiert und anschließend quadriert
Es gibt noch eine Reihe weiterer Loss-Metriken. Eine Auflistung kann hier gefunden werden.
Im Folgenden wird der Mean Squared Error verwendet. Dies ist eine gute Grundlage und führt oft zu guten Ergebnissen. Manchmal können andere Fehlerfunktionen bessere Endergebnisse liefern, dies hängt allerdings von der Problemstellung ab.
Implementierung mittels Tensorflow
Im Folgenden soll nun eine einfache Regressionsaufgabe gelöst werden. Hierbei soll eine Sinus-Funktion
auf dem Bereich durch ein neuronales Netz approximiert werden. Die Sinus-Funktion bietet sich für dieses Beispiel sehr gut an, da die Sinus-Funktion sich lediglich im Bereich
bewegt und somit normiert ist. Diese Sinus-Funktion ist im Folgenden visualisiert:
Generierung des Datensets
Bevor irgendein Datensatz generiert werden kann, sind Imports notwendig, um später arbeiten zu können:
Anschließend definieren wir uns eine Funktion, in welcher die Sinus-Funktion ausgewertet wird.
Nun generieren wir als Trainingsdatensatz jeweils äquidistante Punkte auf dem Intervall und als Testdatensatz äquidistante Punkte auf dem identischen Intervall.
Hiermit haben wir alle notwendigen Daten, um ein entsprechendes Training mit einem neuronalen Netz durchführen zu können.
Training des Modells
Als nächstes definieren wir ein entsprechendes neuronales Netz:
Dieses Konfiguration eines neuronalen Netzes entstand aus einer Hyperparameteroptimierung. Allerdings funktionieren auch kleinere oder geratene neuronale Netze sehr gut bei dieser Regressionsaufgabe.
Als nächstes müssen noch der jeweilige Optimizer
, der Loss
-Funktion und die Metrik
definiert werden:
Nun kann das neuronale Netz trainiert werden.
Als letzter Schritt kann das neuronale Netz noch evaluiert werden, um den Fehler und die Genauigkeit auf dem Testdatensatz herauszufinden:
Hierbei werden zwei gleiche Ergebnisse bei herauskommen, da sowohl für den Fehler aus auch die Genauigkeit jeweils
MeanSquaredError
verwedet wurde. Als Alternative für die Genauigkeit wäre auchMeanAbsoluteError
denkbar.
Visualisierung der Ergebnisse
Das neuronale Netz von oben wurde von uns für verschieden viele Epochen trainiert. Ein Vergleich zwischen der eigentlichen zu approximierenden Funktion und der Ausgabe des neuronalen Netzes ist im folgenden visualisiert:
Weiterhin haben wir einmal den quadratischen Fehler an jeder Stelle für jede Epoche berechnet und einmal dargestellt:
Es ist relativ klar zu erkennen, das die Regression nicht an allen Punkten gleich schnell konvergiert. Dies ist ein häufiges Problem mit vielen Regressionsalgorithmen.
Dieses Beispiel war ein relativ simples Beispiel. Häufig sind sowohl die Dimensionen der Eingangs- als auch der Ausgangsdaten bedeutend höher. Entsprechend länger kann ein Lernprozess durch die höhere Komplexität des Datensatzes dauern.
Hinweise
Wie eben gezeigt, sind neuronale Netze für die Anwendung bei Regressionsproblemen gut geeignet. Es ist jedoch darauf zu achten, dass die Ergebnisse entsprechend genau getestet werden, damit nicht in kritischen Bereichen der Regression Fehler in der Auswertung auftreten und unerkannt bleiben.