¿Qué lenguaje de programación debo usar para implementar algoritmos de Machine Learning?

Como Trevor Sullivan ya ha dicho Python, y ha indicado la amplia gama de bibliotecas disponibles para los programadores de Python, creo que no es necesario explicarlo más. Sin embargo, aquí hay algunas otras opciones:

  1. Scala: Puede que no lo parezca, pero Scala está a la vanguardia de la revolución del análisis de datos, porque es el lenguaje utilizado para programar Apache Spark, que se considera ampliamente el marco de transmisión de datos más prometedor que existe ahora. Scala es un lenguaje de tipo estático, tiene una sintaxis más fácil y está diseñado teniendo en cuenta el procesamiento paralelo. Se ejecuta en la máquina virtual Java relativamente rápida (que alguna vez fue lenta pero en los últimos años se ha vuelto tan rápida como cualquier otro marco). También tiene la ventaja de poder usar las bibliotecas ya construidas para Java. Spark también tiene MLlib, que es una biblioteca de aprendizaje automático que implementa enfoques comunes de aprendizaje automático (algoritmos de clasificación y regresión típicos y una o dos variantes avanzadas)
  2. R: El lenguaje R para computación estadística es un lenguaje de programación antiguo pero útil para construir aplicaciones intensivas en datos y para hacer ciencia de datos. En este contexto, las bibliotecas de aprendizaje automático que ya están presentes en R se pueden usar para convertir el código ML muy rápido (ciclo de producción en cuanto al tiempo). La funcionalidad de alto nivel de R y el hecho de que está diseñado para los estadísticos hace que sea un lenguaje útil para aquellos que no son realmente programadores pero que tienen antecedentes estadísticos y quieren usar el aprendizaje automático para resolver problemas.
  3. Java: todavía se están desarrollando bibliotecas en Java para programar redes neuronales, aunque no hay muchas aplicaciones específicas de datos que se centren en ML aparte de lo que ya existe dentro de Hadoop y la pila de tecnología relacionada.

Python es un buen lenguaje para implementar una gran variedad de algoritmos ML debido a la disponibilidad de muchas bibliotecas que lo soportan, esto también se aplica a Java. Pero si está escribiendo sus propios algoritmos de ML, es posible que desee codificar algoritmos más rápidos en lenguajes nativos como C o C ++ y luego escribir bibliotecas de envoltura de Python o Java.

La biblioteca que escribí para mis algoritmos ML que se está aplicando actualmente en mis proyectos de visión por computadora es una biblioteca C / C ++. Personalmente, trabajo con C / C ++ en todos mis proyectos, tal vez es porque escribí todo desde cero, por lo tanto, necesitaba codificar cerca del metal.

Espero que esto ayude.

Cuando habla de “implementar algoritmos de aprendizaje automático”, no está claro en qué parte del flujo de trabajo está pensando. La respuesta depende del flujo de trabajo.

Por lo general, el flujo de trabajo está separado por dos etapas muy diferentes.

  1. Prototipos
  2. Despliegue

La razón por la que debe tener dos etapas es que no sabe lo que debe implementar hasta que analice los datos y luego pruebe diferentes algoritmos y parámetros de ajuste para obtener el mejor modelo de rendimiento. Este proceso es muy iterativo (mucha prueba y error) y un lenguaje de bajo nivel como C es demasiado engorroso para usarlo para una iteración rápida. MATLAB, R y Python a menudo se usan para la creación de prototipos porque es fácil de iterar y probar cosas diferentes.

Una vez que tenga el modelo final, debe implementarlo en el entorno de destino donde se utilizará el modelo. En este punto, necesita velocidad y escalabilidad, y C y Java pueden ser una buena opción.

Sin embargo, sabe que tiene un problema: el modelo se codificó en lenguaje de alto nivel, pero el código de producción debe implementarse en un lenguaje de nivel inferior para el rendimiento. Este es uno de los problemas con los que Netfix se topó con la solución ganadora del Premio Netflix.

El Premio Netflix y los sistemas de aprendizaje automático de producción: una mirada privilegiada

Una forma de resolver este dilema es derivar componentes de bajo nivel de su modelo e integrarlos en el sistema de producción. Puedes hacerlo con MATLAB.

También puede generar directamente código C / C ++ desde MATLAB.

La mayor parte de la industria parece estar usando Python o Matlab para el aprendizaje automático. El primero es mucho más fácil de aprender y es más popular. Desea buscar numpy, scikit, scikitlearn, matplotlib, nltk, pybrain, theano y lasaña (que le permite entrenar en la GPU).

Matlab no es mucho mejor, y creo que es mucho peor porque la ayuda es más difícil de conseguir y los documentos son bastante arcanos, pero los tipos más duros de ciencia / ingeniería parecen preferirlo, porque está un poco dirigido a ellos. Programación funcional, todo lo que necesita para redactar, codificar y ejecutar está en una matriz ejecutable, indexada en 1 (porque los ingenieros no pueden contar hasta 0), cuesta mucho, mucho dinero, etc. exactamente lo que le gusta a ese tipo de personas. Como compañero informático, recomendaría Python sobre Matlab cualquier día.

Aunque, en cualquier caso, el mejor idioma para saber es el que requiere su profesor. Como todavía eres estudiante, te recomiendo que tomes algunas clases de aprendizaje automático. Aprenda sobre lo que está haciendo mientras aprende cómo implementarlo, y hágalo en cualquier idioma que haga el profesor. La mayor parte del conocimiento que se obtiene de la codificación en un idioma se puede transferir a otro. Aprendí todas mis habilidades de aprendizaje automático y PNL trabajando en Matlab, pero todo el trabajo real que hago es en Python, se transfiere.

Todos los demás te están dando buenas respuestas positivas como Python. Me gustaría decir que Julia también es un gran ambiente. Al mismo tiempo, creo que tiene valor darte respuestas negativas.

Java, hay muchas buenas bibliotecas, pero las tendencias en ML realmente requieren grandes cantidades de memoria y aquí es donde la JVM tiene su mayor limitación. Si bien elegir Java no será horrible, no estoy seguro de cuán bueno sea sobre cualquiera de los buenos, si es que lo es.

Vaya, no es realmente un caso fuerte para este idioma. Tiene todas las tuberías correctas, pero creo que falta la siguiente capa para la computación científica y numérica. Go no estaba destinado a esos fines y solo ahora está viendo incluso que las bibliotecas aparecen en este campo en cualquier masa. Si está rodando sus propias cosas, podría ser una gran opción, pero no lo recomendaría hoy (espero que esa respuesta cambie con el tiempo).

C, no al principio. Implementar algoritmos de ML en C puede estar intentando. ¿Vale la pena tan poco tiempo para hacer prototipos e investigaciones en este idioma? Probablemente no. Una vez que tenga una idea de lo que está haciendo, puede ser una buena opción volver a implementar en C para obtener velocidad, eficiencia de memoria y portabilidad del lenguaje (es el rey de ser llamado por otros idiomas).

R y Matlab tienen algunas buenas bases de código en las que confiar, pero en mi experiencia, el panorama de Python es igual de bueno con un mejor rendimiento y una ruta de optimización. Scala es el chico popular actual en el bloque, pero elegiría Clojure sobre él (preferencia personal).

Al final, elija algo que parezca capaz de resolver su problema y ejecútelo. Que te diviertas.

Si usa algo como TensorFlow: Python.

Si quieres escribir todo desde cero: C ++.

Jacques de Hooge

Transcrypt – Python en el navegador – ¡Lean, rápido, abierto!