Estoy tratando de entender cómo puedo codificar variables categóricas usando la estimación de probabilidad, pero hasta ahora he tenido poco éxito.
Cualquier sugerencia sería muy apreciada.
Estoy tratando de entender cómo puedo codificar variables categóricas usando la estimación de probabilidad, pero hasta ahora he tenido poco éxito.
Cualquier sugerencia sería muy apreciada.
Respuestas:
También estaba aprendiendo este tema, y esto es lo que encontré:
Este tipo de codificación se denomina codificación de probabilidad , codificación de impacto o codificación de destino
La idea es codificar su variable categórica con el uso de la variable objetivo (continua o categórica dependiendo de la tarea). Por ejemplo, si tiene una tarea de regresión, puede codificar su variable categórica con la media del objetivo. Para cada categoría, calcula la media correspondiente del objetivo (entre esta categoría) y reemplaza el valor de una categoría con esta media.
Si tiene una tarea de clasificación, calcula la frecuencia relativa de su objetivo con respecto a cada valor de categoría.
Desde un punto de vista matemático, esta codificación significa una probabilidad de su objetivo, condicional en cada valor de categoría.
Si lo hace de una manera simple, como describí anteriormente, probablemente obtendrá una estimación sesgada. Es por eso que en la comunidad de Kaggle usualmente usan 2 niveles de validación cruzada. Lea este comentario de raddar aquí . El cuaderno correspondiente está aquí .
La frase:
Está tomando el valor medio de y. Pero no es simple, sino en validación cruzada dentro de la forma de validación cruzada;
Digamos que tenemos una validación cruzada de 20 veces. de alguna manera, necesitamos calcular el valor medio de la función para # 1 veces usando información de # 2 # 20 veces solamente.
Entonces, toma los pliegues # 2- # 20, crea otro conjunto de validación cruzada dentro de él (lo hice 10 veces). calcule las medias para cada pliegue de dejar uno afuera (al final obtendrá 10 medias). Usted promedia estos 10 medios y aplica ese vector para su conjunto de validación # 1 primario. Repita eso para los 19 pliegues restantes.
Es difícil de explicar, difícil de entender y dominar :) Pero si se hace correctamente, puede traer muchos beneficios :)
Otra implementación de esta codificación está aquí .
En R library vtreat tienen implementación de codificación de impacto. Ver este post .
En la biblioteca CatBoost tienen muchas opciones para la codificación de variables categóricas, incluida la codificación de destino.
No existe tal codificación en sklearn todavía.
La codificación de destino ahora está disponible en sklearn a través del paquete category_encoders.
Codificador de destino
clase 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, suavizado = 1)
Target Encode para características categóricas. Basado en el enfoque de dejar uno fuera.
Como señaló josh en el comentario anterior.
La codificación de probabilidad aún no está disponible en scikit learn. Puede hacerlo creando un diccionario y luego hacer una función de reemplazo.
dict1 = {'cate1':1,'cate2':1,'cate3':2,'cate4':2}
for i in df.shape[0]:
df.iloc[i] = dict1[df.iloc[i]]