Pour utiliser SVM ou Neural Network, il doit transformer (encoder) des variables catégorielles en variables numériques, la méthode normale dans ce cas est d'utiliser des valeurs binaires 0-1 avec la k-ème valeur catégorielle transformée en (0,0, .. ., 1,0, ... 0) (1 est en position k-ème). Existe-t-il d'autres méthodes pour ce faire, en particulier lorsqu'il existe un grand nombre de valeurs catégorielles (par exemple 10000) telles que la représentation 0-1 introduira un grand nombre de dimensions supplémentaires (unités d'entrée) dans Neural Network qui ne semblent pas tout à fait souhaitées ou attendues ?
Je pose des questions sur les stratégies générales.
Réponses:
Dans la PNL, où les mots sont généralement codés en 1 sur k, l'utilisation des incorporations de mots est apparue récemment. La page wikipedia avec ses références est un bon début.
Vous pouvez peut-être transférer cette idée dans votre environnement.
la source
Les méthodes «standard» sont: l'encodage à chaud (que vous avez mentionné dans la question). S'il y a trop de catégories possibles, mais que vous avez besoin d'un encodage 0-1, vous pouvez utiliser une astuce de hachage .
L'autre méthode fréquemment utilisée consiste à établir la moyenne des réponses par catégorie: voir l'image du commentaire sur kaggle .
la source
Vous pouvez utiliser
dummyVars
dans R, à partir ducaret
package. Il créera automatiquement différentes colonnes en fonction du nombre de niveaux. Ensuite, vous pouvez les utilisercbind
et les joindre à vos données originales. Les autres options incluentmodel.matrix
etsparse.model.matrix
.la source
Vous pouvez essayer l'encodage binaire qui est plus compact et parfois plus performant qu'un seul. Vous pouvez par exemple implémenter l'incorporation catégorique dans Keras.
la source
"Incorporation d'entités de variables catégorielles" par Cheng Guo, Felix Berkhahn
la source