Comment puis-je adapter les types de données catégoriques pour la classification aléatoire des forêts?


11

J'ai besoin de trouver la précision d'un ensemble de données de formation en appliquant l'algorithme de forêt aléatoire. Mais le type de mon ensemble de données est à la fois catégorique et numérique. Lorsque j'ai essayé d'ajuster ces données, j'obtiens une erreur.

'L'entrée contient NaN, l'infini ou une valeur trop grande pour dtype (' float32 ')'.

Il se peut que le problème concerne les types de données d'objet. Comment puis-je ajuster des données catégorielles sans les transformer pour appliquer des RF?

Voici mon code.

capture d'écran

capture d'écran

capture d'écran


Vous n'avez pas besoin d'effectuer one_hot si vous utilisez un modèle d'arbre, car il ne mesure pas la distance comme une autre méthode.
Jun Yang

1
@JunYang, scikit-learn nécessite actuellement des catégories de codage.
Ben Reiniger

Réponses:


11

Vous devez convertir les entités catégorielles en attributs numériques. Une approche courante consiste à utiliser un codage à chaud, mais ce n'est certainement pas la seule option. Si vous avez une variable avec un nombre élevé de niveaux catégoriels, vous devriez envisager de combiner des niveaux ou d'utiliser l'astuce de hachage. Sklearn est équipé de plusieurs approches (consultez la section "voir aussi"): Un Hot Encoder et Hashing Trick

Si vous n'êtes pas engagé à sklearn, l' implémentation de forêt aléatoire h2o gère directement les fonctionnalités catégorielles.


0

Il y a un problème pour obtenir ce type d'erreur pour autant que je sache. La première est que, dans mes jeux de données, il existe un espace supplémentaire qui explique pourquoi l'erreur, 'Input Contains NAN value; Deuxièmement, python n'est pas en mesure de fonctionner avec n'importe quel type de valeur d'objet. Nous devons convertir cette valeur d'objet en valeur numérique. Pour convertir un objet en numérique, il existe deux types de processus de codage: codeur d'étiquettes et un codeur à chaud. Où le codeur d'étiquette code la valeur de l'objet entre 0 à n_classes-1 et Un codeur à chaud code la valeur entre 0 et 1. Dans mon travail, avant d'ajuster mes données pour tout type de méthode de classification, j'utilise le codeur d'étiquette pour convertir la valeur et avant la conversion, je m'assure que aucun espace vide n'existe dans mon ensemble de données.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.