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.2L−1
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.2L−1k
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.
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.
quelle