Apprentissage automatique en Go : revue des bibliothèques pour Golang
Bien que Python reste le roi de l'apprentissage automatique, Go (Golang) est de plus en plus utilisé pour les systèmes de production, les microservices et les applications à forte charge où la vitesse, le parallélisme et la simplicité de déploiement sont importants. Dans cet article, nous passerons en revue les bibliothèques clés pour l'apprentissage automatique en Go, leurs fonctionnalités, des exemples de code et des scénarios d'utilisation.
Pourquoi Go pour le ML ?
Go ne cherche pas à remplacer Python dans le travail de recherche. Ses points forts sont l'intégration avec l'infrastructure, une faible consommation de mémoire, la prise en charge intégrée de la concurrence (goroutines) et la compilation en un seul binaire. C'est un choix idéal pour :
- Les services de prédiction (inférence) basés sur des modèles entraînés
- Le traitement de données en flux en temps réel
- La construction de pipelines de données à haut débit
1. Gorgonia — framework pour réseaux de neurones
Gorgonia est l'équivalent de TensorFlow et PyTorch en Go. Il permet de créer et d'entraîner des réseaux de neurones avec différenciation automatique.
Installation :
go get gorgonia.org/gorgoniaExemple : régression logistique simple
package main
import ( "fmt" "gorgonia.org/gorgonia" "gorgonia.org/tensor")
func main() { g := gorgonia.NewGraph()
// Données d'entrée (matrice 4x2) x := gorgonia.NewMatrix(g, tensor.Float64, gorgonia.WithShape(4, 2), gorgonia.WithName("x")) // Poids w := gorgonia.NewMatrix(g, tensor.Float64, gorgonia.WithShape(2, 1), gorgonia.WithName("w")) // Biais b := gorgonia.NewScalar(g, tensor.Float64, gorgonia.WithName("b"))
// Couche linéaire : y = x*w + b xw, _ := gorgonia.Mul(x, w) y, _ := gorgonia.Add(xw, b)
// Fonction d'activation (sigmoïde) activated, _ := gorgonia.Sigmoid(y)
machine := gorgonia.NewTapeMachine(g) // Remplissage des données 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("Résultat : %v", activated.Value())}2. GoLearn — algorithmes ML classiques
GoLearn (golearn) est une bibliothèque implémentant KNN, les arbres de décision, la forêt aléatoire, la régression linéaire et le clustering. L'API rappelle sklearn.
Installation :
go get -u github.com/sjwhitworth/golearnExemple : K-plus proches voisins (KNN)
package main
import ( "fmt" "github.com/sjwhitworth/golearn/base" "github.com/sjwhitworth/golearn/evaluation" "github.com/sjwhitworth/golearn/knn")
func main() { // Chargement des données (CSV) rawData, err := base.ParseCSVToInstances("iris.csv", true) if err != nil { panic(err) }
// Création du KNN avec k=3 et métrique euclidienne cls := knn.NewKnnClassifier("euclidean", 3)
// Division en train/test trainData, testData := base.InstancesTrainTestSplit(rawData, 0.67)
// Entraînement cls.Fit(trainData)
// Prédiction predictions, err := cls.Predict(testData) if err != nil { panic(err) }
// Évaluation de la précision accuracy, err := evaluation.GetAccuracy(testData, predictions) fmt.Printf("Précision : %.2f%%", accuracy*100)}3. Goml — modèles légers pour une intégration rapide
Goml fournit des implémentations simples de régression linéaire et logistique, de Naive Bayes et de réseaux de neurones avec un minimum de code.
package main
import ( "fmt" "github.com/cdipaolo/goml/base" "github.com/cdipaolo/goml/text")
func main() { // Données pour la classification de texte Aussi dans la bibliothèque
node-cron — Planificateur de tâches pour Node.js
Mise en cache en Go (Golang) : Redis et outils alternatifs
Media3 / ExoPlayer pour Kotlin : guide complet avec exemples
Génération Swagger/OpenAPI pour Swift : outils et bibliothèques
Traitement JSON en C++ : bibliothèques, analyse et sérialisation de données