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. KVL Bauconsult München GmbH, München
  2. Finanzbehörde - Personalabteilung Freie und Hansestadt Hamburg, Hamburg

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
Top-Angebote
  1. (u. a. For Honor für 11,50€, Anno 1404 Königsedition für 3,74€, Anno 2070 Königsedition...
  2. (u. a. Total war - Three Kingdoms für 35,99€, Command & Conquer - The Ultimate Collection für 4...

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
       


iPad OS ausprobiert

Apple hat die erste öffentliche Betaversion vom neuen iPad OS veröffentlicht. Wir haben uns das für die iPads optimierte iOS 13 im Test genauer angeschaut.

iPad OS ausprobiert Video aufrufen
Endpoint Security: IT-Sicherheit ist ein Cocktail mit vielen Zutaten
Endpoint Security
IT-Sicherheit ist ein Cocktail mit vielen Zutaten

Tausende Geräte in hundert verschiedenen Modellen mit Dutzenden unterschiedlichen Betriebssystemen. Das ist in großen Unternehmen Alltag und stellt alle, die für die IT-Sicherheit zuständig sind, vor Herausforderungen.
Von Anna Biselli

  1. Datendiebstahl Kundendaten zahlreicher deutscher Firmen offen im Netz
  2. Metro & Dish Tisch-Reservierung auf Google übernehmen
  3. Identitätsdiebstahl SIM-Dieb kommt zehn Jahre in Haft

Wizards Unite im Test: Harry Potter Go mit Startschwierigkeiten
Wizards Unite im Test
Harry Potter Go mit Startschwierigkeiten

Der ganz große Erfolg ist das in der Welt von Harry Potter angesiedelte Wizards Unite bislang nicht. Das dürfte mit dem etwas zähen Einstieg zusammenhängen - Muggel mit Durchhaltevermögen werden auf den Straßen dieser Welt aber durchaus mit Spielspaß belohnt.
Von Peter Steinlechner

  1. Pokémon Go mit Harry Potter Magische Handy-Jagd auf Dementoren

Google Maps in Berlin: Wenn aus Aussetzfahrten eine neue U-Bahn-Linie wird
Google Maps in Berlin
Wenn aus Aussetzfahrten eine neue U-Bahn-Linie wird

Kartendienste sind für Touristen wie auch Ortskundige längst eine willkommene Hilfe. Doch manchmal gibt es größere Fehler. In Berlin werden beispielsweise einige Kleinprofil-Linien falsch gerendert. Dabei werden betriebliche Besonderheiten dargestellt.
Von Andreas Sebayang

  1. Kartendienst Qwant startet Tracking-freie Alternative zu Google Maps
  2. Nahverkehr Google verbessert Öffi-Navigation in Maps
  3. Google Maps-Nutzer können öffentliche Veranstaltungen erstellen

    •  /