¿Cómo escalar el desarrollo de algoritmos?

18

Al trabajar en el análisis exploratorio de datos y desarrollar algoritmos, encuentro que la mayor parte de mi tiempo lo paso en un ciclo de visualización, escritura de código, ejecución en pequeños conjuntos de datos, repetición. Los datos que tengo tienden a ser del tipo de fusión de visión por computadora / sensor, y los algoritmos tienen mucha visión (por ejemplo, detección y seguimiento de objetos, etc.), y los algoritmos estándar no funcionan en este contexto. Me parece que esto requiere muchas iteraciones (por ejemplo, para marcar el tipo de algoritmo o ajustar los parámetros en el algoritmo, o para obtener una visualización correcta) y también los tiempos de ejecución incluso en un pequeño conjunto de datos son bastante largos, por lo que todo junto lleva un tiempo.

¿Cómo se puede acelerar el desarrollo del algoritmo y hacerlo más escalable?

Algunos desafíos específicos:

¿Cómo se puede reducir el número de iteraciones? (Esp., Cuando qué tipo de algoritmo, y mucho menos los detalles del mismo, no parece ser fácilmente previsible sin probar diferentes versiones y examinar su comportamiento)

¿Cómo ejecutar conjuntos de datos más grandes durante el desarrollo? (A menudo, pasar de un conjunto de datos pequeño a uno grande es cuando se ven un montón de nuevos comportamientos y nuevos problemas)

¿Cómo se pueden ajustar los parámetros del algoritmo más rápido?

¿Cómo aplicar herramientas de tipo aprendizaje automático para el desarrollo de algoritmos en sí? (Por ejemplo, en lugar de escribir el algoritmo a mano, escriba algunos bloques de construcción simples y combínelos de una manera aprendida del problema, etc.)

Alex I
fuente

Respuestas:

7

En primer lugar, si sus datos tienen tantas variaciones (en función del tiempo, contexto y otros) como para dificultar la aplicación de una estrategia única para hacer frente a ellos, es posible que le interese hacer un trabajo temporal / contextual / previo. Caracterización del conjunto de datos. La caracterización de datos, es decir, la extracción de información sobre cómo varía el volumen o las características específicas del contenido de acuerdo con algunos criterios, generalmente proporciona una mejor comprensión (más concisa y precisa) que simplemente inferir algoritmos en una forma de fuerza bruta.

Entonces, respondiendo cada pregunta:

  1. la caracterización es definitivamente un medio de reducir el número de iteraciones al intentar seleccionar algoritmos adecuados para datos específicos;
  2. Si tiene un conjunto discreto de criterios en los que sus datos varían, será mucho más fácil escalar soluciones, ya que sabrá qué información ganaría / perdería si se aplicaran soluciones más simples / específicas;
  3. después de una caracterización, también debería ser más fácil seleccionar parámetros, ya que sabría con qué tipo de datos específicos estaría tratando;
  4. finalmente, puede usar algoritmos de minería de datos / aprendizaje automático para admitir esta caracterización. Esto incluye el uso de:
    • algoritmos de agrupamiento, para reducir la dimensionalidad de los datos;
    • algoritmos de clasificación, para ayudar a decidir sobre propiedades específicas que pueden presentar los datos en función del tiempo / contexto / ...
    • reglas de asociación, para predecir un conocimiento particular del conjunto de datos, al tiempo que mejora / afina los datos utilizados para su posterior análisis;
    • y otras posibles estrategias y análisis.

Y aquí hay una lista de algunos criterios para analizar los datos, que pueden serle útiles.

Rubens
fuente
5

Dos cosas que pueden resultarle útiles:

  1. meta-aprendizaje para acelerar la búsqueda del modelo correcto y los parámetros óptimos. El meta aprendizaje consiste en aplicar herramientas de aprendizaje automático al problema de encontrar la herramienta / parámetros de aprendizaje automático adecuados para el problema en cuestión. Esto, por ejemplo, este artículo para un ejemplo práctico;

  2. gpucomputing para acelerar el algoritmo en conjuntos de datos más grandes. Por ejemplo, OpenCV puede usar GPU , que son muy efectivas en el procesamiento de imágenes / videos y puede traer de 10 a 100 aceleraciones con respecto a las CPU. Como es probable que su computadora tenga una GPU con capacidad de gpucomputing, podría ganar mucho tiempo usándola.

damienfrancois
fuente
4

Supongo que es probable que hayas visto esta demostración de YouTube y el Google Tech Talk relacionado, que está relacionado con estos documentos:

Y este conjunto de códigos en GitHub para OpenTLD . Si marca el "léeme" en GitHub aquí, notará que el correo electrónico del autor (Zdenek Kalal) está en la lista, por lo que podría valer la pena enviarle un correo electrónico sobre sus preguntas, o incluso invitarlo a responder a esta pregunta también.

errores
fuente