Aprendizaje automático en Go: revisión de bibliotecas para Golang
Aunque Python sigue siendo el rey del aprendizaje automático, Go (Golang) se utiliza cada vez más para sistemas de producción, microservicios y aplicaciones de alta carga, donde la velocidad, el paralelismo y la simplicidad de implementación son importantes. En este artículo, analizaremos las bibliotecas clave para el aprendizaje automático en Go, sus capacidades, ejemplos de código y casos de uso.
¿Por qué Go para ML?
Go no intenta reemplazar a Python en el trabajo de investigación. Sus puntos fuertes son la integración con la infraestructura, el bajo consumo de memoria, el soporte integrado para la concurrencia (goroutines) y la compilación en un solo binario. Es la opción ideal para:
- Servicios de predicción (inferencia) basados en modelos entrenados
- Procesamiento de datos en streaming en tiempo real
- Construcción de pipelines de datos con alto rendimiento
1. Gorgonia — framework para redes neuronales
Gorgonia es el equivalente de TensorFlow y PyTorch en Go. Permite crear y entrenar redes neuronales con diferenciación automática.
Instalación:
go get gorgonia.org/gorgoniaEjemplo: regresión logística simple
package main
import ( "fmt" "gorgonia.org/gorgonia" "gorgonia.org/tensor")
func main() { g := gorgonia.NewGraph()
// Datos de entrada (matriz 4x2) x := gorgonia.NewMatrix(g, tensor.Float64, gorgonia.WithShape(4, 2), gorgonia.WithName("x")) // Pesos w := gorgonia.NewMatrix(g, tensor.Float64, gorgonia.WithShape(2, 1), gorgonia.WithName("w")) // Sesgo b := gorgonia.NewScalar(g, tensor.Float64, gorgonia.WithName("b"))
// Capa lineal: y = x*w + b xw, _ := gorgonia.Mul(x, w) y, _ := gorgonia.Add(xw, b)
// Función de activación (sigmoide) activated, _ := gorgonia.Sigmoid(y)
machine := gorgonia.NewTapeMachine(g) // Relleno de datos gorgonia.Let(x, tensor.New(tensor.WithBacking([]float64{1,2,3,4,5,6,7,8}), tensor.WithShape(4,2))) gorgonia.Let(w, tensor.New(tensor.WithBacking([]float64{0.5, -0.2}), tensor.WithShape(2,1))) gorgonia.Let(b, 0.1)
if err := machine.RunAll(); err != nil { fmt.Println(err) }
fmt.Printf("Resultado: %v", activated.Value())}2. GoLearn — algoritmos clásicos de ML
GoLearn (golearn) es una biblioteca con implementaciones de KNN, árboles de decisión, bosque aleatorio, regresión lineal y clustering. Su API recuerda a sklearn.
Instalación:
go get -u github.com/sjwhitworth/golearnEjemplo: K-vecinos más cercanos (KNN)
package main
import ( "fmt" "github.com/sjwhitworth/golearn/base" "github.com/sjwhitworth/golearn/evaluation" "github.com/sjwhitworth/golearn/knn")
func main() { // Carga de datos (CSV) rawData, err := base.ParseCSVToInstances("iris.csv", true) if err != nil { panic(err) }
// Creación de KNN con k=3 y métrica euclidiana cls := knn.NewKnnClassifier("euclidean", 3)
// División en train/test trainData, testData := base.InstancesTrainTestSplit(rawData, 0.67)
// Entrenamiento cls.Fit(trainData)
// Predicción predictions, err := cls.Predict(testData) if err != nil { panic(err) }
// Evaluación de precisión accuracy, err := evaluation.GetAccuracy(testData, predictions) fmt.Printf("Precisión: %.2f%%", accuracy*100)}3. Goml — modelos ligeros para integración rápida
Goml proporciona implementaciones simples de regresión lineal y logística, Naive Bayes y redes neuronales con un código mínimo.
package main
import ( "fmt" "github.com/cdipaolo/goml/base" "github.com/cdipaolo/goml/text")
func main() { // Datos para clasificación de texto También en la biblioteca
Aprendizaje automático en C#: bibliotecas ML.NET y Accord.NET
Colas de tareas para C++: implementación y uso
Análisis de HTML en Rust: bibliotecas y ejemplos para web scraping