¿Cuáles son los patrones de diseño para proyectos de minería de datos / aprendizaje automático?

La belleza del aprendizaje automático es que en casi cualquier área, debería poder encontrar un problema en el que sería interesante intentar aplicar el aprendizaje automático. Los proyectos de cursos de los últimos años de la clase CS229 de Andrew Ng en Stanford son un buen ejemplo de esto. Hay mucha amplitud:

  • http://cs229.stanford.edu/projec…
  • http://cs229.stanford.edu/projec…

Por lo tanto, realmente depende de sus intereses, y lo mejor sería que diseñe un problema que le interese y luego comience a probar diferentes enfoques para resolverlo. Dicho esto, aquí hay algunos lugares en los que pensaría comenzar si estuviera en tu lugar. (Nota: si agrega comentarios o aclaraciones, actualizaré esta respuesta).

Conjuntos de datos geniales (esto es solo un pequeño subconjunto):

  • Una enorme base de datos de imágenes bastante bien etiquetadas: http://www.image-net.org/
  • Datos de quizás la competencia de clasificación / detección / segmentación de objetos más popular: http: //pascallin.ecs.soton.ac.uk…
  • Pruebe algo un poco diferente: prediga los resultados del torneo de baloncesto “March Madness” de la universidad: http://blog.smellthedata.com/201…

Herramientas:

  • Recomiendo descargar y jugar con Theano; le permitirá experimentar con más variaciones de un modelo con mucho menos dolor: http://deeplearning.net/software…

Otro:

  • He escrito sobre un tema relacionado aquí, y algunas personas han agregado a la discusión en los comentarios: http://blog.smellthedata.com/201…

Asumiré que no está hablando de crear software para implementar algoritmos de aprendizaje automático desde cero, sino de empaquetar bibliotecas ML en una tubería de datos (R, python scikit-learn, Spark …).

Algunos patrones:

Procesamiento asincrónico usando colas

Los sistemas de aprendizaje automático son complejos y pueden ser bastante impredecibles en términos de latencia. Dependiendo de sus datos, los óptimos se pueden encontrar más o menos fácilmente. También desea crear un sistema que pueda probar diferentes algoritmos A / B, por lo que la latencia puede variar según su complejidad (el registro logístico VS el bosque aleatorio es un ejemplo). Finalmente, cuanto más ingrese a algoritmos muy complejos (NN, apilamiento …), menos carga de trabajo se verá sincrónica. El uso de colas como kafka también lo ayuda a construir sistemas distribuidos para agregar más trabajadores si sus datos son lo suficientemente grandes.

Bucle de retroalimentación oculto y canales de datos

Esto es para sistemas donde su predicción influye en su propia verificación.

El bucle de retroalimentación oculto es un fenómeno bien conocido explicado por el hecho de que si influyes en una experiencia no puedes aprender de ella al mismo tiempo. Un ejemplo clásico es el sistema de recomendación de patrullas policiales. Si siempre predices que algo va a suceder en algún lugar y envías a la policía allí, solo podrán arrestar personas allí y no en otras zonas. Sus predicciones se confirmarán, su algoritmo aprenderá de eso y se sesgará cada vez más. Una solución a este fenómeno es dividir sus datos en dos o más canales: los datos de los que aprende y los datos que predice. Para los datos que aprende, realiza una predicción aleatoria, para que no se sesgue y vea su resultado más adelante para aprender de ella. Para el otro conjunto de datos, hace su mejor predicción para maximizar el ROI / lo que sea. Luego necesita un sistema capaz de dividir sus datos en varios algoritmos (aleatorio, algoritmo A, algoritmo B …), y dividirlo en algunas condiciones (10% de la entrada, muestreo equilibrado entre objetivos o variables …). Una buena manera de implementar eso es … colas.

Hachís truco y manejo novedad

El truco de hashing es una solución MUY práctica para arquitecturas de aprendizaje automático (es incluso mejor que las colas … imagínense). Básicamente, cuando entrena algoritmos de aprendizaje automático y desea obtener predicciones de él, esperará un número definido de variables. Este número es precisamente el número de variables que ha visto en el conjunto de entrenamiento. ¿Qué sucede si una nueva variable entra en su sistema después de una actualización? ¿O un nuevo valor para una variable categórica? El truco de hash es una solución muy sólida para eso. La idea es que defina una serie de variables que vendrán en su sistema (200 000, por ejemplo), emite todos los datos a un int (por ejemplo, crea una cadena age_22 si la siguiente línea es alguien 22 y la divide en hash un int) luego calcula el módulo de ese int sobre 200 000. El número que obtiene es el número de la columna para su valor, coloca 1 en esta columna. Por otro lado, obtiene datos escasos, que pueden no ser los mejores para algunos algoritmos como los árboles de decisión …

