Abo
  • IT-Karriere:

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.

Stellenmarkt
  1. ORBIT Gesellschaft für Applikations- und Informationssysteme mbH, Köln
  2. SARSTEDT AG & Co. KG, Nümbrecht

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

  1. library(GGally)
  2.  
  3. df <- read.csv(file="c:\\IrisAnalysis\\IrisData.csv", header=TRUE, sep=",")
  4. aggregate(df[, 1:4], list(df$Irisart), mean)
  5.  
  6. 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

  • Pair Plot erstellt mit R und GGally (Bild: Miroslav Stimac)
  • Pair Plot erstellt mit Python und Seaborn (Bild: Miroslav Stimac)
Pair Plot erstellt mit R und GGally (Bild: Miroslav Stimac)

Programm in Python

  1. import pandas as pd
  2. import seaborn as sns
  3.  
  4. df = pd.read_csv('IrisData.csv', delimiter=',', header=0, index_col=False)
  5.  
  6. groupedData = df.groupby('Irisart')
  7. meanValues = groupedData[['Kelchblattlaenge in cm', 'Kelchblattbreite in cm',
  8. 'Bluetenblattlaenge in cm', 'Bluetenblattbreite in cm']].mean()
  9. print(meanValues.to_string())
  10.  
  11. sns.set(style="ticks")
  12. 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


  • Pair Plot erstellt mit R und GGally (Bild: Miroslav Stimac)
  • Pair Plot erstellt mit Python und Seaborn (Bild: Miroslav Stimac)
Pair Plot erstellt mit Python und Seaborn (Bild: Miroslav Stimac)

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.

 Machine-Learning-Pakete für Python
  1.  
  2. 1
  3. 2
  4. 3


Anzeige
Spiele-Angebote
  1. 2,22€
  2. 2,40€
  3. 0,49€
  4. (-24%) 18,99€

Frankenwein 22. Nov 2018

Das klingt interessant. Du gibst historische stündliche Daten zu Umgebungsvariablen und...

henryanki 15. Nov 2018

Schleifen sind auch ein "Anti-Pattern" in R. Für fast alle "iterativen" Prozesse sollte...

0110101111010001 13. Nov 2018

Tensorflow am verbreitetsten, CNTK am schnellsten. PyTorch am Facebookgsten...

Bruto 13. Nov 2018

Psst, das ist zu symbolisch für die NNler ;) Oder es hat einfach zu viele Klammern.

Frankenwein 13. Nov 2018

Super, danke für den Hinweis. Es gibt so viel Bewegung auf dem Gebiet, da ist es schwer...


Folgen Sie uns
       


Lenovo Smart Display im Test

Die ersten Smart Displays mit Google Assistant kommen von Lenovo. Die Geräte sind ordentlich, aber der Google Assistant ist nur unzureichend an den Touchscreen angepasst. Wir zeigen in unserem Testvideo die Probleme, die das bringt.

Lenovo Smart Display im Test Video aufrufen
Raumfahrt: Jeff Bezos' Mondfahrt
Raumfahrt
Jeff Bezos' Mondfahrt

Blue Moon heißt die neue Mondlandefähre des reichsten Mannes der Welt, Jeff Bezos. Sie ist vor exklusivem Publikum und ohne Möglichkeit von Rückfragen vorgestellt worden. Wann sie fliegen soll, ist unklar.
Von Frank Wunderlich-Pfeiffer

  1. Artemis Trump will Nasa-Budget für die Mondlandung aufstocken
  2. SpaceIL Israelische Mondlandung fehlgeschlagen
  3. Raumfahrt Trump will bis 2024 Astronauten auf den Mond bringen

Kontist, N26, Holvi: Neue Banking-Apps machen gute Angebote für Freelancer
Kontist, N26, Holvi
Neue Banking-Apps machen gute Angebote für Freelancer

Ein mobiles und dazu noch kostenloses Geschäftskonto für Freiberufler versprechen Startups wie Kontist, N26 oder Holvi. Doch sind die Newcomer eine Alternative zu den Freelancer-Konten der großen Filialbanken? Ja, sind sie - mit einer kleinen Einschränkung.
Von Björn König


    Katamaran Energy Observer: Kaffee zu kochen heißt, zwei Minuten später anzukommen
    Katamaran Energy Observer
    Kaffee zu kochen heißt, zwei Minuten später anzukommen

    Schiffe müssen keine Dreckschleudern sein: Victorien Erussard und Jérôme Delafosse haben ein Boot konstruiert, das ohne fossilen Treibstoff auskommt. Es kann sogar auf hoher See selbst Treibstoff aus Meerwasser gewinnen. Auf ihrer Tour um die Welt wirbt die Energy Observer für erneuerbare Energien.
    Ein Bericht von Werner Pluta

    1. Umweltschutz Kanäle in NRW bekommen Ladesäulen für Binnenschiffe
    2. Transport DLR plant Testfeld für autonome Schiffe in Brandenburg
    3. C-Enduro Britische Marine testet autonomes Wasserfahrzeug

      •  /