0
votes

Dans l'apprentissage de la machine, quelle est la meilleure façon de coder des caractéristiques catégoriques non hiérarchiques?

Pour les fonctionnalités de chaîne lorsque la commande n'a pas d'importance, que vaut mieux obtenir des nuls ou un onehotencoder?

Par exemple, sur cette image de données Pandas: xxx

Je sais que maintenant afin de les gérer (imputer les valeurs manquantes, etc.) Je dois les coder, quelque chose comme ceci: xxx

sortie: xxx

mais maintenant il semble qu'il y ait quelque commande 0-3 mais ceci n'est pas le cas ... 'ios' -> 2 n'est pas nécessairement supérieur à 'android' -> 1


0 commentaires

3 Réponses :


1
votes

Les caractéristiques catégoriques sont différentes des fonctionnalités numériques de la catégorie des caractéristiques catégoriques sont un ensemble de valeurs discrètes, tandis que les caractéristiques numériques forment une séquence continue. Par exemple pour la fonctionnalité "animal" si 1 -> chat et 2 -> chien, vous ne pouvez pas avoir de 1,5, vous n'êtes pas 1 ou 2. Et dans ce chien de configuration n'est pas nécessairement plus grand que le chat - celui - celui-ci et deux sont simplement des codages de la fonctionnalité "réelle".

D'autre part pour la fonctionnalité "Prix", vous avez une large gamme de valeurs possibles et il y a une définition claire sur les valeurs supérieures aux autres valeurs.

En termes de traitement des fonctionnalités catégoriques, vous avez sur place - nous les codons. Par exemple sklearn.proprocessing a un Ordinalencoder qui transforme simplement des caractéristiques catégoriques (principalement des cordes comme "mâle", "femme", etc.) en entiers.

Maintenant, je ne suis pas trop familier avec Sklearn et quels types de codages il faut, mais je sens que je devrais discuter de plus de moyens plus "avancés" d'encoder des caractéristiques catégoriques. Selon les modèles d'apprentissage automatique des machines que vous utilisez peut-être ou non. Personnellement, je les utilise principalement avec des réseaux de neurones.

Le plus simple est un codage unique, qui est similaire à votre valeur par défaut de codage de chaque catégorie à un entier. Sauf le temps de se débarrasser du problème dans lequel le modèle traite une catégorie aussi supérieure à une autre, il utilise une gamme de celles et de zéros. I.e. "CAT" -> 0 -> [1, 0, 0], "Dog" -> 1-> [0, 1, 0], "oiseau" -> 2 -> [0, 0, 1]. Essentiellement, chaque catégorie est codée sur un indice entier et votre résultat est une matrice de tous les zéros, à l'exception d'une personne à cet indice.

Une autre façon que nous codons consiste à utiliser des embardages. Il est très similaire à un codage à chaud en ce que vous convertissez un indice entier (pour une catégorie) en un vecteur n-dimensionnel. Cependant, cela permet d'économiser de l'espace en ce que la taille du vecteur peut être inférieure au nombre de catégories. Ceci est couramment utilisé dans les réseaux de neurones qui traitent des informations sémantiques. Chaque mot est transmis dans le modèle en tant qu'index entier, mais une couche d'intégration convertit chaque index en un vecteur n-dimensionnel. Lorsque vous formez le modèle, la couche d'intégration obtient de meilleures et meilleures représentations de chaque catégorie.


0 commentaires

1
votes

Je viens de recevoir une réponse à ma question ci-dessus (et liée au jaune marqué ci-dessous):

Lorsque vous les codez en chiffres et les laissez tous comme une seule fonctionnalité, le modèle suppose que la commande signifie quelque chose, A ce jour que "iOS" (qui est mappé à 2) est supérieur à "Android" (qui est égal à 1)

Mais maintenant, il semble qu'il y ait un ordre 0-3 mais ce n'est pas le cas ... 'iOS' -> 2 n'est pas nécessairement plus grand que 'Android' -> 1

Si pour la fonctionnalité spécifique, il n'y a pas trop de catégories, il est facile à utiliser sur eux obtenir des mannequins: xxx

Nous évigeons le problème que j'ai énoncé Pour commencer, cela devrait améliorer considérablement les performances du modèle

ou simplement utiliser un onehotencoder - comme @Primusa indiqué dans la réponse ci-dessus


1 commentaires

Édité ma réponse ci-dessus pour vous donner le crédit! et a voté vos réponses :)



1
votes

Tout ce que vous avez juste besoin est un onehotencoder xxx


0 commentaires