2014-07-12 9 views
32

Sagen, ich habe eine kategorische Funktion, Farbe, die die WerteKann sklearn zufällige Gesamtstruktur direkt kategorische Funktionen behandeln?

[ ‚rot‘, ‚blau‘, ‚grün‘, ‚Orange‘] etwas,

und ich möchte es verwenden, um vorherzusagen, nimmt in einem zufälligen Wald. Wenn ich es ein-hot kodiere (d. H. Ich ändere es in vier Dummy-Variablen), wie sage ich sklearn, dass die vier Dummy-Variablen wirklich eine Variable sind? Genauer gesagt, wenn sklearn nach dem Zufallsprinzip Merkmale auswählt, die an verschiedenen Knoten verwendet werden sollen, sollte es entweder die roten, blauen, grünen und orangefarbenen Dummies zusammen umfassen, oder es sollte keine von ihnen enthalten.

Ich habe gehört, dass es keine Möglichkeit gibt, dies zu tun, aber ich würde mir vorstellen, dass es einen Weg geben muss, mit kategorischen Variablen umzugehen, ohne sie willkürlich als Zahlen oder etwas Ähnliches zu kodieren.

+0

Dies ist seit 2014 eine nützliche und seit langem bestehende Anfrage auf sklearn. Eine Überlegung war, ob sie die Implementierung der neuen [pandas Categorical] (http://pandas.pydata.org/pandas-docs/stable /categorical.html) oder generisches numpy. – smci

Antwort

23

Nein, gibt es nicht. Jemandes working on this und der Patch könnte irgendwann in Mainline zusammengeführt werden, aber im Moment gibt es keine Unterstützung für kategorische Variablen in Scikit-lernen außer Dummy (One-Hot) -Codierung.

+0

Zehn Daumen hoch, wenn das jemals endlich umgesetzt wird. Persönlich würde ich pandas Categorical gegenüber einfach numpy priorisieren, aber die Core Maintainer wollen anders. – smci

6

Sie müssen die kategoriale Variable in eine Reihe von Dummy-Variablen umwandeln. Ja, ich weiß, es ist nervig und scheint unnötig, aber so funktioniert sklearn. wenn Sie Pandas verwenden. Verwenden Sie pd.get_dummies, es funktioniert wirklich gut.

+3

Es funktioniert wirklich gut, wenn die gleichen einzigartigen Werte in Training und Inferenz vorhanden sind, daher ist es nicht zuverlässig. – marbel

5

Die meisten Implementierungen von Random Forest (und vielen anderen Algorithmen zum maschinellen Lernen), die kategoriale Eingaben akzeptieren, automatisieren entweder nur die Codierung kategorialer Features für Sie oder verwenden eine Methode, die computationally intractable for large numbers of categories lautet.

A notable exception is H2O. H2O hat eine sehr efficient method für den direkten Umgang mit kategorischen Daten, was es oft einen Vorteil gegenüber baumbasierten Methoden gibt, die ein-hot-encoding benötigen.

This article by Will McGinnis has a very good discussion of one-hot-encoding and alternatives.

This article by Nick Dingwall and Chris Potts has a very good discussion about categorical variables and tree based learners.