Machine Learning (3) - Der Machine Learning Prozess

In diesem Teil er Machine Learning Serie gebe ich einen Überblick über den typischen Machine Learning Workflow und gehe daraufhin die einzelnen Komponenten anhand eines einfachen Beispiels durch.

Die Machine Learning Serie ist wie folgt aufgebaut (und wird natürlich stets erweitert):

  1. Was ist das, was ist das nicht und wann ist das gut?
  2. Supervised versus Unsupervised Learning
  3. Machine Learning Prozess
  4. Azure Machine Learning
  5. Azure Machine Learning Ressourcen
  6. Experiment in Azure ML: Binäre Klassifizierung – Titanic überleben, Flugverspätungen und gezieltes Marketing (englisch)

Der Machine Learning Prozess

Wie sieht denn ein typischer Workflow aus, um Machine Learning zu machen? Worauf muss man achten? Wie fängt man an?

Der typische Machine Learning Prozess sieht folgendermaßen aus:

Wir fangen mit Rohdaten an, die Sensordaten frisch aus der Produktion sein können, oder das Klickverhalten der Kunden ist, etc. 80% der Arbeit eines Data Scientists ist darauf hin, die gegebenen Daten zu reinigen und transformieren, um die startbereit für die Berechnung von Modellen zu machen. Nachdem sich ein Modell als super-performant etabliert, nimmt man das Modell her, um Ausgabewerte für künftige Daten zu berechnen/vorhersagen.

Nehmen wir zum Beispiel Handschrifterkennung - und vereinfachen das noch ein wenig: Wir wollen nur Ziffern, die per Hand geschrieben sind, korrekt identifizieren, also 10 Klassen (0, 1,..., 9). Wir haben schon einen Datensatz mit vielen handgeschriebenen Ziffern und den entsprechenden wahren Klassen (also den "richtigen Antworten"), um unser Modell zu trainieren. Schon die erste Ziffer ist insofern interessant, dass die 1 zum Beispiel in den Staaten anders geschrieben wird als in Deutschland. Sobald wir ein Modell trainiert haben (dargestellt durch die "Wurstmaschine"), wird es als Klassifikator hergenommen, um künftige handgeschriebene Ziffern (also neue Eingabewerte) in eines der 10 Klassen einzusortieren (also als Ziffer klassifizieren).

Lasst uns mal ein simples Beispiel durchgehen, und zwar binäre Klassifizierung. Kurze Erinnerung: Bei einer binären Klassifizierung wollen wir Daten in eines von zwei Töpfen einsortieren.

1 Daten

Wir haben folgende Daten:

Wir wollen wissen, ob wir basiert auf erfassten Wetterfaktoren draußen Badminton spielen können oder nicht. Davon mal abgesehen, dass die Tabelle oben nicht in allen Fällen der Wahrheit entspricht (wenn es windig ist, macht Badminton draußen nicht wirklich Spaß), haben wir das Problem stark vereinfacht, indem wir uns nur auf drei einflussreiche Wetterfaktoren fokussieren (natürlich gibt es noch viele weitere Einflussfaktoren, wie dass wir überhaupt noch einen Badminton-Partner brauchen): Aussicht (was die Wettervorhersagen berichten), aktuelle Temperatur und wie windig es ist.

Wollen wir es mathematisch darstellen, ist $\mathbf{X}$ eine Matrix mit 3 Spalten (Aussicht, Temperatur und Windig), und in diesem Fall 8 Reihen - ein Trainingsdatensatz von 8 Datenpunkten mit jeweils 3 Feature-Werten, z.B. $\mathbf{X}_1=(\text{sonnig, niedrig, ja})$ für den ersten Datenpunkt. Entsprechend dazu haben wir den Vektor $\mathbf{y}$ von 8 Elementen - die entsprechenden Labels zum Trainingsdatensatz, z.B. $\mathbf{y}(1)=\text{spielen}$.

Die Unbekannte in diesem "Datensatz" ist die letzte Reihe, wo noch entschieden werden muss, ob wir Badminton spielen oder nicht.

2 Reinigen

Nun gilt es, die Daten zu reinigen. Naja, die Daten oben sahen ja perfekt aus - entspricht aber leider nicht der Realität. Meist sehen sie eher so aus (wobei das immer noch recht sauber aussieht):

Da gibt es unterschiedliche Methoden, wie man bei der Reinigung vorgehen soll: gesamte Datenreihe löschen, Schäfchenwolken mit Bewölkt ersetzen, bei Zahlenspalten die "unsauberen" Werte mit Durchschnittswerten ersetzen, usw.

Oft transformiert man auch noch Kategoriespalten in Float-Format, um das Modellieren später zu erleichtern. Bei Azure Machine Learning ist das aber nicht nötig :)

3 Modell bauen

Nachdem wir Daten gesammelt und gesäubert haben, können wir endlich Modelle bauen. In diesem Artikel will ich nicht darauf eingehen, wie man genau ein Modell baut - dafür gibt es viel zu viele Angehensweisen, die wir mit unterschiedlichen Experimenten in Azure Machine Learning in späteren Teilen dieser Serie abdecken werden.

Letzendlich versuchen wir die Funktion $f(\mathbf{X}) = \mathbf{y}$ zu approximieren. Deswegen stellen wir verschiedene Hypothesen $h(\mathbf{X})$ auf:

$h(\mathbf{X}) = \hat{\mathbf{y}}$

wo $\hat{\mathbf{y}}$ der Vorhersage-Vektor ist, basiert auf dem Modell bzw. der Hypothesenfunktion $h()$ und den Eingabewerten $\mathbf{X}$. Hierbei will man erreichen, dass die Vorhersagen in $\hat{\mathbf{y}}$ entweder gleich oder so nah wie möglich an der richtigen Antwort $\mathbf{y}$ ist. Deswegen ist bei der Modellfindung auch oft von einer Kostenfunktion die Rede, für die es unterschiedliche Möglichkeitn gibt (z.B. Euklidischer Abstand, Hamming-Abstand,...) und die es zu minimieren gilt.

Hier ist nur eine von verschiedenen Möglichkeiten, ein Modell (oder eine Hypothese) zu bauen:

Hier haben wir uns für einen Entscheidungsbaum entschieden. So einen hätte man auch anders strukturieren, zum Beispiel auch so:

4 Vorhersagen

Nun können wir unser erarbeitetes Modell auch anwenden:

Wir nehmen unser erstes Modell und orientieren uns entlang eines Pfades, der durch die Eingabewerte Aussicht=Sonnig, Temperatur=Niedrig und Windig=Nein vorgegeben ist (und grün hervorgehoben ist). Demnach können wir ohne Probleme draußen Badminton spielen (niedrig ist ja immer relativ! ;) )

Zusammengefasst

comments powered by Disqus