¿Qué deben saber todos los ingenieros de software sobre el aprendizaje automático?

De hecho, tengo una lista de cosas que las personas que son nuevas en ML deben saber. Supongo que esto también se aplica a los ingenieros s / w. Aunque he detallado esto en mi blog – Machine Learning – qué es, qué no es – a continuación, una versión tl; dr-ed:

  1. No evite aprender las matemáticas detrás de los algoritmos. Hackear a un nivel superficial solo puede llevarte muy lejos.
  2. Los humanos pueden vencer tus algoritmos. No estoy seguro de por qué esto es una sorpresa para muchas personas, pero lo hace. En muchos casos, utiliza ML cuando la escala que puede manejar una computadora es más importante que la precisión que puede proporcionar un humano.
  3. Los patrones detectados por muchos algoritmos no pueden interpretarse convenientemente. No significa que no se pueda confiar en su uso. Las ANN y SVM caen en esta categoría, además de muchos otros ‘de alto rendimiento’. No te obsesiones con este aspecto.
  4. Utiliza las métricas correctas. Es posible que se proponga resolver algún problema del mundo real y, finalmente, puede sorprenderse (negativamente) por el rendimiento de un algoritmo que se vio bien en una prueba. Existe la posibilidad de que la métrica de evaluación informada por su herramienta no coincida con lo que intuitivamente quería resolver. Elija una métrica que concrete lo que quiere. La precisión no siempre es suficiente: piense en la puntuación F1, el levantamiento, el AUC, etc.
  5. Siempre tenga una línea de base. Use un modelo simple para informar sus primeros resultados; esto le indica qué tan difícil es el problema . La precisión del 97% puede ser buena para un problema, pero podría no ser un número tan bueno para otro problema; no lo sabrá hasta que tenga una línea de base.
  6. Siempre pruebe un algoritmo para evaluar su utilidad para su conjunto de datos. No asuma que funcionaría, porque “ellos” dicen que sí, o se ve bien en el papel. He tenido poderosos algoritmos que fallan en ciertos datos debido a peculiaridades muy específicas del conjunto de datos.
  7. Algunas ideas sobre las que debería leer son: el equilibrio de sesgo-varianza, el efecto de la dimensionalidad en los algoritmos y la práctica de la validación cruzada.
  8. Haga su encuesta de literatura (o evite dejar que su arrogancia se apodere de usted). ML es un campo que evoluciona muy rápidamente y muchas ideas y casos de uso se discuten en documentos. Por lo que sabes, tu problema ya ha sido resuelto por alguien más: aprovecha este hecho. En lugar de hacer algo subóptimo, pase un poco más de tiempo leyendo e implemente algo que sea robusto y óptimo o casi óptimo.
  9. Trabajar con datos es mucho trabajo sucio . No se deje llevar por los problemas de los juguetes ordenados y elegantes que le muestran varios cursos en línea. Los datos del mundo real son cualquier cosa menos elegantes y es probable que pase mucho tiempo limpiándolos, preprocesándolos, normalizándolos, buscando valores perdidos, etc. Si desea pasar a un trabajo orientado a ML, hable con personas sobre qué tipo de trabajo hacen a diario.
  10. Progresa incrementalmente. Ante un problema, no te encierres dentro de una habitación hasta que te acerques a un rendimiento del 100%. Al igual que en el software, piense en versiones: cree un modelo que funcione mejor que la línea de base en el primer intento, despliegue, regrese y haga un mejor modelo; enjuague y repita, hasta que su curva de aprendizaje (http://www.astroml.org/sklearn_t…) se estabilice. No te obsesiones con hacerlo bien en el primer intento.

1. Los algoritmos de aprendizaje automático predicen , clasifican y agrupan datos.
2. El aprendizaje automático es un campo muy amplio e interdisciplinario que combina álgebra lineal, estadísticas, habilidades de piratería, habilidades de bases de datos y habilidades de computación distribuida.
3. La mayoría de los practicantes de aprendizaje automático que conozco y conozco crecieron en el campo; es decir, no tienen doctorados en aprendizaje automático.
4. Los puntos de datos se representan como puntos multidimensionales en un plano o hiperplano.
5. Los algoritmos de aprendizaje automático se pueden agrupar ampliamente en supervisados y algoritmos de aprendizaje no supervisados .
6. El aprendizaje supervisado implica el uso de puntos de datos etiquetados (por ejemplo, una colección de dígitos escritos a mano pre-etiquetados de 0 a 9) para predecir las etiquetas de un “conjunto de prueba” sin etiquetar.
7. La vieja regresión lineal es un ejemplo de aprendizaje automático supervisado.
8. Uno de los ejemplos más comunes de aprendizaje no supervisado es la “agrupación”, mediante la cual los puntos de datos se agrupan en agrupaciones algorítmicamente.
9. La esencia del aprendizaje automático es minimizar una llamada función de costo , a menudo a través de algoritmos iterativos como el descenso de gradiente.
10. Uno de los primeros y más críticos pasos en los problemas de aprendizaje automático es la extracción de características , lo que significa representar las entradas de manera coherente y significativa como puntos en un (hiper) plano.
11 El aprendizaje automático es una parte de la ciencia, una parte del arte. Saber cómo aplicar algoritmos es la mitad de la historia. El arte del aprendizaje automático radica en la resolución efectiva de problemas (diagnóstico de problemas), la extracción de características y el uso de trucos como aumentar y arrancar.
12. El aprendizaje automático guía más aspectos de nuestras vidas de lo que la mayoría de la gente podría imaginar, desde los sistemas de recomendación de Amazon / Google / Netflix hasta los enrutadores y los frenos de los automóviles.
13. Solo eres tan bueno como tus datos: la efectividad irracional de los datos por Halevy, Norvig y Pereira.

Machine Learning es en sí mismo un gran aprendizaje. El término aprendizaje automático se explica por sí mismo. Las máquinas aprenden a realizar tareas que no están programadas específicamente para hacer.

El aprendizaje automático en un proceso es

  1. Algoritmos que consumen datos enormes
  2. Excavar patrones de los datos
  3. Convertir patrones en acciones

No se sorprenda si se encuentra con un anuncio exactamente similar a sus intereses que deseaba comprar la última vez que estaba comprando en línea. Eso simplemente es aprendizaje automático.

El aprendizaje automático es un campo extenso, saber que Python no es lo suficientemente bueno. Hay muchas otras cosas que debes saber para ser un ingeniero de aprendizaje automático.

Estas son las habilidades que tendrá que desarrollar además de Python para sobresalir en el campo del aprendizaje automático.

Habilidades básicas

Machine Learning es una mezcla de ingeniería de software, matemática y ciencia de datos. Estas tres son las habilidades básicas y uno debe ser competente en ello. Profundizando en esto

Probabilidades y estadísticas

Uno puede aprender sobre algoritmos con la ayuda de teorías de probabilidad y estadística. Algunos modelos como los modelos de mezcla gaussiana, los modelos naive bayes y los modelos ocultos de Markov exigen una comprensión sólida de la probabilidad y las estadísticas. Aprende la teoría de la medida. Las estadísticas ayudan como medida de evaluación del modelo, como curvas receptor-operador, matrices de confusión, valores p, etc.

Modelado de datos

Los ingenieros de aprendizaje automático también tienen que analizar datos no estructurados. Esto se basa principalmente en la ciencia del modelado de datos, el proceso de evaluar la estructura básica de un conjunto de datos, ubicar patrones y cerrar la brecha donde no hay rastros de datos. El modelado de datos es la base del desarrollo de algoritmos firmes que se pueden mejorar con el tiempo.

Habilidades en programación

Sus habilidades de programación y desarrollo de software serán las más importantes, ya que el aprendizaje automático se trata de desarrollar algoritmos productivos.

Programación y fundamentos informáticos

Hay muchos cálculos sobre una cantidad extremadamente grande de datos en el aprendizaje automático. Por lo tanto, uno debe ser claro con

  • Estructuras de datos como colas, matrices multidimensionales, pilas de árboles, gráficos, etc.
  • Complejidad como problemas NP-completos, P vs. NP, notación big-O.
  • Algoritmos como búsqueda, optimización, programación dinámica, clasificación.
  • Constitución informática como caché, puntos muertos, memoria, ancho de banda, procesamiento distribuido.

Una vez que conozca profundamente estos fundamentos, también es responsable de saber cómo aplicarlos y desplegarlos durante la programación.

Diseño de software

¿Qué ofrecen los ingenieros de aprendizaje automático? Entregan “Software”. Si miramos de cerca, el software es un componente muy pequeño, sin embargo, un cambio de juego en una gran comunidad de productos y servicios. Por lo tanto, es importante formar sistemas y algoritmos que puedan integrarse efectivamente con dicho software. Al tener un fuerte dominio de la API, las bibliotecas dinámicas ayudarán en el diseño de software adecuado y el desarrollo efectivo de interfaces.

Matemáticas Aplicadas y Algoritmos

Se puede acceder fácilmente a las implementaciones universales del aprendizaje automático a través de bibliotecas como Theano, scikit-learn, Spark MLlib, TensorFlow, H2O, etc. Sin embargo, elija un modelo apropiado para implementarlas de manera efectiva como árbol de decisión, vecino más cercano, red neuronal, conjunto de múltiples modelos, admite máquinas de vectores, etc. Debe tener conocimientos sobre optimización convexa, programación cuadrática, gradiente decente, ecuaciones diferenciales parciales, lagrange, etc. Además, es importante tener una idea sobre los méritos y deméritos de diferentes enfoques, como el sobreajuste y la falta de ajuste, la fuga de datos, sesgo y varianza, datos faltantes, fuga de datos.

Lenguajes de programación de aprendizaje automático

El aprendizaje automático no se limita a ningún idioma específico. Encontrará bibliotecas ML en diferentes lenguajes de programación como C, C ++, R y Python. Entre todos estos lenguajes de programación, el mejor lenguaje en mi opinión para seguir adelante es Python.

Los científicos de datos y los ingenieros de aprendizaje automático se enamoran fácilmente del lenguaje python debido a su fácil sintaxis. Python garantiza una eficiente informática científica y procesamiento de datos, gracias a sus útiles bibliotecas como SciPy, NumPy y Pandas. Algunas bibliotecas especializadas de ML como Theano, scikit-learn y TensorFlow desarrollan fácilmente algoritmos con diversas plataformas informáticas.

Con tanto entusiasmo por el aprendizaje automático ya en 2017, estoy seguro de que el aprendizaje automático surgirá más en los próximos años. ML jugará un papel importante en moldear el futuro de las plataformas en línea.

Descargo de responsabilidad: soy cofundador de @GreyAtom y ayudo a talentos de ingeniería a encontrar carreras sostenibles en tecnologías emergentes.

El programa insignia altamente selectivo de GreyAtom tiene como objetivo orientar a los profesionales que trabajan y los más novedosos en el inicio de su carrera de ciencia de datos. Los estudiantes crearon proyectos a partir de conjuntos de datos REALES y declaraciones de problemas proporcionadas por nuestra industria y socios de contratación. El programa se basa en el aula y está fuertemente orientado a la práctica. GreyAtom es un ecosistema donde los estudiantes pueden aprovechar lo mejor de la academia, profesionales de la industria y personas influyentes.

Algunos enlaces rápidos

# 1) No te preocupes demasiado por el algoritmo
Todos los algoritmos de Machine Learning se basan en la correlación y tienen algunas suposiciones integradas sobre las distribuciones de los datos que están analizando. Dado que todos los algoritmos se basan en una base matemática muy similar, no pierda el tiempo tratando de elegir el “mejor” algoritmo, elija el más fácil para comenzar y vea qué puede aprender de los datos. Probablemente encuentre que necesita ajustar o limpiar los datos.

Mantenerse simple lo ayuda a comprender, cuando invariablemente su algoritmo aprende alguna relación extraña, por qué esto es así.

# 2) preprocesamiento
Encontrará que el preprocesamiento de datos puede simplificar mucho el problema de aprendizaje. Desde la refundición de los datos en una mejor distribución (para su algoritmo) hasta otros desafíos (por ejemplo, cómo lidiar con los datos faltantes), encontrará que esto impulsa gran parte de su éxito

Por lo general, cualquier proyecto de LA supervisado implicará la mayoría, si no todos, los siguientes:

1) Manejo de datos sin procesar: realmente necesita comprender la naturaleza de los datos con los que está tratando. En particular, debe comprender cómo extraer características de sus datos. Suponga que está tratando de construir un software que distinga entre los tumores de mama benignos y malignos de las tomografías computarizadas. Las imágenes pueden considerarse como datos sin procesar, mientras que sus características probablemente serían el ancho, el contraste, el brillo, etc. del tumor.

