¿Por qué tenemos que convertir el valor categórico en factor (en R) o variables ficticias antes de aplicar algoritmos de aprendizaje automático (especialmente regresión lineal)? ¿Afecta nuestros resultados?

ATA Muchos algoritmos de aprendizaje automático requieren números como entradas, por lo que si su variable categórica toma valores como “manzana”, “naranja” y “pera”, entonces debe codificarlo como números de alguna manera. Las variables ficticias proporcionan una forma de hacer esto.

En el resto de esta respuesta, supondré que su modelo es una regresión lineal. Si sus variables categóricas toman valores que parecen números, tiene la opción de introducirlos en el algoritmo como números. Llamemos a su variable X y supongamos que toma los valores “1”, “2”, “3”, “4” o “5”. Si introduce X en el modelo como números, el modelo estimará solo un único parámetro, que es el efecto sobre la variable objetivo de aumentar X en 1 unidad. Entonces, si mantiene todo lo demás constante y aumenta X de 1 a 2, eso afecta la variable objetivo de la misma manera que la aumenta de 2 a 3 o de 4 a 5.

Si, en cambio, modela X como categórico, estimará 4 parámetros: el efecto de aumentar X de 1 a 2, de 2 a 3, y así sucesivamente. Estos valores podrían ser todos diferentes.

Si la variable objetivo es cercana a lineal en las etiquetas para X, será más eficiente incluir X como variable numérica, por lo que no desperdiciará datos que estimen cuatro parámetros que son casi iguales. Si no, el modelo se ajustará mejor (y probablemente ofrecerá mejores predicciones) si X se trata como categórico, de modo que el modelo pueda capturar la no linealidad.

Por ejemplo:

“1) ¿Por qué quieres convertir la raza en números? Supongo que quieres hacer algo como un modelo de regresión, ¿es correcto? Voy a asumir que estás preguntando cómo manejar los” datos categóricos “(categorías como diferentes razas) en regresión.

Por lo tanto, desea variables numéricas, y simplemente podría asignar un número a cada raza. Pero, si elige Blanco = 1, Negro = 2, Asiático = 3, ¿tiene sentido realmente que la distancia entre Blanco (sic) y Negro (sic) sea exactamente la mitad de la distancia entre Blanco (sic) y Asiático (sic)? ? Y, ¿ese pedido es incluso correcto? Probablemente no.

En cambio, lo que haces es crear variables ficticias. Digamos que tienes solo esas tres carreras. Luego, crea dos variables ficticias: blanco, negro. También puede usar blanco, asiático o negro, asiático; la clave es que siempre se crean una variable ficticia menos las categorías. Ahora, la variable blanca es 1 si el individuo es blanco y, de lo contrario, es 0, y la variable negra es 1 si el individuo es negro y, de lo contrario, es 0. Si ahora se ajusta a un modelo de regresión, el coeficiente de White le indica la diferencia promedio entre asiáticos y blancos (tenga en cuenta que no se utilizó la variable ficticia asiática, por lo que los asiáticos (sic) se convierten en la línea de base con la que nos comparamos). El coeficiente para las negras te dice la diferencia promedio entre asiáticos y negros.

Nota: Si está utilizando un software para adaptarse a su modelo de regresión, probablemente no tenga que preocuparse por todo esto. Simplemente le dice a su software que la variable es categórica y maneja todos estos detalles.

2) No necesita preocuparse por esto, al menos si está haciendo una regresión. La ejecución del modelo de regresión le indicará los coeficientes para cada variable, así como sus errores estándar, y esa información le indica qué variables son más importantes. Si desea ayuda para interpretar esos coeficientes, ese es un tema completamente nuevo “.


Aquí hay un ejemplo en R:

# Digamos que estamos midiendo algún valor de Y que depende de X en
# {0, 1, 2} (una variable categórica), W (una variable numérica),
# y Z en {1, 2, 3} (otra variable categórica)
# tal que Y = f (X, W, Z) + eps, donde eps es gaussiano estándar.
# Defina f como:

f <- función (X, W, Z) {
si (X == 0) {
resultado <- 100 * W + if (Z == 1) rnorm (1) else if (Z == 2) rcauchy (1) else -2
}
más si (X == 1) {
resultado <- 100 + W * (if (Z == 1) runif (1) else if (Z == 2) rlnorm (1, 1, 1) else 1)
}
más {
resultado <- 233 + W * 3
}
resultado
}
set.seed (3624)
X <- rbinom (1000, 2, 0.8)
W <- runif (1000, máx = 100)
Z <- rbinom (1000, 2, 0.3) +1
dat <- data.frame (X, W, Z)
Y <- aplicar (dat, 1, FUN = función (x) f (x [1], x [2], x [3])) + rnorm (1000)
dat $ Y <- Y
# Datos de prueba
Xt <- dbinom (100, 1, 0.5)
Wt <- runif (100, máx = 100)
Zt <- dbinom (100, 1, 0.3) +1
datt <- data.frame (X = Xt, W = Wt, Z = Zt)
Yt <- aplicar (cbind (Xt, Wt, Zt), 1, FUN = función (x) f (x [1], x [2], x [3])) + rnorm (100)
#Con enteros, sin interacciones:
ifit1 <- lm (Y ~ X + W + Z, datos = dat)
#Interes, todas las interacciones
ifit2 <- lm (Y ~ X * W * Z, datos = dat)
#Interes, cada uno categórico con W
ifit3 <- lm (Y ~ X * W + Z * W, datos = dat)
dat_f <- dat
dat_f $ X <- as.factor (dat_f $ X)
dat_f $ Z <- as.factor (dat_f $ Z)
datt_f <- datt
datt_f $ X <- as.factor (datt_f $ X)
datt_f $ Z <- as.factor (datt_f $ Z)
#Factores, no interactuar
ffit1 <- lm (Y ~ X + W + Z, datos = dat_f)
#Factores, todas las interacciones
ffit2 <- lm (Y ~ X * W * Z, datos = dat_f)
#Interes, cada uno categórico con W
ffit3 <- lm (Y ~ X * W + Z * W, datos = dat_f)

