Machine Learning en Go: revisión de bibliotecas para Golang

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Machine Learning en Go (Golang): bibliotecas y herramientas para desarrollo



Aunque Python sigue siendo el lenguaje dominante en el mundo del machine learning (ML), Go (Golang) está ganando popularidad gracias a su rendimiento, facilidad de despliegue y excelente soporte para concurrencia. Go es ideal para crear servicios ML de alta carga, procesamiento por lotes de datos e integración de modelos en entornos de producción. En este artículo, exploraremos las bibliotecas clave para machine learning en Go, sus capacidades y ejemplos de uso.



¿Por qué Go para machine learning?

Go no pretende reemplazar a Python en la fase de investigación, pero ofrece ventajas únicas en la etapa de explotación de modelos:

  • Rendimiento: Lenguaje compilado, cercano en velocidad a C/C++, sin sobrecarga de intérprete.
  • Facilidad de despliegue: Un solo binario sin dependencias, ideal para microservicios y contenedores.
  • Concurrencia integrada: Gorutinas y canales permiten procesar flujos de datos y entrenar modelos en paralelo de manera eficiente.
  • Tipado estático: Menos errores en tiempo de ejecución, algo crítico para sistemas en producción.


1. Gorgonia — framework para deep learning

Gorgonia es el equivalente de TensorFlow y PyTorch en Go. Proporciona herramientas para construir y entrenar redes neuronales, incluyendo diferenciación automática, soporte para GPU (a través de CUDA) y optimización de grafos de computación.



package main

import ( "fmt" "gorgonia.org/gorgonia" "gorgonia.org/tensor")

func main() { g := gorgonia.NewGraph()

// Definimos los datos de entrada (matriz 2x3) x := gorgonia.NewMatrix(g, tensor.Float64, gorgonia.WithName("x"), gorgonia.WithShape(2, 3))

// Definimos los pesos (matriz 3x2) w := gorgonia.NewMatrix(g, tensor.Float64, gorgonia.WithName("w"), gorgonia.WithShape(3, 2))

// Operación de multiplicación de matrices a, _ := gorgonia.Mul(x, w)

// Aplicamos la sigmoide sigmoid := gorgonia.Must(gorgonia.Sigmoid(a))

// Creamos una VM para ejecutar el grafo machine := gorgonia.NewTapeMachine(g) defer machine.Close()

// Rellenamos con datos gorgonia.Let(x, tensor.New(tensor.WithBacking([]float64{1, 2, 3, 4, 5, 6}), tensor.WithShape(2, 3))) gorgonia.Let(w, tensor.New(tensor.WithBacking([]float64{0.1, 0.2, 0.3, 0.4, 0.5, 0.6}), tensor.WithShape(3, 2)))

// Ejecutamos el grafo if err := machine.RunAll(); err != nil { fmt.Println(err) return }

fmt.Println("Resultado de la sigmoide:", sigmoid.Value())}

Cuándo usarlo: Para crear redes neuronales personalizadas, investigación y experimentos, cuando se necesita control total sobre el grafo de computación.



2. GoLearn — biblioteca de propósito general

GoLearn ofrece un amplio conjunto de algoritmos de machine learning: clasificación (kNN, Random Forest), regresión, clustering (k-means) y preprocesamiento de datos. Sigue los principios de scikit-learn, lo que la hace intuitiva para desarrolladores familiarizados con Python.



package main

import ( "fmt" "github.com/sjwhitworth/golearn/base" "github.com/sjwhitworth/golearn/knn" "github.com/sjwhitworth/golearn/evaluation")

func main() { // Cargamos los datos (CSV) rawData, err := base.ParseCSVToInstances("iris.csv", true) if err != nil { fmt.Println(err) return }

// Creamos un clasificador k-NN (k=3, distancia euclidiana) cls := knn.NewKnnClassifier("euclidean", 3)

// Dividimos en train/test (80/20) trainData, testData := base.InstancesTrainTestSplit(rawData, 0.20)

// Entrenamos el modelo cls.Fit(trainData)

// Predecimos predictions, err := cls.Predict(testData) if err != nil { fmt.Println(err)

Recommendations