2) Selección de funciones: en muchos escenarios terminas con una cantidad ridículamente grande de funciones. Debe distinguir entre características influyentes y basura. Hay muchas formas de seleccionar las características más influyentes, por ejemplo, ganancia de información, relación de ganancia, ReliefF, etc.

3) Elección del algoritmo: hay una amplia gama de algoritmos de clasificación. Cada algoritmo funciona de manera diferente y es más adecuado para ciertos datos que otros. Bayes ingenuos, árboles de clasificación, máquina de vectores de soporte y k vecino más cercano son algunos algoritmos de uso común.

4) Probar el rendimiento de su clasificador: una forma comúnmente utilizada es dividir sus datos en un conjunto de entrenamiento y un conjunto de prueba. Pero, ¿qué pasa si tiene un conjunto de datos muy pequeño que no puede permitirse usar una gran parte de él solo para probar? Se pueden utilizar técnicas como la validación cruzada y la opción de exclusión para lidiar con tales escenarios.

5) Evaluación de los resultados de su prueba: ¿Cómo evaluamos realmente los resultados de nuestra prueba? ¿Utiliza la precisión de clasificación como una medida de rendimiento? ¿Quizás, también necesitamos analizar otras medidas como la sensibilidad y la especificidad ?

Los puntos anteriores definitivamente no le hacen justicia a un campo amplio como ML. Ni siquiera hemos tocado otros tipos de aprendizaje, como no supervisados ​​o semi-supervisados, pero los puntos anteriores son absolutamente importantes si va a participar en un proyecto de aprendizaje automático.

