Ich verstehe nicht, was der Zweck des Entscheidungsbaums ist. So wie ich es sehe, ist es eine Reihe von Wenn-Sonst. Warum verwende ich nicht einfach if-else anstelle eines Entscheidungsbaums? Liegt es daran, dass es die Komplexität meines Codes verringert?
Ich werde immer noch von der Berechnung der Entropie und des Informationsgewinns verschont, weil es vorgefertigte Algorithmen für sie gibt, bei denen ich nur die Regeln einstecke, oder? (Wie ID3)
Warum verwenden wir es jetzt beim maschinellen Lernen? Weil wir uns nicht einmal die Regeln ausdenken müssen, bevor wir es mussten? Die Maschine lernt aus den Trainingsdaten und kann anhand der Attribute ein Ergebnis vorhersagen?
Verringert die Implementierung von ML in meinem Code den Overhead mehr und macht meinen Code weniger komplex, effektiver und schneller?
quelle
Antworten:
Du liegst absolut richtig. Ein Entscheidungsbaum ist nichts anderes als eine Reihe von if-else-Anweisungen. Es ist jedoch die Art und Weise, wie wir diese Anweisungen als Baum interpretieren, mit dem wir diese Regeln automatisch erstellen können ... Das heißt , wir geben ein Eingabebeispiel ... was ist das bestes Regelwerk, das beschreibt, welchen Wert einer neuen Eingabe ? Mit ID3 und anderen können wir diese Regeln automatisch erstellen. Es geht nicht wirklich um den Baum, der einmal gebaut wurde, sondern darum, wie wir ihn geschaffen haben.( x1, y1) , . . . , ( xN., yN.) y x
Abgesehen davon verwendet man kaum einen Entscheidungsbaum allein. Der Grund dafür ist genau das, was Sie sagen: Es ist ein ziemlich simples Modell, dem es an Ausdruckskraft mangelt. Es hat jedoch einen großen Vorteil gegenüber anderen Modellen: Man kann einen einzelnen Entscheidungsbaum ziemlich schnell berechnen. Das bedeutet, dass wir Algorithmen entwickeln können, die viele, viele Entscheidungsbäume (Boosting, auch bekannt als AdaBoost und GradientBoosting) für große Datenmengen trainieren. Diese Sammlung (normalerweise mehr als 500) dieser simplen Modelle (Wald genannt) kann dann viel kompliziertere Formen ausdrücken.
Sie können es sich auch so vorstellen: Bei einer 'netten' (dh kontinuierlichen), aber komplizierten Funktion könnten wir versuchen, diese Funktion mithilfe von Linien zu approximieren. Wenn die Funktion kompliziert ist (wie oder so), erzeugen wir einen großen Fehler. Wir könnten jedoch Linien so kombinieren, dass wir das Intervall in kleinere Teile und auf jedem versuchen wir zu approximieren (dhf:[a,b]→R sin(x) [a,b] a=a0<a1<...<aM=b ai,ai+1 f|(ai,ai+1) f auf dieses Intervall beschränkt) durch eine Linie. Durch grundlegende Mathematik (Analyse) können wir dann die Funktion beliebig schließen (dh einen beliebig kleinen Fehler machen), wenn wir genügend Zeilen nehmen. Daher haben wir aus sehr einfachen ein kompliziertes, aber genaues Modell aufgebaut. Das ist genau die gleiche Idee, die (zum Beispiel) GradientBoosting verwendet: Es erstellt einen Wald aus sehr 'dummen' Einzelentscheidungsbäumen.
quelle
Nur zur Antwort von @Fabian Werner hinzufügen - erinnerst du dich daran, wie du die Riemann-Summen-Regel in einem Intro zur Integration gemacht hast? Nun, auch das war eine Reihe gleichmäßig partitionierter if-Anweisungen, mit denen Sie die Fläche unter der Funktion berechnen.
Wenn Sie eine 1D-Funktion zeichnen und die Partitionen gleichmäßig zeichnen, werden Sie feststellen, dass in Bereichen, in denen die Funktion nur einen geringen Gradienten aufweist, benachbarte Partitionen ohne großen Genauigkeitsverlust zusammengeführt werden können. Ebenso wird bei Partitionen mit hohem Gradienten das Hinzufügen weiterer Partitionen die Approximation erheblich verbessern.
Jeder Partitionssatz nähert sich der Funktion an, aber einige sind deutlich besser als andere.
Wenn wir nun zu CART-Modellen übergehen, sehen wir Daten in Form von verrauschten Punkten aus dieser Funktion und werden gebeten, die Funktion zu approximieren. Durch Hinzufügen zu vieler Partitionen können wir ein Modell vom Typ des nächsten Nachbarn überanpassen und im Wesentlichen ausführen. Um dies zu vermeiden, begrenzen wir die Anzahl der Partitionen, die unser Modell verwenden kann (normalerweise in Form von maximaler Tiefe und minimalen Stichproben pro Teilung). Wo sollen wir nun diese Aufteilungen platzieren? Das ist die Frage, mit der sich die Aufteilungskriterien befassen. Bereiche mit höherer „Komplexität“ sollten als Faustregel mehr Teilungen erhalten, und genau das bemühen sich Gini, Entropie usw. zu tun.
Vorhersagen zu treffen ist nur eine Wenn-Sonst-Aussage, aber im Kontext des maschinellen Lernens kommt die Kraft des Modells nicht von dort. Die Leistung ergibt sich aus der Fähigkeit des Modells, skalierbar über und unter der Anpassung abzuwägen, und kann in einem konsistenten probabilistischen Rahmen mit theoretischen Garantien für die Datengrenze abgeleitet werden. Wenn wir eine ähnliche abstrahierte Sicht auf ML-Modelle haben, können wir schließlich sagen, dass neuronale Netze, Kernel-Methoden, Monte-Carlo-Ansätze und vieles mehr einfach Addition und Multiplikation sind. Leider ist das keine sehr nützliche Sicht der Literatur.
quelle
Ein Entscheidungsbaum ist eine Partitionierung der Problemdomäne in Teilmengen mittels Bedingungen. Es wird normalerweise als kaskadiertes Wenn-Dann-Anderes implementiert. Sie können es als einen Begriff sehen, der eine komplexe Entscheidungslogik beschreibt.
Entscheidungsbäume sind weder effizienter noch "unterstützender" für maschinelles Lernen als logische Tests. Sie sind logische Tests.
Denken Sie auch daran, dass jeder Algorithmus nichts anderes als eine Kombination aus arithmetischen Berechnungen und Tests ist, dh ein (normalerweise riesiger) Entscheidungsbaum.
Der Vollständigkeit halber sei erwähnt, dass in einigen Kontexten, wie beispielsweise beim maschinellen Lernen, komplexe Entscheidungsbäume automatisch durch Algorithmen erstellt werden. Das ändert aber nichts an ihrer Natur.
quelle