· 

Maschinelles Lernen mit Python

Wenn es darum geht maschinelles Lernen selber zu programmieren und anzuwenden, gibt es nur ein paar Programmiersprachen, die gut dafür geeignet sind. Natürlich können alle Algorithmen wie beispielsweise der Bayes-Klassifikator in so ziemlich jeder Sprache von Grund auf neu programmiert werden. Meistens aber soll es schnell gehen und die notwendigen Funktionalitäten sollten bereits vorhanden sein. Dieser Artikel beschreibt, wieso Python eine gute Sprache ist um maschinelles Lernen anzuwenden und welche Funktionsbibliotheken dafür bekannt sein sollten.

Warum mit Python?

Python ist schon eine etwas ältere Programmiersprache. Sie wurde 1991 veröffentlicht und versucht seitdem als höhere Sprache durch einfachen und übersichtlichen Quellcode zu überzeugen. Python ermöglicht viele verschiedene Programmierstile und -paradigmen. So ist es beispielsweise möglich sowohl objektorientierten als auch funktionalen Code zu schreiben. Eine sehr große Stärke von Python ist, dass es eine freie Programmiersprache ist (die Lizenz ist kompatibel mit der Gnu Public Licence) und durch eine sehr große Community getragen wird. Eben durch diese Community gibt es eine Vielzahl von Paketen, die ebenso frei genutzt werden können. Dazu kommen auch Pakete die von größeren Unternehmen zu freien Verfügung gestellt werden, wie TensorFlow von Google oder PyTorch von Facebook.

Neben der großen Anzahl freier Pakete im Bereich Datenanalyse und maschinellem Lernen, bietet Python aber auch viele Möglichkeiten in anderen Bereichen. So können mit Python auch andere Desktop-Anwendungen oder auch Webserver programmiert werden. Das hat den Vorteil, dass viele die Sprache schon kennen oder wenn sie Python lernen, noch viel mehr damit machen können. Alles in allem lohnt es sich Python zu lernen und durch die große Community, ist es auch sehr gut für maschinelles Lernen geeignet.

Was gibt es für Bibliotheken?

Oben wurden bereits zwei Pakete genannt, TensorFlow und PyTorch. In diesem Abschnitt möchte ich einen kleinen Ausschnitt von Werkzeugen geben mit denen ein ganzer Data Mining Prozess abgebildet werden kann. Wer diese Pakete sehr gut kennt, kommt auf jeden Fall schon sehr weit.

Mit Pandas können Daten sehr gut analysiert werden. Typischer weise haben Arrays (Listen) in Python weder Spaltentitel noch einen Index. Mit Serien und Dataframes bei Pandas ist das anders. Pandas bietet Möglichkeiten, um schnell auf einzelne Einträge zuzugreifen und anzuzeigen. Beispielsweise gibt dieses Werkzeug mit der Funktion "describe()" eine Übersicht über ein Dataframe mit den Maximalwerten, Minimalwerten, Durchschnitten und so weiter für jede Spalte. Außerdem können Zeilen und Spalten gefiltert, erweitert und verändert werden. Häufig ist Pandas der erste Schritt, um Daten zu laden und diese dann genauer unter die Lupe zu nehmen.

Numpy ist, ähnlich wie Pandas, ein Werkzeug, mit dem Daten gehalten und manipuliert werden können. Der Fokus hierbei liegt allerdings auf numerischen Manipulationen aus dem Bereich der linearen Algebra. Im Gegensatz zu Pandas können Numpy-Arrays wesentlich mehr als drei Dimensionen besitzen. Mit diesen Matrizen können dann Multiplikation, Dekompositionen und viele weitere Manipulationen durchgeführt werden. Das Numpy-Array ist auch die Datenstruktur, mit der viele andere Bibliotheken arbeiten. Zu diesen gehört auch das unten beschriebene scikit-learn.

Matplotlib bietet Möglichkeiten Daten in einem Diagramm darzustellen. Es ist sehr hilfreich, um ein Verständnis oder einen Überblick über Daten oder Ergebnisse zu bekommen. Existiert beispielsweise bereits ein Pandas Dataframe, so kann mit einer Zeile Quellcode bereits ein Diagramm von diesen Daten gezeichnet werden. Desweiteren können nachträglich verschiedenste Teile der Diagramme noch angepasst werden, wie Farben, Achsen, Achsenbeschriftungen und so weiter. Neben einfachen Liniendiagramme können mit Matplotlib auch Histogramme, Balkendiagramme oder auch Heatmaps gezeichnet werden. Häufig ist Matplotlib ein praktisches Werkzeug, um für Präsentationen oder Dokumentationen Diagramme anzufertigen.

Scikit-learn ist eine Bibliothek, die eine große Menge an Data Mining beziehungsweise Machine Learning Funktionalitäten bereit stellt. Neben vielen klassischen Algorithmen, wie K-Means oder DBSCAN für Clustering und k-Nächste-Nachbarn für Klassifikationen, bietet scikit-learn auch jede Menge Möglichkeiten zum Vor- und Nachbereiten der Daten. So ermöglicht es beispielsweise Daten durch Normalisierung und Skalierungen vorzubereiten, verschiedene Merkmale der Daten für verschiedene Algorithmen auszutesten und natürlich auch verschiedene Training- und Testverfahren, wie unter Anderem die Kreuzvalidierung. Mit den gelernten Modellen können bei Klassifikationen und Regression natürlich auch neue Daten klassifiziert und vorhergesagt werden.

Alternative Programmiersprachen

Eine weitere Programmiersprache die viele Funktionalitäten zum maschinellen Lernen bietet ist R. R kommt eher aus der Ecke der Statistik und ist meiner Meinung nach nicht so gut für andere Bereiche wie Webserver geeignet (obwohl es theoretisch ginge). Nichts desto trotz bietet auch R mit einer Menge an Paketen, wie beispielsweise ggplot2, kmeans, NaiveBayes oder neuralnet, jede Menge Möglichkeiten Data Mining durchzuführen. Ein großer Vorteil von R ist dessen Geschwindigkeit durch ein effizientes Daten- und Speichermanagement.

Neben R gibt es auch bei Java und Scala Bemühungen sich in der Machine Learning Szene zu etablieren. Java ist eine Sprache die insbesondere in größeren Unternehmen sehr verbreitet ist. Daher wird das Werkzeug Deeplearning4j (beziehungsweise Deeplearning4s) entwickelt. Hinzu kommt auch, dass viele Anwendungen im Big Data Umfeld, wie beispielsweise Hadoop, auch in Java geschrieben sind. Ein Nachteil an Java ist, dass es im Vergleich zu Python nicht so flexibel und schnell einsetzbar ist. Das kommt unter Anderem durch die Starke Typisierung und den Zwang Klassen verwenden zu müssen.

Kommentar schreiben

Kommentare: 0