Esto es muy útil, también porque de todos modos tendrá que transformar sus variables categóricas en una matriz de N columnas con N el número de valores posibles. Por ejemplo :

N a menudo está cambiando, el orden de las variables también puede cambiar y así sucesivamente … no desea administrar eso. Un gran marco de ML que utiliza este truco es el vocal de wappal, que se centra en el aprendizaje en línea: JohnLangford / votepal_wabbit

(Falso) arquitectura Lambda

Excepto si opta por el aprendizaje en línea (actualice el modelo después de cada ejemplo), tendrá que volver a entrenar su modelo regularmente y validar su rendimiento de forma cruzada. Por otro lado, necesita su modelo para poder predecir datos en tiempo real o simplemente entrantes. Eso significa que necesitas dos capas. Uno donde los datos van para predicciones, uno donde se historizan y se usan para entrenamientos regulares. Habrá mucho código en común, como sus procesos para la creación de funciones, limpieza de datos, configuración para las bibliotecas de aprendizaje automático, etc. Hay mucha literatura sobre la arquitectura lambda, pero la idea general aquí es escribir código que es capaz de ejecutarse de forma continua y por lotes.

El descargo de responsabilidad “falso” se debe a que no tiene una capa de servicio (y la mayoría de las arquitecturas lambda de las que se habla no son arquitecturas lambda … ¡pero eso es para otro día!)

Arquitectura Kappa

Me gusta kappa Es una arquitectura propuesta para manejar las necesidades que acabo de describir, pero sin la complejidad de una arquitectura lambda real (escribir todo dos veces en una transmisión y un marco por lotes, creando una capa de servicio que pega las ventanas de tiempo …). La idea es que solo construya una arquitectura de transmisión y la use tanto para predicciones en tiempo real como para reproducir grandes lotes.

Cuestionando la arquitectura Lambda

El almacenamiento en caché se une a los datos entrantes

Una tarea común en el aprendizaje automático es agregar variables al ejemplo con el que intenta predecir. A veces puede ser bastante largo o complejo calcularlos, o puede estar muy por encima de los requisitos previos de latencia. Preparar estas características de antemano es un buen patrón. Supongamos que tiene una acción del cliente en su sistema de transmisión y desea agregar información sobre sus compras anteriores (promedio de 2 meses, compra máxima de su ciudad …). Puede calcularlos en lote y cargarlos en un caché de valores clave (redis, hashmap en memoria …). Simplemente se une con la identificación del cliente cuando el cliente ingresa al sistema de transmisión.

Además, en general:

  • Mantenga las cosas simples, use marcos bien entendidos
  • No intentes escalar si no necesitas
  • Piense en el perímetro funcional de su aplicación antes de pensar en un marco (Spark, por ejemplo)
  • Prefiero un conjunto bien escrito de líneas de Python en lugar de un desorden de tecnologías de big data juntas (kafka spark cassandra elastic search wombocombo)
  • Piense en la facilidad con que su sistema permite que su equipo de I + D ponga su modelo en producción. Si codifican en R y usted crea un código de escala personalizado para cada algoritmo, sugieren que no será muy ágil. Intente utilizar los mismos marcos para I + D y producción, y si no lo hace, intente utilizar herramientas estándar para traducir los modelos de un idioma a otro (PMML, por ejemplo).

Un patrón de diseño de ciencia de datos es muy similar a un patrón de diseño de software o un patrón de diseño de arquitectura empresarial. Es un patrón computacional reutilizable aplicable a un conjunto de problemas de ciencia de datos que tienen una estructura común y que representan una mejor práctica para manejar tales problemas . Esta página enumera nuestras publicaciones de blog de patrones de diseño de ciencia de datos, las más recientes primero.

Los patrones de diseño de la ciencia de datos generalmente combinan varios cálculos computacionales y puede estudiar un patrón de diseño a fondo antes de aplicarlo. En algunos casos, se han escrito libros completos sobre un patrón de diseño único.

1. Variable de fuente combinada –

La selección de variables es quizás la actividad más desafiante en el ciclo de vida de la ciencia de datos. La frase es un nombre inapropiado, a menos que reconozcamos que matemáticamente hablando estamos seleccionando variables del conjunto de todas las variables posibles, no solo las variables de origen sin procesar disponibles actualmente de una fuente de datos dada. [I] Entre estas posibles variables hay muchas combinaciones de variables fuente. Cuando una combinación de variables de origen resulta ser una variable importante por derecho propio, a veces decimos que las variables de origen interactúan, o que una variable media a otra. Acuñamos la frase variable sintética para que signifique una variable independiente que es función de varias variables fuente.

