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

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

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

Начать курс

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

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

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

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

Основные возможности:

  • Поддержка классических алгоритмов: регрессия, классификация, кластеризация, ранжирование.
  • Глубокое обучение через интеграцию с TensorFlow и ONNX.
  • Автоматическое машинное обучение (AutoML) для подбора оптимальной модели.
  • Встроенные конвейеры обработки данных (трансформации, нормализация).
  • Интеграция с Visual Studio (расширение Model Builder).

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

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

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

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

var context = new MLContext();
// Загрузка данных
IDataView data = context.Data.LoadFromTextFile<SentimentData>("data.tsv", separatorChar: '\t');
// Конвейер: преобразование текста + обучение
var pipeline = context.Transforms.Text.FeaturizeText("Features", nameof(SentimentData.SentimentText))
    .Append(context.BinaryClassification.Trainers.SdcaLogisticRegression());
// Обучение
var model = pipeline.Fit(data);
// Использование
var engine = context.Model.CreatePredictionEngine<SentimentData, SentimentPrediction>(model);
var prediction = engine.Predict(new SentimentData { SentimentText = "This is great!" });
Console.WriteLine($"Predicted: {prediction.PredictedLabel}, Probability: {prediction.Probability}");

2. Accord.NET — набор научных вычислений

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

Основные возможности:

  • Широкий выбор алгоритмов: SVM, Random Forest, K-Means, Naive Bayes.
  • Глубокие нейронные сети (Accord.Neuro).
  • Обработка изображений и видео (Accord.Imaging).
  • Статистические тесты и распределения.

Пример: обучение SVM классификатора

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

// Обучающие данные (признаки: два числа)
double[][] inputs = {
    new double[] { 0, 0 },
    new double[] { 1, 1 },
    new double[] { 1, 0 },
    new double[] { 0, 1 }
};
int[] outputs = { 0, 1, 1, 0 };

// Создание и обучение SVM с ядром Гаусса
var teacher = new SequentialMinimalOptimization<Gaussian>()
{
    Complexity = 100
};
var svm = teacher.Learn(inputs, outputs);

// Предсказание
int prediction = svm.Decide(new double[] { 0.8, 0.2 });
Console.WriteLine($"Predicted class: {prediction}");

3. TensorFlow.NET — .NET-привязки к TensorFlow

TensorFlow.NET (SciSharp) — это официальные низкоуровневые привязки к TensorFlow для .NET. Библиотека позволяет выполнять операции с тензорами, строить и обучать нейронные сети, а также загружать предобученные модели из Python.

Основные возможности:

  • Полный API TensorFlow 2.x на C#.
  • Поддержка GPU-ускорения (CUDA).
  • Keras-подобный высокоуровневый API (SciSharp.Keras).
  • Загрузка и экспорт моделей в формате SavedModel.

Пример: построение простой нейронной сети

using Tensorflow;
using static Tensorflow.Binding;

var x = tf.constant(new float[] { 1, 2, 3, 4 });
var y = tf.constant(new float[] { 2, 4, 6, 8 });

// Простая линейная модель: y = w * x + b
var w = tf.Variable(0.                    

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