Führen Entscheidungsbäume eine Aufteilung von Knoten durch, indem sie in der Praxis kategoriale Werte in numerische Werte konvertieren?


9

Verwenden wir in Entscheidungsbäumen bei der Klassifizierung oder Regression nur numerische Werte? Angenommen, ich habe eine kategoriale Spalte Windals Feature. Angenommen , ich habe am 5 Zeilen (Beobachtungen) und die Werte für Windsind [ high, low, high, medium, medium].

Kann ich diese kategorialen Daten in einen Entscheidungsbaumklassifikator (wie scikit-learn) einspeisen, werden die Daten übernommen? Das heißt, wird die Aufteilung des Knotens basierend auf Wind auf kategorialen Werten highmit Zählung 2, mediummit Zählung 2 und lowmit Zählung 1 erfolgen? Oder wird das System ihn in eine Dummy-Variable konvertieren?

Antworten:


15

Die Theorie ist anders als die Praxis. Grundsätzlich wird in der Praxis nicht immer berücksichtigt, wie die Algorithmen theoretisch beschrieben wurden. Beim Scikit-Lernen werden die Entscheidungsbäume nur unter Berücksichtigung numerischer Merkmale implementiert. Dies ist falsch oder zumindest nicht vollständig, da Sie für nominale Variablen andere Möglichkeiten haben, Teilungen zu finden als für numerische Variablen.

Ein kurzes Beispiel. Numerische Variablen werden zuerst sortiert und durchlaufen die sortierten Werte. Neue Tests werden erstellt und ausgewertet. Tests an numerischen Eingaben haben die Form: links alle Werte größer als gleich mit einem möglichen Teilungswert, rechts die anderen. Für Nennwerte gibt es verschiedene Tests, von denen einer die Form hat: Links gehen Instanzen mit einer Kategorie, rechts der Rest der Instanzen.

Man kann eine nominelle Variable immer in eine numerische Variable umwandeln, indem man irgendeine Art von Codierung verwendet. Dies ist in Ordnung, solange Sie mit den codierten Werten nicht rechnen. Das Problem bei der Implementierung von scikit-learn ist jedoch, dass die Logik für numerische Variablen beim Teilen verwendet wird, die auf die numerische Codierung einer nominalen Variablen angewendet wird. Daher können Sie das Verhalten für Nominale, das ich Ihnen als Beispiel gegeben habe, wirklich nicht reproduzieren.

Es wurde auch die einzige Hot-Coding-Alternative in Betracht gezogen. Dies bedeutet, dass Sie eine Nominalvariable in mehrere Binärvariablen umwandeln (eine für jede Ebene der Nominalvariablen). Die Behandlung der numerischen Codierung von nominalen Variablen oder einer Hot-Codierung kann zu Ergebnissen führen (daran besteht kein Zweifel). Der Punkt ist, dass sie andere Ergebnisse liefern als der theoretisch angegebene Algorithmus, da sie ihn nicht vollständig implementieren.

Es gibt verschiedene ML-Bibliotheken, von denen die meisten die Behandlung kategorialer Variablen unterstützen (R nennt sie Faktoren, Weka nennt sie Nominale usw.).

[ Später bearbeiten: Kommentare von Soren und Candic3 adressieren ]

Soweit ich weiß, berücksichtigt die Spezifikation von Breiman für zufällige Wälder binäre Teilungen für nominale Variablen aus allen Gruppen von Variablenkombinationen. Wie Soren sagte, sind dies . Das ist zu viel. Es gibt jedoch zwei Dinge, die dazu gesagt werden können.2L1

Erstens müssen Sie dieses Rezept nicht für nominal befolgen. Sie können nach binären Teilungen für nominale Variablen der Form eins gegen alle suchen. Diese sind kurz, selbst für Variablen mit vielen Ebenen. Man kann sagen, dass man sich mit etwas Codierung in binäre Indikatoren verwandeln kann. Dies ist wahr, aber nicht vollständig, da Sie irgendwie mit fehlenden Werten umgehen müssen, was bei der Codierung keine leichte Aufgabe ist. Die Verwendung von Ersatzzeichen oder gewichteten Zufällen ist nicht möglich. Irgendwie müssen Sie eine variable Imputation durchführen, bevor die Codierung stattfindet, oder als eine andere Kategorie fehlen.