2. Manejo de valores nulos –

Existen muchas técnicas para manejar nulos. Las técnicas apropiadas para una variable dada pueden depender en gran medida de los algoritmos que pretenda utilizar, así como de los patrones estadísticos en los datos sin procesar, en particular, la falta de valores faltantes , la aleatoriedad de las ubicaciones de los valores faltantes. [I ] Además, diferentes técnicas pueden ser apropiadas para diferentes variables, en un conjunto de datos dado. A veces es útil aplicar varias técnicas a una sola variable. Finalmente, tenga en cuenta que los valores corruptos generalmente se tratan como nulos.

3. Suavizado de kernel de ancho variable –

Un problema fundamental en las estadísticas aplicadas es estimar una función de masa de probabilidad (PMF) o una función de densidad de probabilidad (PDF) a partir de un conjunto de observaciones independientes, distribuidas idénticamente. Cuando uno está razonablemente seguro de que un PMF o PDF pertenece a una familia de distribuciones que tienen un formulario cerrado, uno puede estimar los parámetros del formulario utilizando técnicas frecuentas como la estimación de máxima verosimilitud o técnicas bayesianas como el muestreo de aceptación-rechazo.

4. Plantillas de decisión –

Recuerde que una función de densidad de probabilidad (PDF) asigna la masa de probabilidad (probabilidad relativa) a colecciones de eventos medibles en un espacio muestral. [I] Una función de distancia o métrica de PDF es una función de distancia en algún conjunto de archivos PDF. Por ejemplo, considere el conjunto de archivos PDF geométricos. El PDF geométrico se define por la probabilidad de éxito inicial

p (primer éxito en k prueba) = (1 – p) kp.

La distancia entre dos archivos PDF geométricos con tasas de éxito por prueba respectivas p

y P

es

d (p1, p2) = | p2 – p1 |.

(Trivialmente, p

y P

son números reales, y el valor absoluto es una función de distancia en los reales; entonces d (p

, pags

) también es una función de distancia.)

El concepto de una clase de equivalencia surge cuando uno divide un conjunto S en subconjuntos denominados clases de equivalencia que son disjuntos por pares y exhaustivamente colectivos, de modo que cada elemento de S es miembro de exactamente un subconjunto. Todos los elementos en una clase dada son equivalentes .

Para proyectos de aprendizaje automático, sugeriría abordarlo de esta manera:

  1. Identifique el conjunto de datos que va a utilizar.
  2. Cree una métrica que le interese y quiera medir
  3. Elija el marco de su elección según el tipo de aprendizaje automático que planea hacer. Por ejemplo, para aprendizaje profundo, flujo de tensor y para otras tareas de aprendizaje automático más tradicionales, scikit-learn
  4. Cree el modelo con su código e identifique las métricas que le interesan.
  5. Póngalo todo junto para entrenar a sus modelos y realizar un seguimiento de su trabajo. Usar una herramienta como Datmo para realizar un seguimiento de las instantáneas es una buena manera de realizar un seguimiento de su progreso a lo largo del tiempo y compartir los resultados con sus colegas o colaboradores.

Espero que esto ayude 🙂

