Künstliche Intelligenz: Data Preprocessing und Paradigmenwechsel der Programmierung
In der klassischen Programmierung besteht ein Programm aus Schritt-für-Schritt-Anweisungen. Der Aufwand für den/die Programmierer*in besteht dabei, alle notwendigen Schritte inklusive Sonderfälle etc. zu berücksichtigen und zu programmieren. Da die Prozesse und Handlungsschritte sowie der sich daraus ergebende funktionale Zusammenhang von In- und Output des Programmes in der Regel bekannt sind, ist die Auswertung der Ergebnisse zumeist gut nachvollziehbar.
Beim maschinellen Lernen hingegen wird ein Programm trainiert, welches auf der Basis von Input- und Output-Werten einen Zusammenhang erlernt und für unbekannte Input-Werte einen Output generiert. Die Muster und Gesetzmäßigkeiten im Datensatz und/oder zwischen Input und Output „erlernt“ der Algorithmus dabei von selbst. Die Herausforderung für den/die Programmierer*in liegt dabei insbesondere in der Aufbereitung der Daten, sodass der Algorithmus diese richtig interpretieren kann. Maschinelles Lernen ist entsprechend dort interessant, wo eine Programmierung per Hand äußerst aufwändig, die Beziehungen zwischen In- und Output sehr komplex oder unbekannt sind oder bereits sehr viele Daten vorliegen. So konnte zum Beispiel die Qualität u. a. von Spamfiltern, Gesichtserkennung, Übersetzung, Prognosen und Spracherkennung ebenso wie Datamining durch KI deutlich gesteigert werden. [1]
Um KI-Systeme zu trainieren und die Ergebnisse überprüfen zu können, sind meist sehr große Datenmengen erforderlich. Diese müssen im sog. „data preprocessing“ strukturiert, aufbereitet und z. B. fehlende Werte gelöscht oder gefüllt werden. Das „data preprocessing“ nimmt je nach Format und Qualität der Daten oft einen Großteil der Zeit in Anspruch.
Eine Auswahl von Schritten, die bei „data preprocessing“ anfallen, ist nachfolgend kurz dargestellt:
- Zusammenführen von Daten aus unterschiedlichen Quellen: Meistens ist es notwendig, viele verschiedene Datensätze aus unterschiedlichen Quellen zusammenzuführen, um den gewünschten Trainingsdatensatz für die KI zu generieren.
- Bereinigung der Daten: Hier wird der Datensatz gezielt nach falschen, doppelten, unwichtigen, ungenauen oder unvollständigen Werten durchsucht und diese korrigiert, ersetzt oder entfernt. Je nach Qualität und Größe des Datensatzes kann dieser Schritt sehr viel Zeit in Anspruch nehmen. [2], [3]
- Feature*-Aggregation: hier wird der Datensatz auf ein verhältnismäßiges Maß an Datenmenge und Informationsgehalt reduziert. So können Energiedaten (z. B. Zeitreihen) in sehr großer zeitlicher Auflösung (z. B. Sekunden) vorliegen. Je nach Anwendungsfall ist dies jedoch nicht erforderlich, führt zu unverhältnismäßigen Rechenzeiten oder zu großem statistischen Rauschen, welches ein Lernen erschwert. Die Daten können entsprechend (z. B. auf Minuten) aggregiert, geglättet (z. B. mittels Regression) oder geclustert werden.
- Dimensionsreduktion: Datensätze können oft trotz der vorausgegangenen Methoden noch aus hunderten oder tausenden Features* (deren Anzahl = Dimension) bestehen. Dies erhöht die Rechenzeit und erschwert die Lernphase von machine-learning Algorithmen. Dimensionsreduktion dient entsprechend dem Zweck, den Informationsgehalt vieler Dimensionen möglichst gut zu erhalten und auf weniger Dimensionen zu reduzieren. So können im Übrigen auch hochdimensionale Datensätze im 2D oder 3D grafisch abgebildet werden. Häufig verwendete Algorithmen sind t-SNE und PCA [4].
- Feature Encoding: die meisten KI-Algorithmen können nicht mit z. B. textbasierten Beschreibungen von Bildern wie „Hund“ oder „Katze“ umgehen, sondern lediglich mit Zahlen. Handelt es sich dabei um die „Label“ eines Datensatzes müssen sie z. B. binär gekennzeichnet werden (z. B. mit 0 = Hund, 1 = Katze). Sind diese Kategorien ein Feature für eine Berechnung wird für jede einzelne Kategorie (hier Hund & Katze) ein eigenes binäres Feature erstellt. Dieser Vorgang wird „one hot encoding“ genannt. [5]
- Scaling/Normalization: viele Machine-Learning-Algorithmen arbeiten mit der Euklidischen Distanz, um z. B. die Ähnlichkeit von Datenpunkten zu bewerten oder sie in Beziehung zu setzen. Auch werden häufig Optimierungsverfahren innerhalb der Algorithmen eingesetzt. Sind die Einheiten von Features jedoch sehr unterschiedlich, verzerrt dies das Ergebnis oder verlängert die Rechenzeit. Scaling bzw. Normalisierung dient entsprechend dem Zweck, die Features unabhängig voneinander innerhalb eines gewissen Zahlenbereiches (z. B. 0 und 1) zu normalisieren.
- Train-Test Split: Datensätze (v.a. bei supervised learning) beinhalten meist sowohl Input-Werte (z. B. Features wie Strahlungswerte und Wetterdaten) als auch Output-Werte (z. B. Leistung einer PV-Anlage). Um den Lernerfolg eines Algorithmus bewerten zu können, ist es notwendig, den ursprünglichen Datensatz in einen Trainings- und einen Testdatensatz zu teilen. Während der Algorithmus mit ersterem die Zusammenhänge im Datensatz erlernt, wird mit letzterem (= dem Algorithmus unbekannte Daten) geprüft, ob das Training erfolgreich war. [6]
* Im machine-learning werden die Werte des Inputs auch als „Features“ bezeichnet (= einzelne Spalten einer Tabelle). Die „Features“ einer Prognose für die Leistung einer Photovoltaik-Anlage können das Datum, die Uhrzeit, Strahlungs- und Temperaturwerte sowie die Ausrichtung, Peakleistung und der Modultyp sein. Der Output hingegen in diesem Beispiel ist ein kontinuierlicher Wert (Leistung je Zeitschritt). Handelt es sich um eine Klassifikation oder Clusterung, dann ist der Output diskret (z. B. 0,1,2,3) und wird auch als „Label“ bezeichnet. (Weitere Begriffserklärungen ) Die Anzahl der Features wird auch als Dimension bezeichnet.
Sind die Daten entsprechend vorbereitet, können sie für Machine Learning genutzt werden. In den folgenden Beiträgen stellen wir einzelne Algorithmen vor und zeigen beispielhafte Anwendungsfälle in der Energiewirtschaft.
Weitere Informationen:
Literatur:
[1] Lison, Pierre: An introduction to machine learning. Oslo: University of Oslo, 2012 .
[2] Elgabry, Omar: The Ultimate Guide to Data Cleaning. In: https://towardsdatascience.com/the-ultimate-guide-to-data-cleaning-3969843991d4 (Abruf am 2020-04-03); Toronto, Canada: towardsdatascience.com, 2019.
[3] Agarwal, Malay: Pythonic Data Cleaning With Pandas and NumPy. In: https://realpython.com/python-data-cleaning-numpy-pandas (Abruf am 2020-04-03); Vancouver, Canada: DevCademy Media Inc., 2018.
[4] Pedregosa, Fabian et al.: Scikit-learn: Machine Learning in Python. In: Journal of Machine Learning Research 12 (2011) 2825-2830. Palaiseau: Parietal, INRIA Saclay, 2011.
[5] Liu, Yang: Encoding Categorical Features. In: https://towardsdatascience.com/encoding-categorical-features-21a2651a065c. (Abruf am 2020-04-03); Toronto, Canada: towardsdatascience.com, 2018.
[6] Bronshtein, Adi: Train/Test Split and Cross Validation in Python. In: https://towardsdatascience.com/train-test-split-and-cross-validation-in-python-80b61beca4b6. (Abruf am 2020-04-03); Toronto, Canada: towardsdatascience.com, 2017.