Maschinelles Lernen mit Go: Überblick über Bibliotheken für Golang
Obwohl Python der König des maschinellen Lernens bleibt, wird Go (Golang) zunehmend für Produktionssysteme, Microservices und hochlastige Anwendungen eingesetzt, bei denen Geschwindigkeit, Parallelität und einfache Bereitstellung wichtig sind. In diesem Artikel betrachten wir die wichtigsten Bibliotheken für maschinelles Lernen mit Go, ihre Funktionen, Codebeispiele und Anwendungsszenarien.
Warum Go für ML?
Go versucht nicht, Python in der Forschungsarbeit zu ersetzen. Seine Stärken liegen in der Integration mit der Infrastruktur, dem geringen Speicherverbrauch, der integrierten Unterstützung für Nebenläufigkeit (Goroutinen) und der Kompilierung in eine einzelne Binärdatei. Es ist die ideale Wahl für:
- Vorhersagedienste (Inference) auf Basis trainierter Modelle
- Echtzeitverarbeitung von Streaming-Daten
- Aufbau von Datenpipelines mit hohem Durchsatz
1. Gorgonia — Framework für neuronale Netze
Gorgonia ist das Go-Äquivalent zu TensorFlow und PyTorch. Es ermöglicht die Erstellung und das Training neuronaler Netze mit automatischer Differenzierung.
Installation:
go get gorgonia.org/gorgoniaBeispiel: Einfache logistische Regression
package main
import ( "fmt" "gorgonia.org/gorgonia" "gorgonia.org/tensor")
func main() { g := gorgonia.NewGraph()
// Eingabedaten (Matrix 4x2) x := gorgonia.NewMatrix(g, tensor.Float64, gorgonia.WithShape(4, 2), gorgonia.WithName("x")) // Gewichte w := gorgonia.NewMatrix(g, tensor.Float64, gorgonia.WithShape(2, 1), gorgonia.WithName("w")) // Bias b := gorgonia.NewScalar(g, tensor.Float64, gorgonia.WithName("b"))
// Lineare Schicht: y = x*w + b xw, _ := gorgonia.Mul(x, w) y, _ := gorgonia.Add(xw, b)
// Aktivierungsfunktion (Sigmoid) activated, _ := gorgonia.Sigmoid(y)
machine := gorgonia.NewTapeMachine(g) // Daten füllen 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("Ergebnis: %v", activated.Value())}2. GoLearn — Klassische ML-Algorithmen
GoLearn (golearn) ist eine Bibliothek mit Implementierungen von KNN, Entscheidungsbäumen, Random Forest, linearer Regression und Clustering. Die API erinnert an sklearn.
Installation:
go get -u github.com/sjwhitworth/golearnBeispiel: K-nächste Nachbarn (KNN)
package main
import ( "fmt" "github.com/sjwhitworth/golearn/base" "github.com/sjwhitworth/golearn/evaluation" "github.com/sjwhitworth/golearn/knn")
func main() { // Daten laden (CSV) rawData, err := base.ParseCSVToInstances("iris.csv", true) if err != nil { panic(err) }
// KNN mit k=3 und euklidischer Metrik erstellen cls := knn.NewKnnClassifier("euclidean", 3)
// Aufteilung in Trainings-/Testdaten trainData, testData := base.InstancesTrainTestSplit(rawData, 0.67)
// Training cls.Fit(trainData)
// Vorhersage predictions, err := cls.Predict(testData) if err != nil { panic(err) }
// Genauigkeit bewerten accuracy, err := evaluation.GetAccuracy(testData, predictions) fmt.Printf("Genauigkeit: %.2f%%", accuracy*100)}3. Goml — Leichte Modelle für schnelle Integration
Goml bietet einfache Implementierungen von linearer und logistischer Regression, Naive Bayes und neuronalen Netzen mit minimalem Code.
package main
import ( "fmt" "github.com/cdipaolo/goml/base" "github.com/cdipaolo/goml/text")
func main() { // Daten für Textklassifikation Auch in der Bibliothek
PDF-Generierung in Swift: Dokumentenerstellung für iOS und macOS
Criterion für Rust: Vollständiges Tutorial mit Beispielen
Caching in Java: Redis, Ehcache, Caffeine, Hazelcast – Überblick und Beispiele