Esta es definitivamente una pregunta importante y común en el tema de Machine Learning. Creo que referirse a Algunas cosas útiles que debe saber sobre el aprendizaje automático ( http://homes.cs.washington.edu/~ …), de Pedro Domingos, es un gran comienzo. Aquí están los puntos de alto nivel de su artículo, es una lectura rápida, no los estropearé al tratar de resumirlos incorrectamente aquí.

  • Aprendizaje = Representación + Evaluación + Optimización
  • Es la generalización lo que cuenta
  • Solo datos no son suficientes
  • El sobreajuste tiene muchas caras
  • La intuición falla en altas dimensiones
  • Las garantías teóricas no son lo que parecen
  • La ingeniería de características es la clave
  • Más datos superan un algoritmo más inteligente
  • Aprende muchos modelos, no solo uno
  • La simplicidad no implica precisión
  • Representable no implica aprendible
  • La correlación no implica causa

Algunos de estos puntos son genéricos, pero se proporciona una explicación y comprensión útiles para cada uno.

El equipo de BigML también resume este artículo en una publicación de blog de dos partes,

  • Todo lo que quería saber sobre el aprendizaje automático, pero tenía demasiado miedo de preguntar (primera parte)
  • Todo lo que quería saber sobre el aprendizaje automático, pero tenía demasiado miedo de preguntar (segunda parte)

Desde el punto de vista de un ingeniero de software:

  • Ese ML es una solución prometedora para muchos problemas, desde chatbots hasta autos autónomos, y es muy posible que usted, como ingeniero de software, pueda ser contactado por su organización para saber más sobre cómo aprovecharlo.
  • Que hay muchas soluciones de código abierto que han dado un gran impulso al campo, por lo que no solo las grandes empresas pueden aprovecharlo (excepto quizás por la cantidad de datos necesarios)
  • Ese ML es un campo de especialización que implica comprender soluciones matemáticas, que forman la base para ML, la gestión de datos, así como algunas habilidades de programación para implementar, probar y luego implementar las soluciones en un entorno de TI específico. Esta implementación puede implicar el desarrollo de aplicaciones o páginas web para interactuar y presentar los resultados de la solución, por lo que al menos debe comprender las entradas-salidas del algoritmo
  • Que al ver a ML como una solución computacional específica que necesita ser entregada a través de componentes web / aplicación (y que interactúa con ellos), sus actividades pueden necesitar integrarse en un proyecto de software más grande que use metodologías / modelos / métodos / procesos como Scrum / PMBOK / CMMI / etc.
  • Que este campo avanza y cambia todos los días, por lo que debe mantenerse al día. A pesar de que los algoritmos fundamentales son maduros, todavía están surgiendo marcos y métodos.
  • Ciclo de vida: algunos profesionales utilizan un enfoque en cascada, pero otros recomiendan más un enfoque de creación de prototipos evolutivos (rápido y sucio, luego aprenden más sobre los datos para ajustar su algoritmo y luego buscar la solución final). Todavía no he visto nada como un enfoque incremental / iterativo para la solución ML específica
  • Roles: No he visto en ML una separación de roles como en ingeniería de software (analista, programador, probador, etc.). En realidad, el desarrollo de la solución central de ML puede necesitar un equipo integrado con un propietario de la solución (producto), un especialista en ML, un científico de datos, un programador y un poco de apoyo del DBA, el administrador de sistemas y el área de implementación
  • Datos: Hay un dicho en ML “” No es quién tiene el mejor algoritmo que gana. Es quién tiene la mayor cantidad de datos “, pero que yo sepa, no siempre se aplica porque depende del grado de sesgo en sus datos. Por otro lado, el antiguo GIGO (garbage-in = garbage-out) ciertamente se aplica aquí. Necesita los datos correctos (para el logro de los objetivos de la organización) y también los datos correctos (calidad de los datos)
  • Lenguaje de programación: no está restringido a uno específico, aunque algunos de ellos facilitan las cosas para el desarrollo de la solución ML (por ejemplo, si tiene bibliotecas matemáticas o es compatible con marcos o algoritmos ya implementados que puede usar)

Espero que ayude.

Francamente hablando nada! El aprendizaje automático ciertamente se está volviendo popular, pero en realidad lo usan muy pocas personas. Conozco a muchos ingenieros de software exitosos que ni siquiera saben qué es el aprendizaje automático. Sin embargo, será bueno conocer (no es necesario saber) algunos principios del aprendizaje automático que pueden ayudar a un ingeniero de software a jugar con grandes conjuntos de datos y darle sentido. Nos estamos moviendo al mundo de grandes conjuntos de datos, ¿no?

Si ya está listo como ingeniero de software, la mayoría de lo que necesita saber es simple. Primero, ¿puedes darle sentido a un gran conjunto de datos? ¿Puedes desglosarlo para que una persona no técnica pueda entenderlo? ¿Puede encontrar patrones dentro de ese conjunto de datos y hacer predicciones basadas en él? Si puedes hacer eso, entonces ya eres bueno en ML

Todos los ingenieros de software? Nada. No veo ninguna razón por la que alguien que escribe microcódigo para un controlador integrado en una aspiradora deba perder su tiempo con el aprendizaje automático.

Una buena metodología para definir / explicar el “problema” que desea aprender a su Agente.

De esta manera, no se quedará atascado en un Algoritmo / metodología que de lo contrario le causaría la pérdida de mucho tiempo / recursos o, lo que es peor, el Agente seguirá repitiendo una cláusula que no entiende / no está bien definida para el Agente para procesar los datos.

Además, un DB bien definido (relacional) tiende a acelerar bastante el aprendizaje (uso Prolog para esto, pero hay alternativas, por supuesto)

Personalmente, me encantan los diagramas de flujo o los diagramas de estructura del programa cuando diseño, pero supongo que ya los sabías.

More Interesting

¿Hay alguna API (y documentación) disponible para crear arquitecturas de red neuronal personalizadas usando Deeplearning4j?

¿Qué algoritmos de aprendizaje automático se pueden usar para crear una calculadora matemática de lenguaje natural en Python?

¿Podría la IA volverse autónoma y aprender y adaptarse de manera no supervisada a través del aprendizaje profundo?

Cómo saber si una startup tecnológica que ofrece soluciones empresariales que utilizan el aprendizaje exclusivo en profundidad está tratando de estafar a mi empresa

En la regresión logística multinomial, ¿por qué el valor p en la prueba de razón de probabilidad es significativo pero en las estimaciones de parámetros no es significativo para cada dimensión?

Cómo calcular la probabilidad de que una oración aparezca en algún lugar del texto usando Word2Vec

¿Cómo se ha desviado Grok Solutions de la visión de Numenta?

¿Cómo soluciona un bosque aleatorio los problemas de regresión (no normalidad, heterocedasticidad, multicolinealidad, valores atípicos, valores faltantes y variables categóricas)?

¿Cómo se usa el aprendizaje automático en la ciencia de los materiales?

¿Cuál es una buena distribución para usar para simular un conjunto de entrenamiento para la clasificación supervisada?

¿Es el análisis de datos funcionales simplemente renombrado análisis wavelet en estadísticas?

¿Cuál es el mejor enfoque para aprender sobre los algoritmos de redes neuronales de predicción del mercado de valores?

Cómo llegar a un problema de aprendizaje automático para un proyecto personal

Cómo aplicar mis conocimientos de aprendizaje automático para invertir en el mercado de valores indio

¿Cuál es su experiencia de aprendizaje automático en el mundo real en Haskell?