Los resultados de MSE están dados por:

> #MEs de diferentes modelos
> sum ((Yt – predic (ifit1, datt)) ^ 2) / 100
[1] 16426051
> sum ((Yt – predic (ifit2, datt)) ^ 2) / 100
[1] 11727728
> sum ((Yt – predic (ifit3, datt)) ^ 2) / 100
[1] 11248190
> sum ((Yt – predic (ffit1, datt_f)) ^ 2) / 100
[1] 7606621
> sum ((Yt – predic (ffit2, datt_f)) ^ 2) / 100
[1] 2.563997
> sum ((Yt – predic (ffit3, datt_f)) ^ 2) / 100
[1] 1194.715

Claramente, mantener las cosas categóricas cuando deberían ser de ayuda.

Si realmente quieres las matemáticas detrás de eso, puedo dártelo más tarde. Las otras respuestas apuntan a soluciones, pero aquí hay evidencia empírica de que si un valor es verdaderamente categórico, ayuda a mantenerlo de esa manera.

Digamos que representó la categoría A con 1, la categoría B con 2 y así sucesivamente … y no factoriza la variable. Supongamos que realiza una regresión lineal en el conjunto de datos. El algoritmo seguiría optimizando esa columna en particular para lograr la menor suma de cuadrados. Esto es completamente incorrecto, ya que las categorías son solo valores representativos, no el valor real de la variable en sí. Si ya ha codificado un modelo en el que no está utilizando variables de factor, haga lo siguiente: represente A con 1, B con 1000, C con 100000, … las cosas comenzarán a ponerse bastante extrañas.

Si analizara la variable codificada como 1,2,3,4, entonces se trataría como una variable numérica. Claramente, un valor de 4 no significa 1 más que 3, porque no son números significativos. Lo que debe hacer es separar los posibles efectos de pertenecer a cada categoría. La forma de hacerlo es crear 3 variables ficticias, que indican la presencia o falta de un rasgo. Una estimación de parámetros de uno de ellos indicará el efecto de esa categoría en relación con la categoría de línea de base (aquella en la que los tres dummies son 0).

La regresión lineal no es un modelo de aprendizaje automático. Por supuesto que afectará los resultados. La conversión arbitraria de variables a un valor numérico cambiará los pesos en el algoritmo de minimización.

La razón es similar a la normalización de un conjunto de valores. Si las variables no se convierten en un factor, un conjunto de valores grandes de un solo atributo contribuirá a una gran parte de la salida.

Pruebe las variables A = 1, B = 1, C = 10 ^ 9. Disfrutar.

More Interesting

¿Podemos usar el modelo oculto de Markov para inferir las variables ocultas del universo?

¿Dónde puedo encontrar artículos sobre los métodos utilizados para ganar las competencias de Kaggle?

¿Cómo lidiamos con conjuntos de datos muy grandes que no caben en la RAM?

¿Por qué el clasificador Bayes Network funciona tan bien como SVM con menos funciones que las que se usan con SVM?

¿Cuál es una explicación intuitiva del algoritmo wake-sleep?

Cómo configurar un laboratorio de innovación de ciencia de datos

¿Qué tan bueno debería ser para inscribirme en un Master Machine Learning?

¿Scikit-learn admite paralelismo, es decir, se puede usar en un grupo de máquinas que ejecutan tareas en paralelo?

¿Qué funciona mejor, un ANN con miles de unidades por capa pero solo docenas de capas o uno con docenas de unidades por capa, pero cientos de capas?

¿Qué significa 'regresión' en estadística y aprendizaje automático?

¿Cuál es la diferencia entre redes neuronales y de creencias?

¿Cuáles son las futuras áreas de investigación del aprendizaje automático y el reconocimiento de patrones para comenzar el doctorado y necesito algunas cosas buenas relacionadas con eso? como tesis doctorales y papel para estudiar?

¿Qué es una explicación intuitiva de los coeficientes de regresión logística?

¿Cuál es el libro recomendado sobre 'plasticidad neuronal' para informáticos, programadores o profesionales de aprendizaje profundo?

Cómo ejecutar una sesión de tensorflow en un solo proceso y núcleo