Puede haber procesos de minería de datos, pautas o mejores prácticas (por ejemplo, Shearer (2000), Principios y mejores prácticas de minería de datos (SAS), mejores prácticas de minería de datos (Canadian Marketing Association), pero no creo que haya muchas de patrones de diseño en minería de datos. Puede consultar este documento, que presenta 2 patrones de minería de datos: un enfoque de minería de datos basado en patrones. También presenta algunas ideas para posibles patrones de diseño.

Referencias
Delibašić, B., Kirchner, K. y Ruhland, J. (2008). Un enfoque de minería de datos basado en patrones. En Análisis de datos, aprendizaje automático y aplicaciones (págs. 327-334). Springer Berlin Heidelberg.
Shearer, C. (2000). El modelo CRISP-DM: el nuevo plan para la minería de datos. Diario de almacenamiento de datos, 5 (4), 13-22.

No conozco ninguno, aunque eso no significa que no existan.

Existen pautas de flujos de trabajo para resolver un problema a través del análisis de datos (usemos esto como conceptos básicos para resolver un problema de ciencia de datos; a menudo hay más que ignoraremos para simplificarlo), pero, dado que hay tantos problemas y tantos tipos diferentes de soluciones (por ejemplo, algoritmos de ML, modelos estadísticos, etc.) e incluso más tipos de datos … deben tomarse con un grano de sal. En cualquier situación, las cosas cambian y el plan tiene que adaptarse. Por supuesto, podría tener un flujo de trabajo para todos los problemas, pero sería tan general que no le diría mucho.

Dado que gran parte del uso del aprendizaje automático es resolver problemas de ciencia de datos (y otros relacionados), llamemos al “aprendizaje automático” mi parte favorita personal del aprendizaje automático: investigación y desarrollo. Y hay formas de hacer esto, genéricamente hablando, métodos para abordar esto. Pero no hay patrones de diseño.

Estoy en el proceso de desarrollar un lenguaje de patrones para el aprendizaje profundo. Puede ver el progreso continuo de este trabajo en A Pattern Language for Deep Learning.

Como muchas de las respuestas revelan aquí, por supuesto, hay mucha confusión cuando usas la frase “Patrón de diseño” en el contexto del aprendizaje automático (o específicamente el aprendizaje profundo). Los “patrones de diseño” o, más generalmente, un “lenguaje de patrones” implica la creación de un lenguaje específico de dominio que describe patrones recurrentes en un dominio. Estos patrones forman un vocabulario útil para comunicarse con otros profesionales.

Encuentro los siguientes patrones descritos en el libro Gang of Four
bastante útil para construir software ML orientado a objetos.

Fachada : interfaz sencilla para el cliente que oculta un sistema de objetos más complejo. Es útil pensar, por ejemplo, la Red Neural o el Modelo de tema como una simple fachada
– interfaz que oculta una funcionalidad más general y bien factorizada.
De esta manera, toda la funcionalidad no se incluye en una clase de reutilización limitada.

Estrategia : interfaz común para una familia de algoritmos relacionados.

Fábrica : interfaz para ensamblar objetos compuestos, como algoritmos
utilizando más de un modelo y confiando en datos como diccionarios, índices …

Adaptador : para manejar varias API de ML de manera unificada,
crear una interfaz unificadora y adaptarla.

Decorador : para modificar la funcionalidad,
por ejemplo, agregar el almacenamiento en caché a un algoritmo.

He leído resúmenes de muchos artículos de diversos campos, especialmente la visión por computadora y el aprendizaje automático. He estado viendo un patrón en la forma en que los investigadores chinos, japoneses y singapurenses escriben sus resúmenes (y explican sus resultados). Es (incluso más) al punto, y a veces parece respuestas a un conjunto predefinido de preguntas que un lector definitivamente querría ser respondido, una sensación de logro, orgullo y felicidad en los resultados, etc. En comparación con los estadounidenses, europeos Los investigadores tienden a ser más filosóficos, expresivos y más reveladores sobre las implicaciones y el impacto del trabajo a veces. Indios, no puedo decir mucho con gran confianza sobre haber encontrado algún patrón.

Para empezar, adivina este, no es parte del resumen, pero espero que entiendas:

Usando libsvm, nuestro grupo es el ganador del IJCNN 2001 Challenge (dos de las tres competiciones), la competencia mundial EUNITE en predicción de carga eléctrica, el desafío de selección de características NIPS 2003 (tercer lugar), WCCI 2008 Causation and Prediction challenge (uno de los dos ganadores) y Active Learning Challenge 2010 (2do lugar).

Una vez más, todos sus estilos tienen sus ventajas. No estoy diciendo nada en contra de nadie.

El problema que propongo es poder determinar el país de origen y la ubicación geográfica del autor de un artículo a partir de su resumen. Aunque no es preferido, puede trabajar con papeles escritos únicos.

Excelente pregunta Aquí hay algunos que termino usando a menudo

  1. Lenguajes específicos de dominio para transformar datos a una forma canónica que puede ser digerida por el sistema de decisión
  2. Ah y modelos de datos canónicos, para admitir arriba
  3. Para la clasificación y regresión de lotes, un sistema de validación cruzada muy paralelo. Un caso de uso ideal para la nube bajo demanda

Voy a masticar esto un poco más y agregaré a medida que surjan cosas más nuevas

Es difícil clasificar esto como un “patrón” per se, quizás “heurístico” sería más adecuado, pero “seguir los datos” es una forma importante de proceder. Es decir, el aprendizaje automático debería ayudarlo a comprender dónde existe la “relevancia” en los datos, ya que es poco probable en los datos del mundo real que dicha información se distribuya uniformemente en todas las características y todos los elementos de datos. Esto está implícito en la lista proporcionada por Anónimo.