J'essaie de comprendre comment je peux coder des variables catégorielles en utilisant une estimation de vraisemblance, mais j'ai eu peu de succès jusqu'à présent.
Toutes les suggestions seraient grandement appréciées.
J'essaie de comprendre comment je peux coder des variables catégorielles en utilisant une estimation de vraisemblance, mais j'ai eu peu de succès jusqu'à présent.
Toutes les suggestions seraient grandement appréciées.
Réponses:
J'apprenais aussi ce sujet, et voici ce que j'ai trouvé:
Ce type de codage est appelé codage de vraisemblance , codage d'impact ou codage cible
L'idée est d'encoder votre variable catégorielle à l'aide de la variable cible (continue ou catégorielle selon la tâche). Par exemple, si vous avez une tâche de régression, vous pouvez encoder votre variable catégorielle avec la moyenne de la cible. Pour chaque catégorie, vous calculez la moyenne correspondante de la cible (parmi cette catégorie) et remplacez la valeur d'une catégorie par cette moyenne.
Si vous avez une tâche de classification, vous calculez la fréquence relative de votre cible par rapport à chaque valeur de catégorie.
D'un point de vue mathématique, ce codage signifie une probabilité de votre cible, conditionnelle à chaque valeur de catégorie.
Si vous le faites de manière simple, comme je l'ai décrit ci-dessus, vous obtiendrez probablement une estimation biaisée. C'est pourquoi dans la communauté Kaggle, ils utilisent généralement 2 niveaux de validation croisée. Lisez ce commentaire de raddar ici . Le carnet correspondant est ici .
La citation:
Il prend la valeur moyenne de y. Mais pas une moyenne simple, mais en validation croisée de manière croisée;
Disons que nous avons une validation croisée 20 fois. nous devons en quelque sorte calculer la valeur moyenne de la fonction pour le pli n ° 1 en utilisant uniquement les informations des plis n ° 2 à 20.
Donc, vous prenez des plis # 2- # 20, créez un autre ensemble de validation croisée (je l'ai fait 10 fois). calculer les moyennes pour chaque pli de sortie (au final, vous obtenez 10 moyennes). Vous faites la moyenne de ces 10 moyennes et appliquez ce vecteur à votre ensemble de validation principal n ° 1. Répétez cela pour les 19 plis restants.
C'est difficile à expliquer, difficile à comprendre et à maîtriser :) Mais si c'est fait correctement, cela peut apporter de nombreux avantages :)
Une autre implémentation de ce codage est ici .
Dans la bibliothèque R vtreat, ils ont implémenté un codage d'impact. Voir cet article .
Dans la bibliothèque CatBoost, ils ont beaucoup d'options pour l'encodage des variables catégorielles, y compris l'encodage cible.
Il n'y a pas encore de tel encodage dans sklearn.
L'encodage cible est désormais disponible dans sklearn via le package category_encoders.
Encodeur cible
class category_encoders.target_encoder.TargetEncoder (verbose = 0, cols = None, drop_invariant = False, return_df = True, impute_missing = True, handle_unknown = 'impute', min_samples_leaf = 1, smoothing = 1)
Encode cible pour les fonctionnalités catégorielles. Basé sur une approche «laisser un».
Comme indiqué par Josh dans le commentaire ci-dessus.
L'encodage de vraisemblance n'est toujours pas disponible sur scikit learn. Vous pouvez le faire en créant un dictionnaire, puis effectuez une fonction de remplacement.
dict1 = {'cate1':1,'cate2':1,'cate3':2,'cate4':2}
for i in df.shape[0]:
df.iloc[i] = dict1[df.iloc[i]]