Recentemente, fiz um projeto em que a variável de destino era multiclasse, então estava procurando maneiras adequadas de codificar recursos categóricos. Encontrei muitos artigos listando os benefícios da codificação por meio da variável de destino em relação a outros métodos e como realizar essa tarefa em duas linhas de código usando a biblioteca category_encoders . No entanto, para minha surpresa, descobri que nenhum artigo demonstrou esse método para uma variável de destino multiclasse. Eu olhei a documentação de category_encoders e percebi que a biblioteca só funciona para variáveis binárias ou reais, olhei para o trabalho original de Daniele Micci-Barreca, que introduziu a codificação de destino médio e também não encontrou nada sensato.
Neste artigo, darei uma visão geral do documento que descreve a codificação de destino e mostrarei com um exemplo como a codificação de destino funciona para problemas binários.
Teoria
Então: se você for perguntado "0/1", "clicado / não clicado" ou "gato / cachorro", então seu problema de classificação é binário; se você quiser responder "vermelho ou verde ou azul, mas talvez amarelo" ou "sedan versus hatchback e todos versus SUV", então o problema está em várias classes.
Aqui está o que o artigo de meta categórica que mencionei acima tem a dizer:
O resultado de qualquer observação pode ser exibido por meio de uma estimativa da probabilidade da variável-alvo.
, , .
.
, .
. 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. , . , .
, .
!