{}const=>[]async()letfn</>var
DéveloppementPython

Go + AI : peut-on se passer de Python en apprentissage automatique ?

Vous pensez que Python est le seul moyen d'apprendre l'apprentissage automatique ? Go peut vous surprendre ! Nous analysons comment utiliser Go pour les modèles d'inférence, la création de microservices ML et le traitement des données. Découvrez quand Go fonctionne mieux que Python, quelles bibliothèques utiliser et comment combiner les deux langages pour une efficacité maximale.

К

Kodik

Auteur

6 min de lecture

Pourquoi considérer Go pour le ML ?

Python est un excellent langage pour le prototypage et la recherche, mais il a ses limites :

  • Productivité: Python est lent, surtout sans bibliothèques optimisées

  • Parallélisme: GIL (Global Interpreter Lock) complique le multithreading

  • Déploiement: l'emballage des applications Python avec dépendances est une autre tâche

  • Typification: la saisie dynamique peut entraîner des erreurs de production

Go résout bon nombre de ces problèmes :

  • Langage compilé à haute performance

  • Soutien intégré à la compétitivité par le biais de la goroutine

  • Un fichier binaire sans dépendances

  • Typage statique

🔥 100 000+ étudiants déjà avec nous

Marre de lire la théorie ?
Il est temps de coder !

Kodik — une appli où tu apprends à coder par la pratique. Mentor IA, leçons interactives, projets réels.

🤖 IA 24/7
🎓 Certificats
💰 Gratuit
🚀 Commencer
Ont rejoint aujourd'hui

Que peut-on faire sur Go dans le domaine du ML ?

1. Inférence (application de modèles prêts à l'emploi)

Le scénario le plus populaire est l'utilisation de modèles déjà formés. Vous entraînez le modèle en Python, puis vous l'utilisez en production sur Go.

Exemple avec ONNX Runtime :

package main

import (
    "fmt"
    onnxruntime "github.com/yalue/onnxruntime_go"
)

func main() {
    // Chargement du modèle formé dans PyTorch/TensorFlow
    session, err := onnxruntime.NewSession[float32](
        "model.onnx",
        []string{"input"},
        []string{"output"},
        nil,
    )
    if err != nil {
        panic(err)
    }
    defer session.Destroy()

    // Nous préparons les données d'entrée
    input := []float32{1.0, 2.0, 3.0, 4.0}
    
    // Nous faisons une prédiction
    output, err := session.Run([][]float32{input})
    if err != nil {
        panic(err)
    }
    
    fmt.Println("Prediction:", output[0])
}

2. Algorithmes ML classiques

De nombreuses tâches ne nécessitent pas de réseaux de neurones. La régression linéaire, les arbres de décision, les k-means, tout cela peut être implémenté en Go.

Bibliothèque GoLearn :

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
    rawData, err := base.ParseCSVToInstances("data.csv", true)
    if err != nil {
        panic(err)
    }

    // Créons un classificateur KNN
    cls := knn.NewKnnClassifier("euclidean", "linear", 2)
    
    // Nous divisons en train/test
    trainData, testData := base.InstancesTrainTestSplit(rawData, 0.7)
    
    // Nous enseignons
    cls.Fit(trainData)
    
    // Vérification de la précision
    predictions, err := cls.Predict(testData)
    if err != nil {
        panic(err)
    }
    
    confusionMat, err := evaluation.GetConfusionMatrix(testData, predictions)
    if err != nil {
        panic(err)
    }
    
    fmt.Println(evaluation.GetAccuracy(confusionMat))
}

3. Traitement des données et ingénierie des fonctionnalités

Go est idéal pour les pipelines ETL et le traitement de grandes quantités de données.

package main

import (
    "encoding/csv"
    "os"
    "strconv"
    "sync"
)

type DataPoint struct {
    Feature1 float64
    Feature2 float64
    Label    int
}

func processData(filename string) ([]DataPoint, error) {
    file, err := os.Open(filename)
    if err != nil {
        return nil, err
    }
    defer file.Close()

    reader := csv.NewReader(file)
    records, err := reader.ReadAll()
    if err != nil {
        return nil, err
    }

    // Traitement parallèle via les goroutines
    var wg sync.WaitGroup
    results := make([]DataPoint, len(records)-1)
    
    for i, record := range records[1:] {
        wg.Add(1)
        go func(idx int, rec []string) {
            defer wg.Done()
            
            f1, _ := strconv.ParseFloat(rec[0], 64)
            f2, _ := strconv.ParseFloat(rec[1], 64)
            label, _ := strconv.Atoi(rec[2])
            
            // Normalisation ou autres transformations
            results[idx] = DataPoint{
                Feature1: (f1 - 50) / 10,
                Feature2: (f2 - 100) / 20,
                Label:    label,
            }
        }(i, record)
    }
    
    wg.Wait()
    return results, nil
}

4. Microservices pour ML

Go est idéal pour créer des API qui prennent en charge les modèles ML :

package main

import (
    "encoding/json"
    "net/http"
    "log"
)

