Mejores prácticas de aprendizaje automático para grandes conjuntos de datos

9

Estoy a punto de graduarme de mi Maestría y aprendí sobre el aprendizaje automático y también realicé proyectos de investigación con él. Me pregunto cuáles son las mejores prácticas de la industria cuando realizo tareas de aprendizaje automático con Big Datasets (como 100s GB o TB). Apreciar si otros científicos de datos pueden compartir su experiencia. Aquí están mis preguntas:

  1. Obviamente, los conjuntos de datos muy grandes tardan más tiempo en entrenarse (pueden ser días o semanas). Muchas veces necesitamos entrenar varios modelos (SVM, red neuronal, etc.) para comparar y encontrar un mejor modelo de rendimiento. Sospecho que, en proyectos de la industria, queremos que los resultados sean lo más rápidos posible pero que produzcamos el mejor rendimiento. ¿Hay algún consejo para reducir el tiempo de entrenamiento y evaluación? Si recomienda subconjugar el conjunto de datos, me interesará saber cuál es la mejor forma de subconjuntar el conjunto de datos para cubrir todos o la mayoría de los escenarios del conjunto de datos.
  2. Sabemos que realizar la validación cruzada es mejor ya que puede reducir el sobreajuste. Sin embargo, la validación cruzada también toma tiempo para entrenar y el modelo entrenado con validación cruzada puede no implementarse directamente (hablando de la experiencia de python sklearn: necesito entrenar el modelo con el conjunto de datos nuevamente después de las pruebas de validación cruzada para que se implemente). ¿Suele realizar una validación cruzada en sus proyectos de Big Data o salir adelante con la división de prueba de tren?

Agradezco los comentarios.

iLoeng
fuente

Respuestas:

8

