Estou tentando entender como posso codificar variáveis categóricas usando estimativa de probabilidade, mas até agora tive pouco sucesso.
Todas as sugestões serão muito apreciadas.
Estou tentando entender como posso codificar variáveis categóricas usando estimativa de probabilidade, mas até agora tive pouco sucesso.
Todas as sugestões serão muito apreciadas.
Respostas:
Eu também estava aprendendo esse tópico, e foi o que encontrei:
Esse tipo de codificação é chamado de codificação de probabilidade , codificação de impacto ou codificação de destino
A ideia é codificar sua variável categórica com o uso da variável de destino (contínua ou categórica, dependendo da tarefa). Por exemplo, se você tiver uma tarefa de regressão, poderá codificar sua variável categórica com a média do destino. Para cada categoria, você calcula a média correspondente da meta (entre essa categoria) e substitui o valor de uma categoria por essa média.
Se você tiver uma tarefa de classificação, calcula a frequência relativa do seu objetivo em relação a cada valor de categoria.
Do ponto de vista matemático, essa codificação significa uma probabilidade do seu destino, condicional ao valor de cada categoria.
Se você fizer isso de uma maneira simples, como descrevi acima, provavelmente obterá uma estimativa tendenciosa. É por isso que na comunidade Kaggle eles costumam usar 2 níveis de validação cruzada. Leia este comentário por raddar aqui . O caderno correspondente está aqui .
A citação:
Está assumindo o valor médio de y. Mas não é claro, mas na validação cruzada da maneira da validação cruzada;
Digamos que tenhamos uma validação cruzada de 20 vezes. precisamos, de alguma maneira, calcular o valor médio do recurso para a dobra nº 1, usando apenas as informações das dobras 2 a 20.
Então, você faz # 2- # 20 dobras, cria outro conjunto de validação cruzada (fiz 10 vezes). calcule as médias para cada dobra excluída (no final, você obtém 10 médias). Você calcula a média desses 10 meios e aplica esse vetor ao seu conjunto de validação principal nº 1. Repita isso para as 19 dobras restantes.
É difícil de explicar, difícil de entender e dominar :) Mas, se feito corretamente, pode trazer muitos benefícios :)
Outra implementação dessa codificação está aqui .
Na biblioteca R vtreat, eles implementam a codificação de impacto. Veja este post .
Na biblioteca CatBoost , existem várias opções para codificação de variável categórica, incluindo codificação de destino.
Ainda não existe essa codificação no sklearn.
A codificação de destino está agora disponível no sklearn através do pacote category_encoders.
Codificador de destino
classe category_encoders.target_encoder.TargetEncoder (detalhado = 0, cols = Nenhum, drop_invariant = Falso, return_df = Verdadeiro, impute_missing = Verdadeiro, identificador_conhecido = 'impute', min_samples_leaf = 1, suavização = 1)
Codificação de destino para recursos categóricos. Baseado em deixar uma abordagem de fora.
Como observado por Josh no comentário acima.
A codificação de probabilidade ainda não está disponível no scikit learn. Você pode fazer isso criando um dicionário e, em seguida, execute uma função de substituição.
dict1 = {'cate1':1,'cate2':1,'cate3':2,'cate4':2}
for i in df.shape[0]:
df.iloc[i] = dict1[df.iloc[i]]