Maschinenlernen / Künstliche Intelligenz wird in der Softwareentwicklung eine wachsende Bedeutung einnehmen; in absehbarer Zeit dürfte es nur noch wenige Softwareprojekte geben, die gänzlich ohne Maschinenlernen auskommen. Dazu der Google-Chef Sundar Pichai: „Wir werden uns von einer Mobile-first-Welt in eine KI-first-Welt bewegen“, wo der Computer ein mit Künstlicher Intelligenz (KI) ausgestatteter Sprachassistent sein wird. Nicht jeder Softwareentwickler, nicht jeder Product Owner, nicht jeder IT Projektleiter wird deshalb zwangsläufig ein ausgewiesener Data Scientist (Datenwissenschaftler) oder Experte im Maschinenlernen sein müssen. Mindestens jedoch sollte er ein solides Grundverständnis für Maschinenlernen mitbringen. Dieser Blog führt durch die Lernerfahrung in einem einschlägigen Online-Kurs.

Der Kurs, um den es im Folgenden gehen soll, lässt sich buchen auf der udemy Academy. Titel: „Machine Learning A-Z™: Hands-On Python & R In Data Science”. Der initiale Preis des Kurses wird mit ca. 400 EUR angegeben, ich kann den Kurs zum erstaunlichen Preis von 15 EUR buchen; der Kurs ist original in Englischer Sprache, es werden auto-generierte Übersetzungen (Untertitel) unter anderem in Deutsch angeboten (Übersetzungsqualität: eher schlecht; das macht aber nichts, denn das Englisch im Kurs ist durchgehend exzellent und die deutsche Variante darum nicht erforderlich). Der Kurs umfasst ca. 40 Stunden Video-Training sowie diverses Unterrichtsmaterial. Der Kurs verspricht: Die Vermittlung der Grundlagen im Maschinenlernen, der Aufbau robuster Modelle für das Maschinenlernen, die Konzeption/Durchführung mächtiger Datenanalysen, die Behandlung spezifischer Themen wie Natural Language Programming und Deep Learning.

Mein Anspruch ist hierbei, die Herangehensweise an die Integration von Maschinenlernen in die Softwareentwicklung zu verstehen, die Mächtigkeit von Methoden aus dem Maschinenlernen. Die Voraussetzungen für den Kurs erfülle ich („Just some high school mathematics level“). Mit Konzepten der Programmierung bin ich vertraut, habe selbst auf (Amateur-)Level programmiert, und zwar in Visual Basic und C#. Es ist keine übertriebene Bescheidenheit, wenn ich sage: Ich bin im Coding etwa aus der Übung gekommen. Das sind also die Startbedingungen. Los geht’s!

Vorweg: Der Kurs ist didaktisch sehr gut aufgebaut, die Inhalte sind (über alle Lerneinheiten hinweg) ziemlich einfach nachvollziehbar und ermöglichen so einen sehr guten Einstieg in das Maschinenlernen.

Maschinenlernen / Künstliche Intelligenz – Part 1: Datenaufbereitung (Data Preprocessing)

In dieser Artikelserie zum udemy Academy-Kurs vermittele ich einige ausgewählte, wesentliche Knowledge Nuggets, die ein gutes Verständnis von der inhaltlichen Ausrichtung des Online-Kurses und gleichzeitig einige wesentliche Lerninhalte vermitteln. Dieser Überblick ist ein Appetizer und soll den Online-Kurs selbstverständlich nicht ersetzen.

Zum Einstieg gibt‘s erst einmal einen Überblick, wo Maschinenlernen heute bereits eingesetzt wird. Dies reicht von Gesichtserkennung, Virtual Reality Brillen, Text-to-Speech, Speech-to-Text über laufende Roboterhunde (Stichwort: „Reinforcement Learning“) bis hin zu den Empfehlungsalgorithmen auf amazon und anderen Online-Händlern. Wirklich beeindruckend ist der Überblick zum exorbitanten Datenwachstum, das mithilfe des Maschinenlernens nutzbar gemacht werden soll. Hat die Menschheit bis zum Jahr 2005 INSGESAMT 130 Exbyte an Daten produziert (alle Bücher, alle Lieder, alle Reden, etc.), so explodierte die von der Menschheit generierte Datenmenge allein in den darauf folgenden 10 Jahren (also bis 2015) bereits auf das 60ig-fache (!), nämlich 7.900 Exabyte. Für das Jahr 2020 wird eine Datenmenge von ca. 40.000 Exabyte prognostiziert.

