Машинное обучение на 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 для визуализации.