2 votos

Cómo tratar la división de la prueba de tren cuando una variable factorial sólo tiene 1 observación para algunos niveles

(Se admiten sugerencias de etiquetas, sólo se me ocurre la etiqueta r y la etiqueta de modelos predictivos)

He aquí una variable de mis datos:

> table(processed_train$cat89)

     A      B      C      D      E      F      G      H      I 
183744   4312    220     33      5      0      1      1      2 

He dividido mis datos en prueba y entrenamiento, he creado un modelo y he intentado hacer alguna predicción en la prueba:

set.seed(123)
sample_train <- sample(nrow(processed_train),
                             floor(nrow(processed_train) * 0.8))
working_train <- processed_train[sample_train,]
working_test <- processed_train[-sample_train,]

# kitchen sink first model - all features
predictors <- names(subset(working_train, select = -c(id,target)))
model_mlr_sink <- lm(paste("loss ~ ",paste(predictors, collapse="+"),sep=""), data=working_train)

Antes de predecir, he aquí el aspecto de una variable:

> table(working_test$cat89)

    A     B     C     D     E     F     G     H     I 
73536  1697    78    12     3     0     1     0     1 
> table(processed_train$cat89)

     A      B      C      D      E      F      G      H      I 
183744   4312    220     33      5      0      1      1      2 

Ahora mira lo que pasa:

> prediction_mlr_sink <- predict(model_mlr_sink, interval="prediction", newdata=working_test)
Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels) : 
  factor cat89 has new levels G

Buscando en Google, parece que la opinión generalizada es abandonar la variable cat89. Pero eso me parece burdo. ¿Hay alguna solución más elegante? ¿Qué debería hacer aquí para obtener mis predicciones en los datos de prueba y evitar este error?

1voto

avid Puntos 161

En efecto, es exagerado desechar toda la variable. En su lugar, combinaría los niveles muy raros en un solo nivel. Además, es muy poco probable que las variables ficticias individuales para esos niveles tengan mucha utilidad predictiva.

1voto

Charlie Puntos 1

Para profundizar este respuesta:

Lo que hay que hacer para solucionar este problema depende sobre todo de lo que signifique exactamente la variable. Los niveles más infrecuentes (posiblemente todos excepto A ) no están bien representados en su conjunto de datos. Podría haber un par de explicaciones para esto, junto con algunas correcciones.

La pregunta más importante es: ¿hasta qué punto es relevante la distinción entre las variables poco comunes? Por ejemplo, ¿es relevante para la clasificación saber si el dato x pertenece al grupo H o I ? Quizá baste con saber si está en A o no. Un ejemplo de esto es si los factores representan intervalos para la variable x : A = 0-10, B = 10-20, etc . Si los valores más altos son poco comunes, podría agruparlos como C = 20+ .

Así que para ampliar la respuesta de @Kodiologist, podría ser beneficioso agrupar algunos de los factores. Tal vez incluso ir tan lejos como para colocarlos en grupos A et Not A (si esto tiene sentido lógico, depende de su conjunto de datos por lo que depende de usted en última instancia).

Por último, otra cosa a tener en cuenta es que en los modelos lineales, como el que usted utiliza, los factores individuales de su variable se codifican todos (todos menos uno) como variables diferentes que resultan ser mutuamente excluyentes ( Variables ficticias ). Por tanto, si tiene una variable individual que es 0 para todos los puntos de datos excepto uno, es poco probable que desempeñe algún papel en la clasificación fiable (es decir, sin un ajuste excesivo en ese punto de datos concreto).


Así que recapitulando:

Tiene factores dentro de una variable que están escasamente representados en su conjunto de datos. Una de las opciones que se ofrecen es descartar todos los factores eliminando la variable por completo. Una alternativa es agrupar los factores poco comunes. La forma de hacerlo dependerá del significado real de los factores.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X