web-dev-qa-db-fra.com

Sklearn random forest peut-il gérer directement les caractéristiques catégorielles?

Disons que j'ai une caractéristique catégorielle, la couleur, qui prend les valeurs

["rouge", "bleu", "vert", "orange"],

et je veux l'utiliser pour prédire quelque chose dans une forêt aléatoire. Si je l'encode à chaud (c'est-à-dire que je le change en quatre variables fictives), comment puis-je dire à sklearn que les quatre variables fictives sont vraiment une variable? Plus précisément, lorsque sklearn sélectionne de manière aléatoire des entités à utiliser sur différents nœuds, il doit inclure les mannequins rouge, bleu, vert et orange ensemble, ou il ne doit en inclure aucune.

J'ai entendu dire qu'il n'y avait aucun moyen de le faire, mais j'imagine qu'il doit y avoir un moyen de traiter les variables catégorielles sans les coder arbitrairement comme des nombres ou quelque chose comme ça.

44
hahdawg

Non, il n'y en a pas. Quelqu'un travaille là-dessus et le correctif pourrait être fusionné dans la ligne principale un jour, mais pour l'instant il n'y a pas de support pour les variables catégorielles dans scikit-learn sauf l'encodage factice (one-hot).

29
Fred Foo

La plupart des implémentations de forêt aléatoire (et de nombreux autres algorithmes d'apprentissage automatique) qui acceptent les entrées catégorielles automatisent simplement le codage des fonctionnalités catégorielles pour vous ou utilisent une méthode qui devient calculable pour un grand nombre de catégories .

ne exception notable est H2O . H2O a une très méthode efficace pour gérer directement les données catégorielles, ce qui lui donne souvent un avantage sur les méthodes d'arborescence qui nécessitent un codage à chaud.

Cet article de Will McGinnis a une très bonne discussion sur l'encodage à chaud et les alternatives .

Cet article de Nick Dingwall et Chris Potts a une très bonne discussion sur les variables catégorielles et les apprenants basés sur les arbres .

11
denson

Vous devez transformer la variable catégorielle en une série de variables fictives. Oui, je sais que c'est ennuyeux et semble inutile, mais c'est ainsi que Sklearn fonctionne. si vous utilisez des pandas. utilisez pd.get_dummies, cela fonctionne très bien.

9
Hemanth Kondapalli