Python-basierte R-Alternativen
Klingt leichter gesagt als getan. Wie so häufig im Open-Source-Umfeld offenbarte sich dort ein neues Ökosystem an Tools mit einer reichhaltigen, exotischen und internationalen Flora an Code-Gewächsen.
Es war auf den ersten Blick gar nicht so einfach, die Abkürzungen für die einzelnen Tools und ihre Schwerpunkte klar voneinander abzugrenzen. Zusätzlich wurde auch sehr schnell klar, dass die Motivationen für die Entwickler und die fachlichen Hintergründe der ersten User ganz klar andere waren als die eines SPSS- oder SAS-Jockeys. Sie waren ganz klar an Machine Learning orientiert. Damit meine ich z. B.:
- Deutlich technische Orientierung: mehr Möglichkeiten, wieder selbst auf Low-Level-Ebene die Daten zu beeinflussen. Die Nähe zur zugrunde liegenden Implementierung in C ist zu spüren und die explizite Wahl von Datentypen wird gefördert und zahlt sich wieder aus.
- Hohe Akzeptanz von Black-Box-Verfahren (bei scikit): Der Zweck heiligt die Mittel und wenn ein Scoring mit einem exotischen Verfahren bessere Performance liefert, dann ist das auch dann in Ordnung, wenn ich das Zusammenspiel der Prädiktoren nicht simpel veranschaulichen kann.
- Brute Force führt zum Ziel: Sowohl die bereits ab Werk vorhandene Möglichkeit für Parallelisierung wie auch die Grid-Search-Verfahren zur Parameteroptimierung bringen den User schnell in Versuchung, die CPUs einfach mal aufglühen zu lassen. :-)
Machine Learning in Python hat diese Punkte nicht für sich allein reserviert, da sie genauso auch für R-Nutzung zutreffen können, wenn auch häufig nur mit entsprechenden Erweiterungen. Es ist vielmehr mein subjektiver Eindruck, der entsteht, wenn ich die Dokumentationen, die Tutorials und die Schwerpunkte der Funktionsumfänge sehe. Allein wenn man sich das Cheat-Sheet für scikit-learn-Algorithmen zu Gemüte führt, sieht es auf den ersten Blick so aus, als würden herkömmliche Regressionsverfahren gar nicht auftauchen. Es wird direkt der Sprung zu regularisierten Methoden gemacht und statt logistischer Regression werden SVMs für ein binäres Klassifikationsproblem nahegelegt.
Auch wenn dieses ganze Sammelsurium an Python-Modulen etwas wirr und unzugänglich erscheint - ein Korb voller Schlangen -, sehe ich in dieser Technologie gewaltiges Potential. Es ermöglicht sehr performante, formal stringente, höchst automatisierbare, zu großen Anwendungen skalierbare und leicht deploybare Machine-Learning-Anwendungen.
Python-Module: Übersicht an Paketen
Folgende Auflistung von Elementen soll für Einsteiger eine kleine Orientierungshilfe durch den Jungle an Abkürzungen geben:
NumPy
NumPy stellt höchst performante Datenstrukturen bereit. Es eignet sich hervorragend für die Verarbeitung von Daten in sehr umfangreichen Vektoren und Matrizen. Die Grundlagen wurden in C und Fortran implementiert, worauf die gute Performance zurückzuführen ist.
NumPy beinhaltet auch bereits Möglichkeiten zu mathematischen Berechnungen, dies gehört aber nicht zum primären Einsatzzweck.
Die Datentypen und Datenstrukturen von NumPy bilden die Grundlagen für alle weiteren hier aufgeführten Python-Technologien.
SciPy
SciPy setzt auf NumPy auf und erweitert es um Möglichkeiten für Scientific Computing. SciPy mit NumPy darunter kann sozusagen als kleine Python-Alternative für Matlab gesehen werden.
Für das alltägliche Analysieren oder im Bereich von Machine Learning ist SciPy direkt eher uninteressant.
Pandas
Pandas baut ebenfalls auf NumPy auf und verbessert die Usability hin auf Datentransformation und Analyse.
NumPy-Strukturen werden in Objekte verpackt, die den R-Datentypen recht ähnlich sind. Es gibt also Series (R-Vektoren) und Dataframes. Das Subsetting/Filtern, Neuberechnen von Variablen, Aggregieren und Verknüpfen von Dataframes funktioniert relativ intuitiv und ist von der Bedienung ganz klar an R angelehnt.
Pandas-Objekte erleichtern die Arbeit, indem sie über Methoden zur deskriptiven Statistik und zur Visualisierung verfügen. Die Standards für eine explorative Datenanalyse sind also schon gleich mitgeliefert. Es lohnt sich bei der Fülle an Methoden ab Werk, öfter mal die Doku zu überfliegen.
scikit-learn
Dieses Paket ist die zentrale Machine-Learning-Bibliothek von Python. Sie bietet viele moderne Verfahren für jeden Bereich des Machine Learnings. Dadurch, dass jede Art der Modellierung über dasselbe Interface angesprochen wird, kann man sehr einfach mit noch generischerem Code als in R verschiedene Modelle gegeneinander testen. Bemerkenswert ist auch das beinhaltete Set an Standardtools für Variablentransformationen.
Ein Wermutstropfen dabei ist die Tatsache, dass die scikit-Modellierung zunächst nur modelliert und nicht viel mehr macht. Es gibt keine Modellzusammenfassung, keine Charts, selbst einfachste Diagnostiken wie die Residuen muss man sich z. T. selbst berechnen und so fort.
Der Name scikit stammt von "SciPy Toolkit". Es wurde also ausgehend von SciPy entwickelt, da SciPy selbst nicht über entsprechende Methoden verfügt.
Statsmodel
Statsmodel ist eine sehr neue Alternative zu scikit-learn, die deutlich näher an R angelehnt ist und den Schwerpunkt mehr auf klassische Modellierung bzw. Datamining legt. Hier erhält man nach Berechnung eines Modells eine schöne Zusammenfassung mit einer nützlichen Auswahl an Kennzahlen. Das Modellobjekt enthält auch viele weiterverwertbare Berechnungen, wie man es aus R gewohnt ist. Es existiert sogar ein Interface, das Modellformeln in derselben Notation wie in R akzeptiert.
IPython
IPython ist zunächst eine interaktive Kommandozeile für Python. Die intelligente Autovervollständigung erleichtert das Explorieren von Daten dramatisch. Man darf die Konsole aber nicht automatisch mit dem IPython Notebook gleichsetzen. Das Notebook hebt die IPython-Konsole nochmals auf eine webbasierte Arbeitsumgebung, die viele Usability-Features enthält, Charts und Output während des Arbeitens im Code visualisiert und Veröffentlichungsmöglichkeiten im Sinne von "reproducible research" bietet. Wer also eine Python-Alternative zu Rs knitr sucht, landet zwangsläufig beim IPython Notebook.
matplotlib
Machine Learning unter Python ist erst eine richtig runde Sache mit schicken Visualisierungen und hier springt matplotlib in die Bresche. Die Grafikbibliothek, die ursprünglich unabhängig von den oben genannten Technologien entstand, ermöglicht mit ausreichendem Skill des Entwicklers jede erdenkliche Visualisierung, da alle noch so kleinen Objekte in einem Chart selektierbar und modifizierbar bleiben. Gleichzeitig bietet es aber auch für Einsteiger genügend "High-Level"-Funktionen, um schnell die ersten Charts auf Publikationsniveau zu erstellen.