Codificación de uno solo vs simulado en Scikit-learn

50

Hay dos formas diferentes de codificar variables categóricas. Digamos, una variable categórica tiene n valores. La codificación única lo convierte en n variables, mientras que la codificación ficticia lo convierte en n-1 variables. Si tenemos k variables categóricas, cada una de las cuales tiene n valores. Una codificación activa termina con variables kn , mientras que la codificación ficticia termina con variables kn-k .

Escuché que para la codificación en caliente, la intercepción puede conducir a problemas de colinealidad, lo que hace que el modelo no suene. Alguien lo llama " trampa variable ficticia ".

Mis preguntas:

  1. El modelo de regresión lineal de Scikit-learn permite a los usuarios desactivar la intercepción. Entonces, para la codificación en caliente, ¿debería establecer siempre fit_intercept = False? Para la codificación ficticia, fit_intercept siempre debe establecerse en True? No veo ninguna "advertencia" en el sitio web.

  2. Dado que la codificación en caliente genera más variables, ¿tiene más grado de libertad que la codificación ficticia?

Munichong
fuente

Respuestas:

35

El modelo de regresión lineal de Scikit-learn permite a los usuarios desactivar la intercepción. Entonces, para la codificación en caliente, ¿debería establecer siempre fit_intercept = False? Para la codificación ficticia, fit_intercept siempre debe establecerse en True? No veo ninguna "advertencia" en el sitio web.

Para un modelo lineal no regularizado con codificación de uno en caliente, sí, debe configurar la intersección como falsa o incurrir en una colinealidad perfecta. sklearntambién permite una penalización por contracción de cresta, y en ese caso no es necesario, y de hecho debe incluir tanto la intercepción como todos los niveles. Para la codificación ficticia, debe incluir una intercepción, a menos que haya estandarizado todas sus variables, en cuyo caso la intercepción es cero.

Dado que la codificación en caliente genera más variables, ¿tiene más grado de libertad que la codificación ficticia?

La intersección es un grado adicional de libertad, por lo que en un modelo bien especificado todo es igual.

Para el segundo, ¿qué pasa si hay k variables categóricas? Las k variables se eliminan en la codificación ficticia. ¿El grado de libertad sigue siendo el mismo?

No pudo ajustar un modelo en el que utilizó todos los niveles de ambas variables categóricas, interceptar o no. Porque, tan pronto como haya codificado en caliente todos los niveles en una variable en el modelo, digamos con variables binarias , entonces tiene una combinación lineal de predictores igual al vector constantex1,x2,,xn

x1+x2++xn=1

Si luego intentas ingresar todos los niveles de otra categórica en el modelo, terminas con una combinación lineal distinta igual a un vector constantex

x1+x2++xk=1

y entonces has creado una dependencia lineal

x1+x2+xnx1x2xk=0

Por lo tanto, debe omitir un nivel en la segunda variable y todo se alineará correctamente.

Digamos que tengo 3 variables categóricas, cada una de las cuales tiene 4 niveles. En la codificación ficticia, se construyen 3 * 4-3 = 9 variables con una sola intersección. En la codificación one-hot, 3 * 4 = 12 variables se construyen sin una intercepción. ¿Estoy en lo correcto?

La segunda cosa no funciona realmente. La matriz de diseño de columna que cree será singular. Debe eliminar tres columnas, una de cada una de las tres codificaciones categóricas distintas, para recuperar la no singularidad de su diseño.3×4=12

Matthew Drury
fuente
Gracias. Para el segundo, ¿qué pasa si hay k variables categóricas? Las k variables se eliminan en la codificación ficticia. ¿El grado de libertad sigue siendo el mismo?
Munichong
@ChongWang Edité una respuesta a tu comentario en mi respuesta.
Matthew Drury
Lo siento, me pierdo un poco aquí. Digamos que tengo 3 variables categóricas, cada una de las cuales tiene 4 niveles. En la codificación ficticia, se construyen 3 * 4-3 = 9 variables con una sola intersección. En la codificación one-hot, 3 * 4 = 12 variables se construyen sin una intercepción. ¿Estoy en lo correcto? Entonces, aquí el DF de la codificación ficticia es 9-1 mientras que el DF de la codificación de un solo uso es 12. ¿Estoy en lo correcto?
Munichong
@ChongWang Editado de nuevo.
Matthew Drury
@MatthewDrury Tengo el mismo problema con linear_model en sklearn. Después de la codificación ficticia, Decision Tree y KNN funcionan bien, pero la regresión lineal cae en singularidad. Entiendo por su respuesta que debo eliminar un "nivel de la segunda variable" pero no sé lo que significa prácticamente. Por ejemplo, tengo 3 características numéricas y 3 categóricas (fabricante, modelo y tipo de combustible). El modelo depende naturalmente del fabricante, ya que un fabricante puede tener n modelos. Entonces, ¿cómo proceder en este tipo de escenario común si quiero utilizar la regresión lineal?
Harvey