Estoy tratando de hacer predicciones usando un modelo de bosque aleatorio en R.
Sin embargo, obtengo errores ya que algunos factores tienen valores diferentes en el conjunto de prueba que en el conjunto de entrenamiento. Por ejemplo, un factor Cat_2
tiene valores 34, 68, 76
, etc., en el conjunto de prueba que no aparecen en el conjunto de entrenamiento. Desafortunadamente, no tengo control sobre el conjunto de prueba ... Debo usarlo como está.
Mi única solución fue convertir los factores problemáticos de nuevo a valores numéricos, usando as.numeric()
. Se trabaja , pero no estoy muy satisfecho, ya que estos valores son códigos que no tienen ningún sentido numérico ...
¿Crees que habría otra solución, eliminar los nuevos valores del conjunto de prueba? Pero sin eliminar todos los demás valores de factores (digamos valores 1, 2, 14, 32
, etc.) que se encuentran tanto en el entrenamiento como en la prueba, y que contienen información potencialmente útil para las predicciones.
fuente
Respuestas:
Si el conjunto de prueba tiene muchos de estos puntos con nuevos valores de factores, entonces no estoy seguro de cuál es el mejor enfoque. Si se trata solo de un puñado de puntos, es posible que pueda salirse con la suya como tratar los niveles de factores errantes como datos faltantes e imputarlos con el enfoque que considere adecuado. La implementación de R tiene un par de formas de imputar datos faltantes, solo necesita establecer estos niveles de factor en NA para indicar que faltan.
fuente
King y Bonoit , este fragmento puede ser útil para armonizar niveles:
También imprime qué atributos se cambian. No encontré una buena manera de escribirlo con más elegancia (con ldply o algo así). Cualquier consejo es apreciado.
fuente
Aquí hay un código que escribí que aborda la respuesta de @ King arriba. Se solucionó el error:
fuente
El conjunto de prueba y entrenamiento debe combinarse como un conjunto y luego cambiar los niveles del conjunto de entrenamiento. Mis códigos son:
Esto funciona en cualquier caso donde el número de niveles en la prueba es más o menos que el entrenamiento.
fuente
Tengo una solución pésima cuando uso randomForest en R. Probablemente no sea teóricamente sólido, pero hace que funcione.
O de otra forma. Básicamente, solo le dice a R que es un valor válido solo que hay 0 casos; así que deja de molestarme por el error.
No soy lo suficientemente inteligente como para codificarlo de modo que realice automáticamente la acción para todas las características categóricas. Envíame el código si sabes cómo ...
fuente
Estoy seguro de que ya lo habría pensado si este fuera el caso, pero si el conjunto de prueba tiene valores reales y está utilizando el conjunto de prueba para fines de validación cruzada, luego vuelva a dividir el marco de datos en marcos de datos de entrenamiento y prueba donde los dos están equilibrados en estos factores evitaría su problema. Este método se conoce popularmente como validación cruzada estratificada .
fuente