Die zweite Sache ist, dass es im Fall einer binären Klassifizierung für Gini-Verunreinigungen Beweise gibt, die zeigen, dass die beste Trennung von allen viel schneller gefunden wird, wenn Sie das folgende Verfahren anwenden. Berechnen Sie die Reinheitsfunktion für jede Ebenenuntermenge. Sortieren Sie die Variablen nach dem Wert der Verunreinigungsfunktion, die für jede Teilmenge berechnet wurde. Berechnen Sie dann binäre Teilungen von Teilmengen, bei denen auf einer Seite zuerst Variablen zuvor sortiert wurden und in der anderen Gruppe die verbleibenden Werte. Diese Prozedur wird in linearer Zeit berechnet, ist also sehr effizient und kann tatsächlich Variablen mit mehr als 32 Ebenen verarbeiten. Einzelheiten hierzu finden Sie unter Elemente des statistischen Lernens, 2ed - Seite 310, Abschnitt 9.2.4 Andere Probleme . Dort finden Sie eine Erklärung und folgende Hinweise.2L1k

Meine persönliche Schlussfolgerung zu solchen Themen lautet wie folgt. Verwenden Sie nach Möglichkeit eine kategoriale Behandlung. Dies ist manchmal sogar für eine große Anzahl von Ebenen möglich. Bei einer großen Anzahl von Ebenen sollten Sie jedoch mit Vorsicht vorgehen. Zu viele Pegel können mit geringer Vorhersagekraft übersetzt werden. Vielleicht ergibt eine Gruppierung der Ebenen mehr als die direkte Verwendung der Variablen.

Zum Beispiel, wenn Sie Postleitzahlen haben. Die Anzahl der Levels kann sehr groß sein. Eine direkte Behandlung ist möglich, aber möglicherweise weist eine gewisse Dekodierung von Postleitzahlen in Regionen ein höheres Maß an Allgemeinheit und damit eine höhere Vorhersagekraft auf.

Meiner Meinung nach sollte zu viel Granularität in nominalen Ebenen analysiert und interpretativer gelöst werden als direkt durch Programmieren von Tricks.


1
Schön beantwortet. Also hat R diese Fähigkeit. Danke für die Auskunft.
Sarath R Nair

R kann das. Beachten Sie jedoch, dass in R-Faktor-Variablen eine maximale Anzahl von Ebenen zulässig ist. Das Maximum ist 32 oder 64 oder etwas anderes, ich erinnere mich jetzt nicht. Ich hoffe, Sie haben diesen Fall nicht.
Rapaio

2
Und wenn mehr als 32 Ebenen vorhanden sind, können Sie stattdessen den extraTrees-Algorithmus verwenden.
Soren Havelund Welling

2
R-Faktoren können viel mehr Ebenen haben. Implementierungen von Baummodellen wie randomForest können nicht mehr als 32 Ebenen verarbeiten, da jede mögliche Aufteilung versucht wird und diese exponentiell zunimmt, z. B. 2 ^ (32-1) = 2,1 10 ^ 9. Bei mehr als 32 Ebenen kann stattdessen der extraTrees-Algorithmus verwendet werden, bei dem nur ein viel kleinerer zufälliger Bruchteil von Teilungen versucht wird.
Soren Havelund Welling

Wie geht man also theoretisch richtig damit um? Ich bin mir nicht sicher, ob ich das von deiner Antwort bekomme, @rapaio. Vielen Dank.
Candic3

2

Im Allgemeinen sollten kategoriale Variablen als solche behandelt und keine numerischen Dummy-Werte zugewiesen werden. Stellen Sie sich einen Fall vor, in dem die Variable "Haarfarbe" ist und die möglichen Werte "rot, schwarz, blond, braun" sind. Das Zuweisen eines numerischen Werts zu dieser Variablen macht keinen Sinn, da es keine inhärente Reihenfolge gibt. Wenn die Werte Ihrer Variablen eine inhärente Reihenfolge aufweisen, wie in Ihrem Wind-Beispiel, müssen Sie diese möglicherweise direkt (abhängig von Ihrem Analysepaket) als numerische Werte angeben und jeden Variablenstatus direkt mit einer Zahl verknüpfen - Ihr Paket wird dies wahrscheinlich nicht unbedingt tun Bringen Sie sie standardmäßig in die Reihenfolge Niedrig, Mittel, Hoch.


1
Ich habe also eine Frage. Wenn bei Haarfarben das Programm wie scikit learn eine Spalte mit Haarfarben erhält, zählt es dann die eindeutige Anzahl von Haarfarben? Mein Hauptzweifel, dass ein Computer Berechnungen oder Vergleiche basierend auf numerischen Werten durchführen kann. Wenn das System in diesem Fall eine Variable oder einen Wert als "schwarze" Haarfarbe findet, wie kommt es, dass der Computer weiß, dass dies eine einzigartige Sache ist. Ich sollte den Knoten teilen, indem ich es in Betracht ziehe. Wie passiert das in der Praxis?
Sarath R Nair
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.