Primer paso para big data ( , )


21

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:

  1. 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

  2. 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.nortestusismitnorteXstusismit

  • Si es 'grande' y ejecutar análisis adicionales es costoso, analice la importancia variable y finalice.nortestusismit

Voy a utilizar paquetes como biglm, speedglm, multicore, y ffen 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?


1
Eso suena como un enfoque razonable. Encontré una charla sobre un enfoque similar: youtube.com/watch?v=X9YVSDWQokQ .
alfa


@dcl: Gracias, la idea es un buen método de selección de variables no lineal computacionalmente barato que se paralelizará bien (aunque sea univariante). Podría intentarlo porque es rápido y muy simple de codificar. Originalmente estaba pensando en usar este algoritmo genial: code.google.com/p/rf-ace .
cerrado el

@alfa: ¡Me gusta mucho esta idea! Usar una prueba secuencial en subconjuntos de datos cada vez más grandes para eliminar secuencialmente los metaparámetros de peor desempeño. Esto debería mejorar las cosas considerablemente. ¡Gracias! ps aquí está una versión en papel de la charla: biglearn.org/files/papers/biglearn2011_submission_2.pdf
cerrado el

Respuestas:


2

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.


2

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:

  • Este enlace lo llevará a un tutorial para instalar Hadoop en un clúster de nodo único (una computadora).
  • Este enlace y este enlace le mostrarán cómo instalar RMR en su clúster Hadoop.
  • Y finalmente, aquí puede encontrar un ejemplo de regresión logística por medio de RHadoop.

Por lo tanto, mi consejo es seguir estas pautas, ya que sin duda vale la pena si sus datos son enormes.


0

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.