• IT-Karriere:
  • Services:

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. dSPACE GmbH, Böblingen
  2. thinkproject Deutschland GmbH, Köln, München

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.

Bitte aktivieren Sie Javascript.
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
  1.  
  2. 1
  3. 2
  4. 3


Anzeige
Hardware-Angebote
  1. (reduzierte Überstände, Restposten & Co.)

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
       


Cowboy 3 vs. Vanmoof S3 im Test: Das Duell der Purismus-Pedelecs
Cowboy 3 vs. Vanmoof S3 im Test
Das Duell der Purismus-Pedelecs

Schwarz, schlank und schick sind die urbanen E-Bikes von Cowboy und Vanmoof. Doch nur eines der Pedelecs liest unsere Gedanken.
Ein Praxistest von Martin Wolf

  1. Montage an der Bremse E-Antrieb für Mountainbikes zum Nachrüsten
  2. Hopper Dreirad mit Dach soll Autos aus der Stadt verdrängen
  3. Alternative zum Auto ADAC warnt vor Überlastung von E-Bikes

Java 15: Sealed Classes - Code-Smell oder moderne Erweiterung?
Java 15
Sealed Classes - Code-Smell oder moderne Erweiterung?

Was bringt das Preview Feature aus Java 15, wie wird es benutzt und bricht das nicht das Prinzip der Kapselung?
Eine Analyse von Boris Mayer

  1. Java JDK 15 geht mit neuen Features in die General Availability
  2. Java Nicht die Bohne veraltet
  3. JDK Oracle will "Schmerzen" von Java beheben

Burnout im IT-Job: Mit den Haien schwimmen
Burnout im IT-Job
Mit den Haien schwimmen

Unter Druck bricht ein Webentwickler zusammen - zerrieben von zu eng getakteten Projekten. Obwohl die IT-Branche psychische Belastungen als Problem erkannt hat, lässt sie Beschäftigte oft allein.
Eine Reportage von Miriam Binner


      •  /