Exkurs: Um diese Datenmenge besser einordnen zu können. Ein Buchstabe (also: ein Zeichen) hat einen Byte. Eine Buchseite etwa 1.024 Zeichen, etwa 1 KiloByte (eigentlich: 1 Kilybyte = 1.024 Byte). Ein Buch mit 1.024 Seiten hat ein 1 MegaByte. Eine Million MegaByte sind ein TeraByte. Wenn Sie mit einer HD Kamera ihr GESAMTES Leben filmen, jede Sekunde, dann kommen Sie etwa auf ein Terabyte. Und eine Million Terabyte entsprechen einem Exabyte. Exkurs Ende

Das Englisch der beiden Trainer Kirill Eremenko und Hadelin de Ponteves (mit leichtem, angenehmem französischem Akzent) ist im Übrigen hervorragend. Man kann beiden sehr gut folgen, die einzelnen Schritte werden sehr verständlich erklärt. Nun geht’s in medias res, wir laden das Freemium-Open-Source-Distribution Package ANACONDA herunter, das die Entwicklungsumgebung Spyder für die Programmiersprache Python enthält, dazu diverse Bibliotheken. Es ist erstaunlich einfach. Im nächsten Schritt wird auch der Download- und Installationsprozess zur Entwicklungsumgebung für die Programmiersprache R erläutert (www.rstudio.com); das setze ich allerdings nicht mehr um: Der Kurs bietet ja sowohl Maschinenlernen mithilfe von Python sowie R an; ich habe mich entschieden, nur die Umsetzung in Python zu verfolgen.

Wir werden im Verlauf des Kurses diverse Bibliotheken einsetzen, welche die erforderlichen Funktionen bereitstellen. Die wichtigsten hiervon sind numpy (diverse mathematische Funktionen), matplotlib.pyplot (pyplot ist eine Unter-Bibliothek von MatPlotLib; damit lassen sich einfach Charts erstellen) und schließlich pandas für den Datenimport und das Datenmanagement. Wir starten den Kurs zum Maschinenlernen mit dem Import eines einfachen Datensets als Datentabelle (bzw. Matrize). Die Daten stammen von einem (fiktiven) Online-händler. Je Datensatz (also: je Zeile in einer Datentabelle) gibt es zum einen unabhängige Variablen (hier: Kundeneigenschaften wie Alter, Gehalt, Geschlecht), zum anderen abhängige Variablen (hier: Kaufverhalten).

Ein erster Schritt bei der Aufbereitung von Daten besteht darin, auf eine typische Herausforderung eine Antwort zu finden: Fehlende Daten bzw. lückenhafte Daten. Bei einem Datensatz fehlt etwa das Alter eines Käufers, oder es fehlt die Gehaltsangabe. Man könnte solche unvollständigen Datensätze einfach löschen (nicht empfohlen!), oder man füllt diese Lücken mit plausiblen Werten: Das heißt, es wird der Durchschnittswert, der Median oder etwa der am häufigsten vorkommende Wert eingesetzt. Um das zu erreichen, setzen wir eine Bibliothek ein, nämlich SciKit („Simple and efficient tools for data mining and data analysis”).

Beim Maschinenlernen werden mathematische Algorithmen einsetzt, und diese verarbeiten nur numerische Daten. Sogenannte Kategorien (etwa: Herkunftsländer von Käufern wie „Deutschland“, „Frankreich“ oder „Frankreich“) müssen darum gewandelt werden. Wie bei relationalen Datenmodellen üblich, könnte es naheliegen, jeder Kategorie in einem Datenfeld (hier: Herkunftsland) einfach einen numerischen Wert zuzuweisen, etwa: Deutschland = „1“, Frankreich = „2“, Spanien = „3“ undsoweiter. Ein solcher Ansatz ist allerdings für die Mathematik des Maschinenlernens völlig ungeeignet, denn auf diese Weise würde eine hierarchische Struktur bzw. eine Ordinalskala entstehen (3 ist größer als 2, 2 ist größer als 1). Stattdessen geht man im Bereich Maschinenlernen wie folgt mit dieser Transformation von Kategoriedaten um: Für jede Kategorieausprägung (etwa: Frankreich) wird eine eigene Datenspalte generiert; eine „0“ oder „1“ je Datensatz gibt an, ob eine Kategorieausprägung gilt oder nicht. Wir erhalten (in einem vereinfachten Beispiel) drei Spalten „Deutschland“, „Frankreich“, „Spanien“. Wenn der Käufer aus Spanien kommt, ergeben sich für die drei Spalten die Werte „0“, „0“, „1“. Im Grunde ganz einfach.

