Ein kleines Programmierbeispiel
Für das Programmierbeispiel nehmen wir ein klassisches Problem: Klassifizierung von drei Arten von Schwertlilien (Iris setosa, Iris versicolor und Iris virginica) anhand von vier Merkmalen: Kelchblattlänge, Kelchblattbreite, Blütenblattlänge und Blütenblattbreite. Dieses Klassifizierungsbeispiel wurde schon vom britischen Biologen und Statistiker Ronald Fisher in seinem Artikel "The use of multiple measurements in taxonomic problems" im Jahr 1936 vorgestellt. Daten von 150 vermessenen Schwertlilien findet man im Archiv des UCI Machine Learning Repository.
Für unser Programmbeispiel wurde aus dem Archiv die Datei iris.data in der ersten Zeile um die Spaltenüberschriften ergänzt, die im Punkt 7 in der Datei iris.names beschrieben sind, und als IrisData.csv lokal auf dem Rechner abgespeichert.
Wir haben vier Inputvariablen (X1: Kelchblattlänge, X2: Kelchblattbreite, X3: Blütenblattlänge und X4: Blütenblattbreite) und eine Outputvariable (Art der Schwertlilie).
Die zwei im Folgenden gezeigten Programme, jeweils eins in R und Python, sollen zwei einfache Aufgaben der deskriptiven Statistik erledigen:
- Die durchschnittlichen Werte (arithmetische Mittel) der vier Inputvariablen der drei Iris-Arten berechnen.
- Einen Pair Plot als Visualisierung erstellen. Ein Pair Plot beinhaltet alle Kombinationsmöglichkeiten der vier Inputvariablen, die jeweils paarweise in 2D visualisiert werden.
Programm in R - mit wenigen Zeilen zum Ziel
library(GGally) df <- read.csv(file="c:\\IrisAnalysis\\IrisData.csv", header=TRUE, sep=",") aggregate(df[, 1:4], list(df$Irisart), mean) ggpairs(df, aes(colour = Irisart, alpha = 0.4))
Wir verwenden das Paket GGally für die Erstellung des Pair Plot. Deshalb wird das Paket importiert: library(GGally)
Mit df >- read.csv(file="c:\\IrisAnalysis\\IrisData.csv", header=TRUE, sep=",") werden Daten aus der Datei IrisData.csv, die in der ersten Zeile die Spaltenüberschriften hat und Kommas als Spaltentrennzeichen verwendet, in einen Data Frame geladen.
Mit dem Befehl aggregate(df[, 1:4], list(df$Irisart), mean) werden die Mittelwerte der vier Inputvariablen für jede der drei Irisarten berechnet. ggpairs(df, aes(colour = Irisart, alpha = 0.4)) erstellt den Pair Plot. Das Programm gibt eine Tabelle und eine Grafik aus.
Group.1 Kelchblattlaenge.in.cm Kelchblattbreite.in.cm Bluetenblattlaenge.in.cm Bluetenblattbreite.in.cm 1 Iris-setosa 5.006 3.418 1.464 0.244 2 Iris-versicolor 5.936 2.770 4.260 1.326 3 Iris-virginica 6.588 2.974 5.552 2.026
Abbildung 1: Pair Plot erstellt mit R und GGally
Programm in Python
import pandas as pd import seaborn as sns df = pd.read_csv('IrisData.csv', delimiter=',', header=0, index_col=False) groupedData = df.groupby('Irisart') meanValues = groupedData[['Kelchblattlaenge in cm', 'Kelchblattbreite in cm', 'Bluetenblattlaenge in cm', 'Bluetenblattbreite in cm']].mean() print(meanValues.to_string()) sns.set(style="ticks") sns.pairplot(df, hue="Irisart")
Als erstes werden zwei Pakete importiert:
import pandas as pd import seaborn as sns
Wie bereits erklärt, enthält Pandas unter anderem das Data Frame für Python, und Seaborn ist eine mächtige High-Level-API für Datenvisualisierung.
Mit df = pd.read_csv('IrisData.csv', delimiter=',', header=0, index_col=False) werden Daten aus der Datei IrisData.csv, die in der ersten Zeile (header = 0, weil Python mit 0 zu indizieren beginnt) die Spaltenüberschriften hat und Kommas als Spaltentrennzeichen verwendet, in einen Data Frame geladen. index_col=False bedeutet lediglich, dass es keine Indexspalte gibt.
Im nächsten Abschnitt werden die Mittelwerte der vier Inputvariablen für jede der drei Irisarten berechnet und ausgegeben.
groupedData = df.groupby('Irisart') meanValues = groupedData[['Kelchblattlaenge in cm', 'Kelchblattbreite in cm', 'Bluetenblattlaenge in cm', 'Bluetenblattbreite in cm']].mean() print(meanValues.to_string())
Die beiden letzten zwei Zeilen erstellen den Pair Plot mit dem seaborn-Style namens ticks:
sns.set(style="ticks") sns.pairplot(df, hue="Irisart")
Auch dieses Programm gibt eine Tabelle und eine Grafik aus.
Kelchblattlaenge in cm Kelchblattbreite in cm Bluetenblattlaenge in cm Bluetenblattbreite in cm Irisart Iris-setosa 5.006 3.418 1.464 0.244 Iris-versicolor 5.936 2.770 4.260 1.326 Iris-virginica 6.588 2.974 5.552 2.026
Von deskriptiver Statistik zu Machine Learning
Die oben gezeigten Programme in R beziehungsweise Python sind natürlich kein Beispiel für Machine Learning, sondern nur für deskriptive Statistik. Wollte man nun den Computer dazu bringen zu lernen, wie er die Art der Schwertlilie anhand von Kelchblattlänge, Kelchblattbreite, Blütenblattlänge und Blütenblattbreite erkennen soll, so benötigt man einen geeigneten Machine-Learning-Algorithmus. Ein solcher Algorithmus ist beispielweise der Random-Forest-Algorithmus, der bei Golem.de schon vorgestellt wurde.
Ein Artikel der Oxford Protein Informatics Group über die Klassifizierung der Schwertlilienarten mit dem Random Forest Algorithmus bietet vollständige Beispiele für R und für Python.
Fazit
Mit den zwei vorgestellten Programmiersprachen R und Python sowie den dazugehörigen integrierten Entwicklungsumgebungen (IDEs), Paketen und Frameworks können Daten statistisch analysiert und Machine-Learning-Programme entwickelt werden. Wer primär Ad-hoc-Datenanalysen machen will und schon viel Erfahrung mit mengenorientierten Programmiersprachen wie SQL hat, wird wahrscheinlich zu R tendieren. Liegt hingegen der Schwerpunkt in der Entwicklung von größeren Machine-Learning-Programmen oder man benötigt GPUs für rechenintensive Machine-Learning-Algorithmen wie beispielsweise mehrschichtige neuronale Netze, dann wird meistens Python die bessere Wahl sein.
Wie bei jeder Programmiersprache gilt auch bei R und Python: Übung macht den Meister! Einfach den Anaconda Navigator installieren, die IDEs ausprobieren und mit einem kleinen Lernprojekt mit der persönlich favorisierten IDE beginnen.
Wer allgemein Machine-Learning-Algorithmen mit Python ausprobieren möchte, legt mit dem Paket Scikit-learn los. Es kann fast alles, jedoch unterstützt es keine GPUs. Wer unbedingt mit Deep Learning Neural Networks Cuda-fähige Nvidia-GPUs (und hoffentlich eines Tages auch OpenCL-kompatible GPUs von AMD und Intel) zum Glühen bringen will, für den ist Keras mit CNTK und/oder Tensorflow ein guter Einstieg.
Viel Spaß beim Programmieren!
Miroslav Stimac ist Informatiker, promovierter Wirtschaftswissenschaftler und aktuell Teilzeitstudent der Astronomie. Er arbeitet seit 2004 als Entwickler mit branchenübergreifender Projekterfahrung, hauptsächlich in Business Intelligence, Data Science und Statistik. Seine fachlichen Interessenschwerpunkte sind Astronomie, Japanologie, Konsumforschung und Robotik.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
- ohne Werbung
- mit ausgeschaltetem Javascript
- mit RSS-Volltext-Feed
Machine-Learning-Pakete für Python |
Das klingt interessant. Du gibst historische stündliche Daten zu Umgebungsvariablen und...
Schleifen sind auch ein "Anti-Pattern" in R. Für fast alle "iterativen" Prozesse sollte...
Tensorflow am verbreitetsten, CNTK am schnellsten. PyTorch am Facebookgsten...
Psst, das ist zu symbolisch für die NNler ;) Oder es hat einfach zu viele Klammern.
Super, danke für den Hinweis. Es gibt so viel Bewegung auf dem Gebiet, da ist es schwer...