Machine Learning mit Apache Spark – Einführung

Ich beschäftige mich zur Zeit mit dem Thema „Machine Learning mit Apache Spark“ und habe am Wochenende in der Computerzeitschrift „iX“ einen sehr informativen Artikel hierzu gelesen, und das Beispielprogramm ausprobiert, das darin vorgestellt wurde.

Apache SPARK

Apache Spark™ ist ein leistungsfähiges Datenbankwerkzeug, das für die Verarbeitung von Massendaten eingesetzt werden kann, und bildet vielfach die Grundlage für das was man heute „Big Data Szenarien“ nennt.

Große Datenmengen werden heutzutage gerne mit Hilfe von intelligenten Algorithmen weiterverarbeitet, die aus dem Umfeld des „Machine Learning“ stammen.

Hierbei existieren mehrere Möglichkeiten, Spark intelligent zu machen. Einmal ist Spark mit eigenen Machine Learning Bibliotheken ausgestattet (Spark ML), oder man kann das weitverbreitete Statistikpaket „R“ über eine Schnittstelle anschliessen, die den Namen SparkR trägt (Links anbei).

Spark ML selbst kann man erweitern, indem man z.B. Bibliotheken wie „H2O Sparkling Water„, oder „BigDL“ nachinstalliert. Details würden hier aber zu weit führen.

Einarbeitung

Der Einstieg in die Methodiken zur Entwicklung eines Machine Learning Algorithmus ist dabei nicht ganz einfach, obwohl sehr gute Dokumentation existiert. Einmal muss man mathematisch-analytische Fähigkeiten mitbringen, um z.B. die Daten analysieren zu können, und um die Algorithmen zu verstehen.

Zudem muss man sich erst einmal in die Aufbereitung und Verarbeitung der Daten in Spark ML gewöhnen.

Beispiele

In der Computerzeitung iX sind hierzu zwei Artikel erschienen, die diesen Einarbeitungsprozess vereinfachen (Links anbei)

    • 03-2017: „Durchblick im Datendickicht – Einführung in Apache Spark und seine Python-API“
    • 05-2017: „Machine Learning mit Apache Spark – Lernförderung (Marc Fiedler,  Jens Albrecht)“

Der erste Artikel behandelt den Aufbau und die Funktionsweise von Apache Spark, und der zweite Artikel zeigt anhand eines konkreten Beispiels die Entwicklung eines kompletten Programms zur Klassifikation von Daten..

Dieser Artikel hat mich besonders interessiert, da er vom Anfang bis zum Ende konkret zeigt, wie man einen Machine Learning Algorithmus entwickelt.

Mushrooms

Der letztgenannte Artikel benutzt hierfür eine Datenbank, die giftige und ungiftige Pilze anhand unterschiedlicher Kriterien unterscheidet, und will hiermit einen Algorithmus trainieren, der unbekannte Pilze klassifizieren kann.

Dataframe und Statistik

Der erste vorgestellte Schritt behandelt die Erstellung von grundlegenden Statistiken zu den Daten. Diese Statistiken helfen dem Analysten bei der Beurteilung der Datenbasis und zeigen auf, wo die Eingangsaten unvollständig oder fehlerhaft sind und daher korrigiert werden müssen.

Besonders interessant für den Einsteiger ist hierbei die Methodik zur Erzeugung des DataFrames, über den die Verarbeitung stattfindet.

Pipeline und Featurevektoren

Im zweiten Teil wird gezeigt, wie man die Pipeline erzeugt, und die Eingangsdaten in die Feature-Vektoren umwandelt, die Spark ML verlangt.

Wer andere Datenbanken kennt, lernt hier neue, Spark spezifische Eigenarten kennen, die sich aus den Streamingfähigkeiten dieser Datenbank ergeben (z.B. Pipelines und Stages). Auch wird in einer Prinzipdarstellung die Abarbeitung einer Spark ML Pipeline gezeigt, und so deutlich gemacht, wie der Prozess zur Klassifikation von Pilzen in einer solchen streamingfähigen Datenbank abläuft.

Sobald die Feature-Vektoren vorliegen, benutzt das Modell die Lerndaten, um die richtige Klassifikation zu lernen. Hierbei findet ein RandomForrest Classifier Anwendung. Testdaten, die auf das angelernte Modell angewendet werden ergeben dann maschinell erzeugte Vorhersagen, deren Treffsicherheit sich überprüfen läßt.

Der im Artikel vorgestellte Algorithmus bringt es hierbei auf eine Trefferquote von 94%.

Hyperparameter-Tuning

Der Random Forrest Classifier selbst wird über die Parameter „Anzahl Bäume“ und „Rechentiefe“ eingestellt. Die Vorhersagegenauigkeit hängt dabei davon ab, wie gut diese Parameter gewählt werden.

Das Hyperparameter-Tuning mit Cross-Validation, das in diesem Artikel gezeigt wird macht deutlich, wie man vorgeht, um optimale Parameter zu finden. Generell trainiert hierbei der CrossValidator 12 Modelle mit unterschiedlichen Parameterkonstellationen und unterteilt die Lerndaten zur Vermeidung von overfitting in sog. „Folds“.

Heraus kommt eine Parameterkonstellation, mit deren  Hilfe sich die Trefferquote auf über 97% steigern läßt. Für den Einsteiger ist hierbei insbesondere die Umsetzung von Interesse, da sie in der Form nicht in der Dokumentation steht.

Letzte Schritte

Die Modelle werden in der Praxis von Daten Analysten erstellt und später dann in einer Software verbaut. Krönender Abschluss des Artikels sind einige Codingzeilen, die verdeutlichen, wie man solche Modelle speichert und wieder läd.

Ich habe in der Zwischenzeit sehr viel über Spark ML gelesen, und habe mir große Teile der Dokumentation angesehen. Insbesondere der genannte zweite Artikel hat mich hierbei so gut weitergebracht, daß ich ihn hier empfehlen möchte.

Weiterführende Informationen

Das Original dieses Artikels ist auf Der Produktmanager erschienen (©Andreas Rudolph). Folgeartikel zum Thema gibt es über die (→Mailingliste), oder indem Sie →mir auf Twitter folgen.

In der Online Version des Artikels finden Sie hier die versprochenen weiterführenden Links:

Comments are closed.