Enumeraré algunas prácticas que he encontrado útiles, espero que esto ayude:

  1. Independientemente de si los datos son enormes o no, la validación cruzada es imprescindible al construir cualquier modelo. Si esto lleva más tiempo del que un consumidor final está dispuesto a esperar, es posible que deba restablecer sus expectativas u obtener un hardware / software más rápido para construir el modelo; pero no omita la validación cruzada. Trazar curvas de aprendizaje y la validación cruzada son pasos efectivos para ayudarnos a guiarnos a fin de que reconozcamos y corrijamos los errores al principio del proceso. He experimentado casos en los que un conjunto de pruebas de tren simple no revela ningún problema hasta que corro validaciones cruzadas y encuentro una gran variación en el rendimiento del algoritmo en diferentes pliegues.

  2. Antes de dimensionar un conjunto de datos, elimine los registros con valores faltantes de variables clave y valores atípicos, columnas de variables altamente correlacionadas y variables de varianza casi cero. Esto le dará una estimación mucho mejor del conjunto de datos real utilizable. A veces, puede terminar con solo una fracción del conjunto de datos disponible que en realidad se puede usar para construir un modelo.

  3. Al dimensionar un conjunto de datos para construir un modelo, es más fácil estimar los recursos informáticos si enumera el conjunto de datos en filas y columnas y el tamaño de la memoria de la matriz numérica final. Dado que cada algoritmo de aprendizaje automático finalmente convertirá el conjunto de datos en una matriz numérica, enumerar el tamaño del conjunto de datos en términos de GB / TB de datos de entrada sin procesar (que pueden ser principalmente cadenas / variables nominales textuales / etc.) a menudo es engañoso y el El conjunto de datos puede parecer más desalentador y gigantesco para trabajar de lo que es.

  4. Una vez que sepa (o calcule) el tamaño final utilizable de su conjunto de datos, verifique si tiene una máquina adecuada para poder cargar eso en la memoria y entrenar el modelo. Si el tamaño de su conjunto de datos es más pequeño que la memoria disponible / utilizable por el software, entonces ya no tendrá que preocuparse por el tamaño.

  5. Si el tamaño del conjunto de datos es mayor que la memoria disponible para entrenar un modelo, entonces puede probar estos enfoques (comenzando por los más simples primero):

    • Use una máquina con más memoria: si está utilizando un proveedor de servicios en la nube, entonces el enfoque más simple podría ser simplemente aprovisionar más memoria y continuar construyendo el modelo como de costumbre. Para máquinas físicas, intente adquirir RAM adicional, su precio continúa reduciéndose y si su conjunto de datos seguirá siendo tan grande o crecerá con el tiempo, entonces es una buena inversión.
    • Agregue nodos al clúster: para implementaciones de computación en clúster basadas en Hadoop y Spark, la capacitación en un conjunto de datos más grande es tan fácil como agregar más máquinas al clúster.
    • Muy a menudo, las tareas de clasificación requieren capacitación en datos con clases altamente desequilibradas, la proporción de clases positivas a negativas a veces puede ser tan grande como 1: 1000 o más. Un método sencillo para mejorar la precisión en estos casos es sobremuestrear la clase minoritaria o submuestrear la clase mayoritaria, o hacer ambas cosas juntas. Si tiene un gran conjunto de datos, el submuestreo de la clase mayoritaria es una muy buena opción que mejorará la precisión de su algoritmo y reducirá el tiempo de entrenamiento.
    • Construya un conjunto: divida el conjunto de datos al azar y capacite a varios alumnos de base en cada parte, luego combínelos para obtener la predicción final. Esto haría un uso más eficaz del gran conjunto de datos y produciría un modelo más preciso. Pero necesita pasar más tiempo para construir cuidadosamente el conjunto y mantenerse alejado de los escollos habituales de la construcción del conjunto.
    • Si está utilizando un conjunto, entrene muchos modelos de hilo único en paralelo. Casi todo el software ML proporciona características para entrenar múltiples modelos en diferentes núcleos o nodos separados por completo.
    • Evalúe múltiples algoritmos diferentes en el tiempo necesario para capacitarlos para su conjunto de datos específico frente a su precisión. Si bien no hay una respuesta universal, pero descubrí que cuando utilizo datos ruidosos, los SVM tardan mucho más tiempo en entrenarse que el conjunto cuidadosamente construido de modelos de regresión regularizados, pero pueden ser solo un poco más precisos en rendimiento; y una red neuronal bien construida puede tardar mucho tiempo en entrenarse en comparación con un árbol CART, pero su rendimiento es mucho más preciso que el árbol.
    • Para reducir el tiempo necesario para construir el modelo, intente automatizar la mayor parte del proceso que pueda. Unas pocas horas dedicadas a automatizar una tarea manual compleja propensa a errores puede salvar a su equipo cien horas más tarde en el proyecto.
    • Si está disponible, use las implementaciones de algoritmos que usan procesamiento paralelo, matrices dispersas y computación consciente de caché, esto reduce significativamente el tiempo de procesamiento. Por ejemplo, use xgboost en lugar de una implementación de un solo núcleo de GBM.
    • Si nada más funciona, entrene el modelo en un conjunto de datos más pequeño; Como Emre ha sugerido en su respuesta, use curvas de aprendizaje para fijar el tamaño de muestra más pequeño requerido para entrenar el modelo, agregando más registros de entrenamiento que este tamaño no mejora notablemente la precisión del modelo. Aquí hay un buen artículo que explora esta situación: http://web.mit.edu/vondrick/largetrain.pdf .
Sandeep S. Sandhu
fuente
Gracias @Sandeep por tu respuesta exhaustiva. En cuanto al punto n. ° 3 que enumera el conjunto de datos en filas y columnas y el tamaño de la memoria de la matriz numérica final, ¿podría elaborar más? ¿Eso significa encontrar el tamaño de su conjunto de datos limpio utilizando sintaxis, como 'df.values.nbytes', 'df.shape' en el marco de datos de pandas? Gracias.
iLoeng
Uso: df.values.nbytes + df.index.nbytes + df.columns.nbytes
Sandeep S. Sandhu
4

La pregunta es, ¿cuántos datos se necesitan para saturar su modelo? Para determinar esto, puede trazar curvas de aprendizaje con cantidades variables de datos, tal vez aumentar o disminuir el tamaño en un factor constante. Si la capacitación en todos los datos no es factible, la curva de aprendizaje puede ayudarlo a realizar una compensación informada.

La saturación del modelo también entra en juego con la validación cruzada. Si no está cerca de la saturación, el uso de un pequeño número de pliegues le dará cifras de rendimiento pesimistas porque entrenará a su modelo con menos datos de los que puede utilizar.

Finalmente y viceversa, puede usar un modelo más complejo en lugar de "redimensionar" los datos para adaptarlos al modelo.

Bienvenido a DataScience.SE.

Emre
fuente