Angenommen, ich habe ein kategorisches Merkmal, Farbe, das die Werte annimmt
['rot', 'blau', 'grün', 'orange'],
und ich möchte es verwenden, um etwas in einem zufälligen Wald vorherzusagen. Wie kann ich sklearn mitteilen, dass die vier Dummy-Variablen wirklich eine Variable sind, wenn ich sie mit einem Tastendruck codiere (d. H. In vier Dummy-Variablen ändere)? Insbesondere wenn sklearn zufällig Features zur Verwendung an verschiedenen Knoten auswählt, sollte es entweder die roten, blauen, grünen und orangefarbenen Dummies zusammen enthalten oder keines von ihnen enthalten.
Ich habe gehört, dass es keine Möglichkeit gibt, dies zu tun, aber ich würde mir vorstellen, dass es eine Möglichkeit geben muss, mit kategorialen Variablen umzugehen, ohne sie willkürlich als Zahlen oder ähnliches zu kodieren.
Nein, das gibt es nicht. Jemandes arbeitet daran und der Patch wird vielleicht eines Tages mit dem Mainline-Code zusammengeführt, aber im Moment gibt es keine Unterstützung für kategoriale Variablen in scikit-learn, außer für Dummy-Codierungen (One-Hot).
Die meisten Implementierungen von Random Forest (und vielen anderen Algorithmen für maschinelles Lernen), die kategoriale Eingaben akzeptieren, automatisieren entweder nur die Codierung kategorialer Features für Sie oder verwenden eine Methode, die für eine große Anzahl von Kategorien rechnerisch nicht mehr umsetzbar .
Eine bemerkenswerte Ausnahme ist H2O . H2O verfügt über eine sehr effiziente Methode für die direkte Verarbeitung kategorialer Daten, wodurch es häufig eine Edge-over-Tree-Methode erhält, für die eine One-Hot-Codierung erforderlich ist.
Sie müssen die kategoriale Variable in eine Reihe von Dummy-Variablen umwandeln. Ja, ich weiß, dass es ärgerlich ist und unnötig erscheint, aber so funktioniert sklearn. wenn Sie Pandas benutzen. benutze pd.get_dummies, es funktioniert wirklich gut.