Artigo introdutório sobre a implementação da codificação Feature Target

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), .





Se você usou o TargetEncoder da biblioteca category_encoders, k é o parâmetro min_sample_leaf ef é o parâmetro anti-aliasing.
TargetEncoder category_encoders, k - min_sample_leaf, f - .

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(-(21)/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) + ((10.73) * 0.4) = 0.485
      
      



, «Female» , n = 4;





λ(‘Female’)=1/(1+exp(-(41)/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) + ((10.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.  , .  , .





  , . 





!








All Articles