Schnelles Denken – Maschinelles Lernen mit Apache Spark 2 und Java 8 mit Heiko Spindler bei der JUG-Frankfurt

Am 31.5. war Heiko Spindler zu Gast bei der JUG-Frankfurt und hat einen Vortrag mit dem Titel „Schnelles Denken – Maschinelles Lernen mit Apache Spark 2 und Java 8“ gehalten.


Der Titel enthält eine Anspielung auf das sehr gute Buch von Daniel Kahnemann „Schnelles Denken, langsames Denken“.
Los ging es mit einer kurzen Vorstellung was Spark ist, wo es herkommt und was die Design-Ziele waren.


Heiko hat nach der kurzen grundlegenden Vorstellung von Apache Spark die Komponenten aufgezählt, die Teil von Spark sind (Spark SQL, Spark Streaming, MLib, GraphX), wobei er direkt gesagt hat, dass es in dem Vortrag nur um die MLib und Machine Learning geht. Nachdem der Begriff Machine Learning erklärt war, wurden die ML-Algorithmen, die Spark anbietet, aufgezählt.
Im Anschluss hat Heiko beschrieben, welche Schritte durchlaufen werden müssen, damit man die Algorithmen anwenden kann.
Als erstes benötigt man Trainingsdaten, auf die man einen ML-Algorithmus anwendet. Dadurch erhält man ein trainiertes Modell, das man dann verwenden kann, um neue Daten zu analysieren und daraus Vorhersagen zu machen.


Als Komponenten bietet dazu Spark Hilfsmittel, wie Extractors, Transformers, Selectors und Estimators an, die in einer Pipeline hintereinander geschaltet werden.
Nachdem Heiko das Prinzip von ML und die Umsetzung mit Spark erklärt hatte, ging es mit einem Beispiel weiter. Es gibt einen umfangreichen Testdatensatz, in dem handschriftlich Zahlen und der passende Wert enthalten sind. (MNIST database). Der Datensatz enthält 50.000 Trainingsdaten mit Klassifizierung und 10.000 Testdaten mit Klassifizierung.


Diesen Testdatensatz hat Heiko verwendet, um zu zeigen, wie man mit Spark eine Pipeline aufbaut, um ein Modell zu erstellen, mit den im Anschluss neue Daten ausgewertet, d.h. erkannt werden können.
Als erstes hat er einen Entscheidungsbaum verwendet und die Ergebnisse (88% Erkennungsquote) und Laufzeiten (ca. 2 min) präsentiert, die man erwarten kann, wenn man mit Entscheidungsbäumen arbeitet.
Als zweites man er einen Random Forrest verwendet, der zwar eine längere Laufzeit (4 min) hat, aber auch bessere Ergebnisse (96,3%) liefert.
Anschliessend hat er Neuronale Netze verwendet (MultiLayerPerceptronClassifier (MLPC)) und das auch wieder an einem Java-Beispiel gezeigt.
Bei dem Beispiel mit den Neuronalen Netzen erhöhte sich die benötigte Rechenzeit (63 min) weiter, aber auch die Erfolgsquote (97,8%) wurde noch einmal besser.
Anschliessend hat Heiko noch Möglichkeiten angesprochen die Erfolgsquote weiter zu verbessern.
Mir hat der Vortrag sehr gut gefallen, weil Heiko sehr anschaulich an einem Beispiel erklärt hat, wie ML funktioniert. Und mit den Beispielen und Testdatensätzen, die alle frei zugänglich sind, kann jeder direkt loslegen und die verschiedenen Algorithmen ausprobieren und an den Parametern spielen, um zu sehen was sie für Ergebnisse liefern.
Weitere Informationen findet man auch in dem Artikel von Heiko: Machine Learning mit Apache Spark 2 Oder auch in der Aufzeichnung von dem Vortrag, den er bei der data2day gehalten hat: data2day 2016 – Heiko Spindler Wobei er da nur auf die Neuronalen Netze eingegangen ist. Allerdings hat er bei dem Vortrag zusätzlich noch was zu dem Thema Simulierte Evolution erzählt, was mich an den Vortrag 2012 bei der JUG-Darmstadt erinnert hat: Programme züchten bei der Java User Group in Darmstadt Die Folien zu dem Vortrag findet man hier:
Weiterführende Informationen gibt es in einem Blogpost von Heiko.
Anmerkung: Die Frage, die ich bei der Fragerunde gestellt habe, wo ich wissen wollte, wie weit man die Testdaten reduzieren kann und immer noch brauchbare Erfolgsquoten zu bekommen, hat Heiko prinzipiell in den Video beantwortet (21:50). Wenn man etwa ein Zehntel der Daten nimmt, hat man noch eine Erfolgsquote von 90%.

Kommentare sind abgeschaltet.