Die Daten werden anschließend in ein Datenset für das „Training“ (also: den Lernprozess beim Maschinenlernen) sowie in eine Datenset für das „Testen“ (Validierung, ob das Ergebnis des Maschinenlernen gut ist) aufgeteilt. In der Praxis sind Wert typisch wie 75:25 (Training:Testen). Dieses Testen beim Maschinenlernen (und das anschließende Optimieren des Maschinenlernen-Prozesses) ist insofern besonders wichtig, da es Phänomene wie das Overfitting zu vermeiden gilt. Das Overfitting im Maschinenlernen bezeichnet eine Situation, in der die „Maschine“ quasi die verschiedenen Datensätze einfach „auswendig gelernt hat“, aber die entscheidenden Korrelationen zwischen den Daten (die „Logik der Zusammenhänge“) nicht verstanden hat; im Ergebnis kann eine „Maschine“ im Fall von Overfitting für neue Daten folglich auch kein zufriedenstellendes Ergebnis liefern. Darum ist das Testen so entscheidend.

Der letzte Schritt bei der Datenaufbereitung: Das sogenannte Feature Scaling. Was heißt das? – Die Algorithmen zur Ermittlung von Korrelationen zwischen den Daten basieren (häufig, nicht immer) auf der sogenannten Euklidischen Distanz.

Maschinenlernen Datenaufbereitung Feature Scaling Euklidische DistanzAbbildung: Warum Feature Scaling? – Die Euklidische Distanz in mathematischen Modellen für das Maschinenlernen

Wenn wir etwa Daten von Käufern zum Alter und zum Gehalt haben, dann liegen die Altersangaben typischerweise zwischen 15 und 100, die Angaben zum Jahresgehalt etwa zwischen 20.000 und 200.000. Wenn beim Alter die „Distanz“ (der Unterschied) zwischen zwei Käufern 50 beträgt, dann ist das sehr viel. Beim Jahresgehalt ist das nicht viel. Ohne tiefer mathematisch einzusteigen, dürfte intuitiv klar sein, dass zur Vergleichbarkeit der Datendimensionen „Gehalt“ und „Alter“ eine einheitliche Skalierung erforderlich ist. Man skaliert etwa die Werte so, dass jeweils die Werte zwischen „-1“ und „+1“ liegen.

Für diese Art von einheitliche Skalierung bieten sich zwei Verfahren an: Die Skalierung mithilfe der Standardabweichung sowie die Skalierung mithilfe der Normalisierung:

Maschinenlernen Datenaufbereitung Feature Scaling Standardisierung und NormalisierungAbbildung: Zwei Verfahren für das Features Scaling im Rahmen der Datenaufbereitung zum Maschinenlernen

Natürlich gibt es auch hierfür eine Bibliothek, die diese Aufgabe erledigt.

Fazit zu Teil 1 des Kurses: Sehr gut verständlich. Bereits hier gewinnt man ein gutes Verständnis dafür, wie der Arbeitsprozess eines Programmierers in einem Projekt zum Maschinenlernen aussieht, welche Rollen Bibliotheken spielen und wie aufwändig das Coding (etwa in Python) ausfällt.

Hier geht’s zum Erfahrungsbericht für Teil 2 des Kurses, der verschiedene Regressionsverfahren und deren methodische Anwendung vorstellt: Diverse Regressionsverfahren, von der einfachen linearen Regression, polynomen Regressions bis zur „Random Forest Regression“. Veröffentlichung am 23.05.2019.

Sebastian Zang
Author

Der Autor ist Manager in der Softwareindustrie mit internationaler Expertise: Prokurist bei einem der großen Beratungshäuser - Verantwortung für den Aufbau eines IT Entwicklungszentrums am Offshore-Standort Bangalore - Director M&A bei einem Softwarehaus in Berlin.