Машинное обучение на C#: библиотеки ML.NET и Accord.NET

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

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

Начать курс

Машинное обучение на C# (.NET): обзор библиотек для разработчиков

Хотя Python остаётся королём машинного обучения, экосистема .NET предлагает зрелые и мощные инструменты для интеграции ML-моделей в корпоративные приложения, веб-сервисы и десктопные решения. В этой статье мы разберём три ключевые библиотеки для C#: ML.NET, Accord.NET и TensorFlow.NET. Вы узнаете, какую выбрать под свою задачу, и увидите примеры кода.

1. ML.NET — нативная библиотека от Microsoft

ML.NET — это кроссплатформенная библиотека с открытым исходным кодом, разработанная специально для .NET. Она позволяет создавать, обучать и развёртывать модели машинного обучения без перехода на Python. Поддерживает классификацию, регрессию, кластеризацию, ранжирование, обнаружение аномалий и даже рекомендательные системы.

Ключевые возможности:

  • Встроенные трансформеры данных (нормализация, one-hot кодирование, извлечение признаков из текста и изображений).
  • AutoML — автоматический подбор алгоритма и гиперпараметров.
  • Экспорт моделей в ONNX для кроссплатформенного использования.
  • Поддержка GPU через TensorFlow и ONNX Runtime.

Пример: бинарная классификация тональности текста

using Microsoft.ML;
using Microsoft.ML.Data;

public class SentimentData
{
    public string Text { get; set; }
    public bool Label { get; set; }
}

public class SentimentPrediction
{
    public bool PredictedLabel { get; set; }
    public float Probability { get; set; }
}

var context = new MLContext();
var data = context.Data.LoadFromTextFile<SentimentData>("data.csv", separatorChar: ',');

var pipeline = context.Transforms.Text.FeaturizeText("Features", nameof(SentimentData.Text))
    .Append(context.BinaryClassification.Trainers.SdcaLogisticRegression());

var model = pipeline.Fit(data);
var engine = context.Model.CreatePredictionEngine<SentimentData, SentimentPrediction>(model);

var prediction = engine.Predict(new SentimentData { Text = "This product is amazing!" });
Console.WriteLine($"Prediction: {prediction.PredictedLabel}, Probability: {prediction.Probability}");

Когда использовать: если ваше приложение уже на .NET и вам нужна бесшовная интеграция ML без внешних зависимостей.

2. Accord.NET — классическая библиотека для научных расчётов

Accord.NET — это набор фреймворков для обработки сигналов, статистики и машинного обучения. Он включает более 50 алгоритмов: от линейной регрессии до глубоких нейронных сетей. Библиотека активно использовалась до появления ML.NET и до сих пор востребована для задач, требующих тонкой настройки.

Ключевые возможности:

  • Гибкие модели: SVM, Random Forest, K-Means, Hidden Markov Models.
  • Встроенные методы обработки изображений и аудио (фильтры, детекторы границ, FFT).
  • Поддержка ядерных методов и вероятностных моделей.
  • Интеграция с Math.NET Numerics для продвинутых математических операций.

Пример: обучение SVM для классификации ирисов

using Accord.MachineLearning.VectorMachines;
using Accord.MachineLearning.VectorMachines.Learning;
using Accord.Statistics.Kernels;

// Загрузка данных (классический набор Iris)
double[][] inputs = // ... матрица признаков (4 столбца)
int[] outputs = // ... метки классов (0,1,2)

var teacher = new MulticlassSupportVectorLearning<Gaussian>()
{
    Learner = (param) => new SequentialMinimalOptimization<Gaussian>()
    {
        Complexity = 100,
        Tolerance = 1e-5
    }
};

var machine = teacher.Learn(inputs, outputs);
int[] predicted = machine.Decide(inputs);

double error = new ZeroOneLoss(outputs).Loss(predicted);
Console.WriteLine($"Ошибка: {error:P}");

Когда использовать: для исследовательских задач, обработки изображений/сигналов или когда нужны алгоритмы, отсутствующие в ML.NET (например, HMM или Kernel PCA).

3. TensorFlow.NET — прямой мост к TensorFlow

TensorFlow.NET (TF.NET) предоставляет полный API TensorFlow 2.x для C#. В отличие от ML.NET, который скрывает детали, здесь вы работаете напрямую с графами вычислений, оптимизаторами и слоями нейронных сетей. Это идеальный выбор для глубокого обучения и переноса моделей из Python.

Ключевые возможности:

  • Полная поддержка eager execution и построения графов.
  • Загрузка предобученных моделей из Python (Keras, SavedModel).
  • Обучение на GPU через CUDA.
  • Совместимость с TensorBoard для визуализации.

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