Машинное обучение на Go: библиотеки для Golang (ML, нейросети, NLP)

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Машинное обучение на Go: обзор библиотек для Golang

Хотя Python остаётся королём машинного обучения, Go (Golang) всё чаще используется для production-систем, микросервисов и высоконагруженных приложений, где важны скорость, параллелизм и простота развёртывания. В этой статье мы разберём ключевые библиотеки для машинного обучения на Go, их возможности, примеры кода и сценарии использования.

Почему Go для ML?

Go не пытается заменить Python в исследовательской работе. Его сильные стороны — интеграция с инфраструктурой, низкое потребление памяти, встроенная поддержка конкурентности (goroutines) и компиляция в один бинарник. Это идеальный выбор для:

  • Сервисов предсказаний (inference) на базе обученных моделей
  • Обработки потоковых данных в реальном времени
  • Сборки пайплайнов данных с высокой пропускной способностью

1. Gorgonia — фреймворк для нейронных сетей

Gorgonia — аналог TensorFlow и PyTorch на Go. Позволяет создавать и обучать нейронные сети с автоматическим дифференцированием.

Установка:

go get gorgonia.org/gorgonia

Пример: простая логистическая регрессия

package main

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

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

    // Входные данные (матрица 4x2)
    x := gorgonia.NewMatrix(g, tensor.Float64, gorgonia.WithShape(4, 2), gorgonia.WithName("x"))
    // Веса
    w := gorgonia.NewMatrix(g, tensor.Float64, gorgonia.WithShape(2, 1), gorgonia.WithName("w"))
    // Смещение
    b := gorgonia.NewScalar(g, tensor.Float64, gorgonia.WithName("b"))

    // Линейный слой: y = x*w + b
    xw, _ := gorgonia.Mul(x, w)
    y, _ := gorgonia.Add(xw, b)

    // Функция активации (сигмоида)
    activated, _ := gorgonia.Sigmoid(y)

    machine := gorgonia.NewTapeMachine(g)
    // Заполнение данных
    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("Результат: %v\n", activated.Value())
}

2. GoLearn — классические алгоритмы ML

GoLearn (golearn) — библиотека с реализацией KNN, деревьев решений, случайного леса, линейной регрессии и кластеризации. API напоминает sklearn.

Установка:

go get -u github.com/sjwhitworth/golearn

Пример: K-ближайших соседей (KNN)

package main

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

func main() {
    // Загрузка данных (CSV)
    rawData, err := base.ParseCSVToInstances("iris.csv", true)
    if err != nil {
        panic(err)
    }

    // Создание KNN с k=3 и евклидовой метрикой
    cls := knn.NewKnnClassifier("euclidean", 3)

    // Разделение на train/test
    trainData, testData := base.InstancesTrainTestSplit(rawData, 0.67)

    // Обучение
    cls.Fit(trainData)

    // Предсказание
    predictions, err := cls.Predict(testData)
    if err != nil {
        panic(err)
    }

    // Оценка точности
    accuracy, err := evaluation.GetAccuracy(testData, predictions)
    fmt.Printf("Точность: %.2f%%\n", accuracy*100)
}

3. Goml — лёгкие модели для быстрой интеграции

Goml предоставляет простые реализации линейной и логистической регрессии, наивного Байеса и нейронных сетей с минимальным кодом.

package main

import (
    "fmt"
    "github.com/cdipaolo/goml/base"
    "github.com/cdipaolo/goml/text"
)

func main() {
    // Данные для классификации текста
    X := [][]float64{
        {1, 0, 1, 0},
        {0, 1, 0, 1},
        {1, 1, 0, 0},
    }
    Y := []float64{0,                    

Рекомендаций