J'ai récemment fait un projet dans lequel la variable cible était multi-classe, donc je cherchais des moyens appropriés pour encoder des caractéristiques catégoriques. J'ai trouvé de nombreux articles énumérant les avantages du codage par la moyenne de la variable cible par rapport à d'autres méthodes, et comment accomplir cette tâche en deux lignes de code en utilisant la bibliothèque category_encoders . Cependant, à ma grande surprise, j'ai trouvé qu'aucun article ne démontrait cette méthode pour une variable cible multiclasse. J'ai parcouru la documentation de category_encoders et réalisé que la bibliothèque ne fonctionne que pour les variables binaires ou réelles, j'ai regardé le travail original de Daniele Micci-Barreca, qui a introduit le codage cible moyen et n'a également rien trouvé de sensé.
Dans cet article, je vais donner un aperçu du document qui décrit le codage cible et montrer avec un exemple comment le codage cible fonctionne pour les problèmes binaires.
Théorie
Donc: si on vous demande "0/1", "cliqué / non cliqué" ou "chat / chien", alors votre problème de classification est binaire; si vous voulez répondre «rouge ou vert ou bleu, mais peut-être jaune» ou «berline contre berline et tout contre SUV», alors le problème se situe dans plusieurs catégories.
Voici ce que l'article sur l'objectif catégorique que j'ai mentionné ci-dessus a à dire:
Le résultat de toute observation peut être affiché par une estimation de la probabilité de la variable cible.
, , .
.
, .
. 0, 1. P (Y = 1 | X = Xi), ..:
n(Y) - 1 ,
n(i) - i- ,
n(iY) - 1 i- .
, 1 i- , - 1 . λ - , 0 1, n(i), .
TargetEncoder category_encoders, k - min_sample_leaf, f - .
, , , . , , , (. . Y). .
. . , . , , , . .
, .
.
, 1, «»?
: 1/2 = 0,5.
, , Target 1, «»?
: 1/4 = 0,25.
?
, «Female» 0,25, . , 4/9 = 0,4.
, «» , , .
min_sample_leaf, k = 1 , f = 1,
«Male», n = 2;
λ(‘Male’)=1/(1+exp(-(2–1)/1))=0.73 # Weight Factor for 'Male'
Target Statistic=(Weight Factor * Probability of 1 for Males)
+ ((1-Weight Factor) * Probability of 1 Overall)S(‘Male’)= (0.73 * 0.5) + ((1–0.73) * 0.4) = 0.485
, «Female» , n = 4;
λ(‘Female’)=1/(1+exp(-(4–1)/1))=0.95 #Weight Factor for 'Female'
Target Statistic=(Weight Factor * Probability of 1 for Females)
+ ((1-Weight Factor) * Probability of 1 Overall)S(‘Female’)= (0.95 * 0.25) + ((1–0.95) * 0.4) = 0.259
, , λ , . 4 «Female», 2 «Male». 0,95 0,73.
, «Male» 0,485 , «Female» 0,259. «».
! !
?
, , category_encoders:
!pip install category_encoders
import category_encoders as ce
x=['Male','Male','Female','Female','Female','Female','Other','Other','Other']
y=[1,0,0,0,0,1,1,1,0]
print(ce.TargetEncoder().fit_transform(x,y))
TargetEncoder category_encoders. , . , .
, .
!