¿Puedo hacer machine learning con Go?

Hay una infraestructura de ML mucho más pequeña disponible en Go. El más grande y mejor de ellos es, por supuesto, TensorFlow. Google los hace a ambos, pero Go es claramente un idioma secundario para TensorFlow. Hacen muchas advertencias sobre la estabilidad de la API y menos del 100% de cobertura de las funciones que están disponibles en Python. El entorno general de programación numérica y científica es más rico en Python, sin duda. Go tiene muchas tuberías agradables para hacer este tipo de programación, pero no hay un impulso real para construirlo.

Ahora a por qué. Si está haciendo ML exploratorio, es probable que su tiempo sea más valioso que el de la computadora. Estas personas necesitan minimizar el tiempo que invierten con código y maximizar el trabajo con los datos y resultados. Python es un gran lenguaje para eso. Ir es mejor que la mayoría, pero tiene algunos obstáculos. Un REPL hace una buena diferencia. Todo el concepto de cuaderno es otro. La escritura dinámica también es más fácil de usar para abordar muchos problemas. Si no eres un experto en informática, estas cosas son mucho más importantes que la velocidad de la carrera.

En cuanto a la velocidad, aquí no hay tanta diferencia como puedas pensar. Los cálculos subyacentes a menudo ocurren en bibliotecas altamente optimizadas que usan ambos idiomas. La diferencia en la velocidad es la preparación y el análisis de las llamadas ML. Esos son a menudo relativamente pequeños en comparación. Donde hay una necesidad de velocidad, el implementador puede usar herramientas como Cython o Numba, o contratar un programador para convertir el código a C / C ++.

tl; dr: No deberías a menos que tengas que hacerlo.

Si debe usar Go para construir modelos de aprendizaje automático, como otros han mencionado, GoLearn parece una opción bastante decente para métodos de aprendizaje automático más tradicionales (por ejemplo, modelos lineales, agrupación, kNN, etc.). Hay un esfuerzo en curso a través de gonum para proporcionar enlaces para LAPACK y BLAS for Go para permitir cálculos de matriz rápidos.

Pero, probablemente no deberías usar Go. Simplemente no es la herramienta adecuada para el trabajo. Go brilla en problemas que involucran concurrencia y sistemas distribuidos. Las operaciones numéricas no son el fuerte de Go. La mayoría de los algoritmos de aprendizaje automático se implementan esencialmente como operaciones matriciales, que no son particularmente fáciles o eficaces en Go. Dado que estos algoritmos matriciales generalmente están escritos en un código nativo muy optimizado con una capa delgada específica del idioma en la parte superior, ya sea que elija Ir o algo interpretado (por ejemplo, Python, Julia) realmente no importará.

En lugar de ir, si construye su modelo en un lenguaje como Python, se beneficiará de la gran variedad de bibliotecas (por ejemplo, scikit-learn, statsmodels, TensorFlow, etc.) y la gran comunidad de computación científica en torno a Python. Dedique su tiempo a su modelo real, no a tratar de luchar contra el lenguaje y las bibliotecas.

Echa un vistazo a GoLearn [1].

En términos de por qué Go no es más popular para ML:

  1. Python, Scikit y TensorFlow tienen mucho impulso.
  2. Cuando es posible, Python Scikit y TensorFlow usan C ++ debajo del capó, por lo que Go puede no ser mucho más rápido.

Notas al pie

[1] sjwhitworth / golearn

Puede usar Ir, pero muchas bibliotecas están escritas para Python y son mucho más fáciles de usar con lenguajes más populares como Python. Creo que a medida que pasa el tiempo más bibliotecas, especialmente el propio Tensorflow de Google puede obtener soporte para Go, pero por el momento no tiene soporte disponible.