Suponga que está analizando un gran conjunto de datos con miles de millones de observaciones por día, donde cada observación tiene un par de miles de variables numéricas y categoriales dispersas y posiblemente redundantes. Digamos que hay un problema de regresión, un problema de clasificación binaria desequilibrada y una tarea de "averiguar qué predictores son los más importantes". Mi pensamiento sobre cómo abordar el problema es:
Ajuste algún modelo predictivo en submuestras de datos progresivamente más y más grandes (al azar) hasta que:
Ajustar y validar de forma cruzada el modelo se vuelve computacionalmente difícil (por ejemplo, irrazonablemente lento en mi computadora portátil, R se queda sin memoria, etc.), O
Los valores de entrenamiento y prueba RMSE o precisión / recuperación se estabilizan.
Si los errores de entrenamiento y prueba no se estabilizaron (1.), use un modelo más simple y / o implemente versiones multinúcleo o multinodo del modelo y reinicie desde el principio.
Si los errores de entrenamiento y prueba se estabilizaron (2.):
Si (es decir, todavía puedo ejecutar algoritmos en X s u b s e t ya que aún no es demasiado grande), intente mejorar el rendimiento expandiendo el espacio de características o utilizando un modelo más complejo y reiniciando desde el principio.
Si es 'grande' y ejecutar análisis adicionales es costoso, analice la importancia variable y finalice.
Voy a utilizar paquetes como biglm
, speedglm
, multicore
, y ff
en I inicialmente, y posteriormente utilizar algoritmos más complicados y / o varios nodos (en EC2) según sea necesario.
¿Suena esto como un enfoque razonable, y si es así, tiene algún consejo o sugerencia específica? Si no es así, ¿qué probarías para un conjunto de datos de este tamaño?
fuente
Respuestas:
Debe consultar los métodos en línea para la regresión y clasificación de conjuntos de datos de este tamaño. Estos enfoques le permitirán usar todo el conjunto de datos sin tener que cargarlo en la memoria.
También puede consultar Vowpal Wabbit (VW):
https://github.com/JohnLangford/vowpal_wabbit/wiki
Utiliza un método en línea fuera de núcleo, por lo que debería poder manejar un conjunto de datos de este tamaño. Puede hacer regresión y clasificación y tiene soporte para formatos dispersos. También puede hacer versiones penalizadas (por ejemplo, regresión / clasificación de tipo lazo) en VW, lo que podría mejorar la precisión de su modelo.
fuente
Sugeriría usar Hadoop y RMR (un paquete específico para Map Reduce en R). Con esta estrategia, puede ejecutar grandes conjuntos de datos en computadoras comodity con una configuración asequible (probablemente en dos horas obtendrá Hadoop y RMR (RHadoop) instalados y en ejecución).
De hecho, si tiene más de una computadora, puede crear un clúster, reduciendo el tiempo de procesamiento.
Te doy algunos enlaces que respaldan mi sugerencia:
Por lo tanto, mi consejo es seguir estas pautas, ya que sin duda vale la pena si sus datos son enormes.
fuente
Esto es más un comentario que una respuesta, pero no puedo publicarlo como un comentario (requiere 50 rep).
¿Has intentado usar PCA en tu conjunto de datos? Puede ayudarlo a reducir el espacio variable y encontrar una posible dirección en la que la variable excluya de su modelo de regresión. Al hacerlo, el modelo será más fácil de calcular. Aquí puede encontrar una discusión interesante sobre el uso de PCA con variables categóricas: ¿Se puede aplicar el análisis de componentes principales a conjuntos de datos que contienen una combinación de variables continuas y categóricas?
Además, imagino que estás usando R por muchas razones (yo también uso R), pero puede ser más fácil usar un software como SAS o STATA. Funcionan mejor con big data y no tiene que lidiar con la computación multinúcleo y paralela.
Finalmente, trate de pensar si tiene sentido usar tantas filas como sea posible de su conjunto de datos. ¿Este es un conjunto de datos de población, un conjunto de datos de cuasi-población o un conjunto de datos muestreados? Puede obtener mejores resultados con un buen muestreo en su conjunto de datos que utilizando todos los datos. Eche un vistazo a esta publicación: ¿es relevante el muestreo en el momento del 'big data'?
Espero que esto ayude
fuente