Machine Learning Grundlagen – Random Forest einfach erklärt
Machine Learning beruht wie es der Name schon sagt, auf dem Wissen einer Maschine, welches sie sich durch Lernen aneignet. Um dieses Lernen durchzuführen werden deshalb meist größere Mengen an Trainingsdaten benötigt. Grundsätzlich unterscheidet man bei Training von Modellen zwischen Supervised Learning und Unsupervised Learning.
Beim Supervised Learning werden beim Trainingsvorgang Eingangsdaten mit den erwarteten Ergebnissen ein gekippt. Das Modell soll somit Ein und Ausgangsdaten verknüpfen, um zukünftig aussagen/ausgaben basierend auf den Trainingsdaten treffen zu können. Diese Vorgehensweise kann man gut anhand von Bilderkennung verdeutlichen.
Wenn man einem Modell mit Bildern von Äpfeln und Orangen trainiert wird dieses Modell im Produktiveinsatz beim erhalten eines Bilds von einem Apfel sagen können, dass auf dem Bild ein Apfel zu sehen ist. Möchte man von dem Modell nun aber bei einem Bild von einer Banane wissen, dass auf dem Bild eine Banane zu sehen ist, wird man kein Ergebnis erhalten, da das Modell in den Trainingsdaten keine Bilder von Bananen hatte und somit nie gelernt hat wie eine Banane aussieht.
Bei dem Unsupervised Learning geht man hingegen etwas anders vor – man gibt dem Modell lediglich die Eingangsdaten und gibt keine Ergebnisse vor. Diese Methode wird zum Beispiel beim Clustering von Datensätzen genutzt. Hierbei geht es darum, dass das Modell keine eindeutigen Ergebnisse erzielen, sondern viel eher eine Gruppierung der Datensätze herbeizuführen.
K-Means Algorithmus zusammengefasst
Ein häufig verwendeter Algorithmus dafür ist der K-Means Algorithmus. Dieser Algorithmus wird verwendet um Datensätze in k beliebige Cluster einzuteilen. Dabei muss anfänglich angegeben werden, wie viele Cluster (k) gewünscht sind, folgend werden im ersten Schritt zufällig k Punkte aus dem Datensatz ausgewählt. Nun wird der Abstand zwischen den k Punkten genommen und auf der hälfte eine Grenze (engl. Boundary Line) gezogen und somit alle Punkte einem ersten Cluster zugeordnet. Im nächsten Schritt wird der Abstand der zufällig gewählten k Punkte zu den jeweiligen Punkten im Cluster gemessen und somit eine erste Mitte des Clusters bestimmt.
Folgend wird eine Iteration des ersten Vorgangs vorgenommen, wobei fortan nicht mehr die anfänglich gewählten k Punkte des Datensatzes als Ausgangspunkte für die Berechnung der Mitte genutzt werden, sondern von nun an die Mitte der k Cluster genommen wird. Diese Iteration wird nun so lange vorgenommen, bis die Grenze zwischen den k Clustern sich bis auf eine geringe Toleranz nicht mehr bewegt. Nun erhält man die anhand des K-Means Algorithmus gruppierten Daten und kann folgend versuchen die Unterschiede zwischen den Gruppen genauer zu analysieren oder die Gruppierung durch die Erhöhung von k zu verfeinern.
Random Forest einfach erklärt
Random Forest ist wahrscheinlich einer der meist verbreitetste Algorithmus speziell für die Klassifizierung von Daten. Der Algorithmus baut grundsätzlich auf der Nutzung von Decision Trees auf.
Ein Decision Tree ist einem Graphen ähnliches Tool zur Unterstützung bei dem Treffen von Entscheidungen[1]. Es gibt pro Baum immer ein Root Node, von welchem beliebig viele Child Nodes abgehen können. In meinem folgenden Beispiel konzentrieren wir uns allerdings auf die einfache Variante des Baums, welcher pro Node immer nur 2 Child Nodes hat. Bei der Benutzung eines solchen Baumes wird an jeder Node eine Frage gestellt und man je nach Entscheidung an eine andere Node weitergeleitet. Ziel dieses Prozederes ist es, die besten Fragen in der besten Reihenfolge zu stellen, um Elemente am Ende des Baumes der richtigen Klasse zuzuordnen.
Für die Benutzung im Bereich des Machine Learning und speziell die Anwendung beim Random Forest Algorithmus lässt man einen solchen Baum aufgrund von Trainigsdaten selbständig entstehen. Das System lernt also, indem es eine Reihe von Fragen stellt, selbständig wie man mit hoher Wahrscheinlichkeit zur richtigen Antwort gelangt. Im Detail sind Decision Trees noch wesentlich komplexer und werden zu einem späteren Zeitpunkt genauer erläutert. Für die Verwendung beim Random Forest Algorithmus reicht ein grundsätzliches Verständnis von Decision Trees.
Der Grundgedanke des Random Forest Algorithmus ist, dass man n Zahl von Bäumen mit jeweils einem zufälligen Ausschnitt der Daten erstellt und so bei der Nutzung durch die Kombination der Ergebnisse aller Bäume ein best mögliches Ergebnis erhält. Im Detail fängt man mit einem geeigneten Datensatz an. Es ist gerade am Anfang wichtig einen möglichst ausgeglichenen Datensatz zu nutzen, welches sich allerdings später in der Realität meist als äußerst kompliziert darstellt. Ein ausgeglichener Datensatz erkennt man daran, dass alle Klassifizierungen in annähernd gleicher Anzahl vorhanden sind und man nicht ein Übergewicht an einzelnen oder gar einer Klassifizierung hat.
Es gibt noch diverse weitere Möglichkeiten den Datensatz genauer mathematisch zu analysieren, um zum Beispiel das Gewicht der einzelnen Variablen im Gesamtzusammenhang zu messen. Eines der größten Probleme dabei könnte das „Data Leakage“ sein, welches eine extrem hohe Abhängigkeit zwischen einem Faktor des Datensatzes und der zu erkennenden Klasse beschreibt. Des Weiteren kann man Data Leakage auch nach dem Training beim Testen eines Modells daran erkennen, dass es irreal gute/genaue Ergebnisse erziehlt. [2]
Nun kann man beginnen den Random Forest Algorithmus auf das die bestehenden Daten anzuwenden und diese somit als Trainings und Testdaten zu verwenden. Im ersten Schritt unterteilt man die Daten in ein Trainings Set und ein Test Set. Das Trainings Set dient zum Training des Algorithmus, er erhält die Feature Daten mit der Klasse, welche zugeordnet werden soll und wird so trainiert.
Supervised Training
Dieses Verfahren nennt sich Supervised Training und wurde im Grundlagenteil bereits genauer erklärt. Die Test Daten erhält der Algorithmus während des Trainings noch nicht, weshalb sie im ersten Schritt unbekannt für den Algorithmus bleiben. Diese kommen erst im späteren Teil zur Anwendung, wenn der Algorithmus getestet werden soll. Anhand dieser Daten lässt sich die ungefähre Genauigkeit des Modells bestimmen, da im Grunde viele Klassifizierungen vom Modell vorgenommen werden, welche mit der Ursprünglichen Klassifizierung abgeglichen werden und man so eine Varianz messen kann.
Grundsätzlich wird beim Random Forest Algorithmus eine zufällige Auswahl von Datensätzen angewendet. Aus dem gesamten Datenpool werden pro Baum somit zufällige Datensätze Ausgewählt und der einzelne Baum wird ausschließlich mit diesen Datensätzen trainiert. Des Weiteren können werden häufig auch nach dem Zufallsprinzip eine einheitlich definierte Anzahl von Features aus dem Datensatz isoliert und nur diese für das Training eines Baumes verwendet. Somit kann man zusammengefasst sagen, dass jeder Baum zufällig ausgewählten Features eines zufällig ausgewählten Teils des gesamten Datensatzes besteht.
Für die Initialisierung eines neue Random Forest Models kann diverse Parameter mitgeben, welche für die Genauigkeit des Modells endscheidend seien können. Das optimieren dieser Parameter nennt sich Hyperparameter Tunig, auf welches ich auch später noch eingehen werde, da ich erst einmal Grundlegende Parameter genauer beschreiben möchte.
Grundsätzlich beziehe ich meine Beispiele aus dem Random Forest Algortihmus von Scikit Learn in der Sprache Python. Der erste dieser Parameter (n_estimators), auf welche ich genauer eingehen möchte ist die Anzahl der Bäume im Forest. Dieser Parameter muss bei dem Training eines Modells festgelegt werden und endscheidet darüber, wie viele Bäume mit einem zufälligen Teil der Features eines zufälligen Datensatzes trainiert werden.
Ein weiterer Parameter ist der warm_start Parameter, welcher neue Descision Trees bei der Erstellung speichert. Dieses hat den Vorteil, dass bei der Anpassung des „n_estimators“ Parameters die Bäume gar nicht, beziehungsweise nur teilweise neu erstellt werden müssen.
Der Bootstrap Parameter
Der letzte Parameter, auf welchen ich genauer eingehen möchte ist der „bootsrap“ Parameter. Wenn man diesen Parameter auf „false“ setzt, werden immer alle Features des Datensatzes für die Erstellung eines jeden Baumes genutzt (n_estimators wird ignoriert). Dieser Parameter ist standartmäßig auf true gesetzt, da das Bootstap Agregagating eine Minderung der Varianz und eine Verbesserung der Stabilität des Models mit sich bringt.
Der größte Vorteil der Auswahl immer verschiedener Feature Daten und Datensätze aus den Gesamt Daten ist, dass z.B. einzelne Datensätze oder Feature Punkte nicht so einflussreich auf das gesamte Modell sein können, wie wenn sie in jedem Baum des Forest berücksichtigt wären. Da die Grundlagen des Random Forest Algorithmus nun beschrieben wurden möchte ich noch kurz auf die finale Zuordnung eines Datensatzes zu einer Klasse eingehen.
In der Anwendung wird ein zu klassifizierender Datensatz grundsätzlich durch jeden Baum eines Modells gereicht. Jeder Baum gibt dabei eine eigene Klassifizierung zu dem verarbeiteten Datensatz ab. Um schlussendlich zur finalen Klassifizierung des Modells für den entsprechenden Datensatz zu gelangen wird der Mittelwert aller von den Bäumen zurückgegebenen Klassen berechnet und ausgegeben, wobei die Klasse mit der größten Zahl aus Sicht des Modells mit größter Wahrscheinlichkeit die passende Klasse für den Datensatz ist.
Eine solche Klassifizierung kann für alle Formen von Daten angewendet werden, auch für Bilder und Videos. Bei der Klassifizierung von Bilden werden diese in binäre Matrizen konvertiert und können so klassifiziert werden. Das Verständnis von Decision Trees und dem Random Forest Modell dient somit als Grundlage, um die Funktionsweise von Machine Learning zu verstehen
Buchempfehlungen/Quellen:
[1] Data Science for Transport, Dr. Charles Fox,
[2] Machnie Learning and Data Science, Daniel D. Gutierrez