Ich bin mir nie sicher, wann ich eine One-Hot-Codierung für nicht geordnete kategoriale Variablen verwenden soll und wann nicht. Ich benutze es immer dann, wenn der Algorithmus eine Distanzmetrik verwendet, um Ähnlichkeit zu berechnen. Kann jemand eine allgemeine Faustregel geben, welche Arten von Algorithmen erfordern würden, dass nicht geordnete kategoriale Merkmale einmalig codiert werden und welche nicht?
12
Antworten:
Die meisten Algorithmen (lineare Regression, logistische Regression, neuronales Netzwerk, Support Vector Machine usw.) erfordern eine Art Codierung für kategoriale Variablen. Dies liegt daran, dass die meisten Algorithmen nur numerische Werte als Eingaben verwenden.
Algorithmen, die keine Codierung erfordern, sind Algorithmen, die direkt mit gemeinsamen diskreten Verteilungen wie Markov-Kette / Naive Bayes / Bayesian-Netzwerk, baumbasiert usw. umgehen können .
Zusätzliche Kommentare:
Eine Hot-Codierung ist eine der Codierungsmethoden. Hier ist eine gute Ressource für die Codierung kategorialer Variablen (nicht auf R beschränkt). R BIBLIOTHEK KONTRASTCODIERUNGSSYSTEME FÜR KATEGORISCHE VARIABLEN
Auch ohne Codierung kann der Abstand zwischen Datenpunkten mit diskreten Variablen definiert werden, z. B. Hamming-Abstand oder Levenshtein-Abstand
quelle
AFAIU, es hat mehr mit den bestimmten Daten zu tun , weniger mit dem bestimmten Algorithmus . Insbesondere hängt es davon ab, ob die Kategorien eine sinnvolle Reihenfolge aufweisen oder nicht.
Betrachten Sie zwei Fälle. In der ersten haben Sie die Kategorien schlecht, meh, gut und in der zweiten haben Sie Apfel, Orange, Birne . Im ersten Fall gibt es eine natürliche Ordnung, weil meh wahrscheinlich zwischen schlecht und gut liegt , aber wahrscheinlich passiert nichts Ähnliches bei Apfel, Orange, Birne .
Wenn Sie im ersten Fall eine One-Hot-Codierung vermeiden, "verlieren" Sie die Informationen über die Bestellung. Wenn Sie für den zweiten Fall eine One-Hot-Codierung verwenden, weisen Sie den Kategorien eine Reihenfolge zu, die natürlich nicht zutrifft.
Warum? Angenommen, eine der Funktionen ist eine kategorische schlechte, meh, gut , und Sie haben drei Instanzen, 1, 2 und 3, in denen sie identisch sind, außer dass 1 schlecht , 2 meh und 3 gut ist. Sie möchten dem Algorithmus wahrscheinlich mitteilen, dass 1 2 ähnlicher ist als 3.
quelle
Kein Algorithmus für maschinelles Lernen erfordert eine Hot-Codierung. Es ist eine Methode für den Umgang mit kategorialen Variablen. Dummy-Variablen ist eine andere. Traditionell waren Dummy-Variablen die bevorzugte Lösung. Beispielsweise erstellt die R-Funktion lm () automatisch Dummy-Variablen für kategoriale Daten. Wenn Sie Python und Scikt-Learn verwenden, dann glaube ich, dass viele seiner Algen eine One-Hot-Codierung von kategorialen Variablen erfordern. Ich glaube, dass tensorFlow auch eine One-Hot-Codierung erfordert. Hier können Sie festlegen, wie die Variable codiert werden soll. Es gibt keinen Grund, warum Dummy-Variablen nicht stattdessen im Code verwendet werden könnten. Dies alles muss sich mit der tatsächlichen Code-Implementierung des Algorithmus befassen.
Wie hxd1011 hervorhebt, ist das Problem der Beschreibung des 'Abstandes' zwischen kategorialen Variablen ein heikles Thema. Zusätzlich zu den genannten Entfernungen gibt es auch Jaccard-Entfernungen. Einige ML-Methoden, insbesondere SVMs, sind für kategoriale Daten ungeeignet, und das Hinzufügen kategorialer Variablen kann / wird (beide, Sie entscheiden) zu Modellen mit sehr schlechter Vorhersagekraft führen. Die meisten Ensemble-Modelle verarbeiten kategoriale Daten unverändert und erfordern keine Vorverarbeitung.
quelle