type PredictionRequest struct {
    Features []float64 `json:"features"`
}

type PredictionResponse struct {
    Prediction float64 `json:"prediction"`
    Confidence float64 `json:"confidence"`
}

func predictHandler(w http.ResponseWriter, r *http.Request) {
    var req PredictionRequest
    if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
        http.Error(w, err.Error(), http.StatusBadRequest)
        return
    }

    // Ici, nous appelons votre modèle
    prediction := runModel(req.Features)
    
    response := PredictionResponse{
        Prediction: prediction,
        Confidence: 0.95,
    }

    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(response)
}

func runModel(features []float64) float64 {
    // Votre logique d'inférence
    return 42.0
}

func main() {
    http.HandleFunc("/predict", predictHandler)
    log.Println("Server starting on :8080")
    log.Fatal(http.ListenAndServe(":8080", nil))
}

Bibliothèques Go populaires pour ML

  1. Gorgonia — bibliothèque pour la construction de réseaux neuronaux, similaire à PyTorch

  2. GoLearn — algorithmes ML classiques

  3. Gonum — calculs numériques (analogue de NumPy)

  4. ONNX Runtime Go — lancement des modèles ONNX

  5. TensorFlow Go — Go-bindings pour TensorFlow

Quand utiliser Go et quand utiliser Python ?

Utilisez Go lorsque :

  • Besoin de hautes performances en production

  • La facilité de déploiement est importante (un seul binaire)

  • Vous travaillez avec des charges concurrentes

  • Utilisez des modèles prêts à l'emploi (inference)

  • Construire des microservices ML

Restez avec Python quand :

  • Effectuez des recherches et des expériences

  • Vous entraînez des réseaux de neurones complexes

  • Besoin d'un large choix de bibliothèques

  • Vous travaillez avec une équipe de data scientists

L'option la plus pratique :

  1. Python pour la formation de modèles, les expériences, la science des données

  2. Go pour l'environnement de production, l'API, le traitement des données

Cette approche utilise les points forts de chaque langue.

Exemple pratique : système de recommandation.

package main

import (
    "math"
    "sort"
)

type Item struct {
    ID       int
    Features []float64
}

type Recommendation struct {
    ItemID int
    Score  float64
}

// Similarité cosinusfunc cosineSimilarity(a, b []float64) float64 {
    var dotProduct, normA, normB float64
    
    for i := range a {
        dotProduct += a[i] * b[i]
        normA += a[i] * a[i]
        normB += b[i] * b[i]
    }
    
    return dotProduct / (math.Sqrt(normA) * math.Sqrt(normB))
}

// Obtenir des recommandationsfunc getRecommendations(userPrefs []float64, items []Item, topN int) []Recommendation {
    recommendations := make([]Recommendation, len(items))
    
    for i, item := range items {
        recommendations[i] = Recommendation{
            ItemID: item.ID,
            Score:  cosineSimilarity(userPrefs, item.Features),
        }
    }
    
    // Trier par score
    sort.Slice(recommendations, func(i, j int) bool {
        return recommendations[i].Score > recommendations[j].Score
    })
    
    return recommendations[:topN]
}

func main() {
    userPrefs := []float64{0.8, 0.3, 0.9}
    
    items := []Item{
        {ID: 1, Features: []float64{0.9, 0.2, 0.8}},
        {ID: 2, Features: []float64{0.1, 0.9, 0.2}},
        {ID: 3, Features: []float64{0.7, 0.4, 0.9}},
    }
    
    recs := getRecommendations(userPrefs, items, 2)
    // Affichera les 2 meilleures recommandations
}

Conclusion

Go peut très bien être utilisé pour construire des systèmes ML, en particulier dans un environnement de production. Oui, Python reste la norme pour l'apprentissage de modèles complexes, mais pour l'inférence, le traitement des données et la création de services hautes performances, Go est un excellent choix.

Le choix de l'outil dépend toujours de la tâche. Il n'est pas nécessaire d'abandonner complètement Python, mais il ne faut pas non plus ignorer les capacités de Go dans le domaine du ML.

Ceci et bien d'autres choses peuvent être étudiées dans Codique — tout analyser en détail et consolider par la pratique avec des tâches réelles. Nous proposons des cours structurés en Python, Go, JavaScript et d'autres langages avec un accent sur l'application pratique.

Et si vous avez besoin d'aide et que vous souhaitez discuter du code avec des personnes partageant les mêmes idées, nous avons déjà plus de 2 000 développeurs actifs à Chaîne Telegram, où vous trouverez toujours de l'aide, des conseils et du soutien pour apprendre la programmation !

🚀 Rejoignez la communauté des développeurs dans Codique!

🎯Arrête de reporter

Tu as aimé l'article ?
Place à la pratique !

Avec Kodik, tu ne lis pas seulement — tu codes immédiatement. Théorie + pratique = vraies compétences.

Pratique instantanée
🧠L'IA explique le code
🏆Certificat

Sans inscription • Sans carte