Машинное обучение на C# (.NET): обзор библиотек ML.NET, Accord.NET, TensorFlow.NET

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

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

Начать курс

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

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

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

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

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

  • Встроенные трансформеры для подготовки данных (нормализация, кодирование, конкатенация).
  • Автоматический подбор модели (AutoML) через AutoML.NET.
  • Экспорт модели в формат ONNX для дальнейшего использования на других платформах.
  • Поддержка обучения на больших данных через IDataView.

Пример: бинарная классификация отзывов (тоновый анализ)

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 predictionEngine = context.Model.CreatePredictionEngine<SentimentData, SentimentPrediction>(model);
var prediction = predictionEngine.Predict(new SentimentData { Text = "This product is amazing!" });
Console.WriteLine($"Positive: {prediction.PredictedLabel}, Confidence: {prediction.Probability:P}");

Этот код показывает, как за несколько строк обучить модель на CSV-файле и сделать предсказание. ML.NET автоматически обрабатывает типы данных и создаёт пайплайн.

2. Accord.NET — классический фреймворк для научных вычислений

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

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

  • Широкий выбор классификаторов: KNN, NaiveBayes, RandomForest, SVM.
  • Встроенные методы предобработки: PCA, LDA, нормализация.
  • Поддержка нейронных сетей (Deep Learning Toolkit).
  • Интеграция с Math.NET для сложных математических операций.

Пример: классификация ирисов Фишера с помощью KNN

using Accord.MachineLearning;
using Accord.MachineLearning.VectorMachines;
using Accord.Statistics.Analysis;

// Загрузка данных (классический набор Iris)
double[][] inputs = new double[][]
{
    new double[] { 5.1, 3.5, 1.4, 0.2 },
    new double[] { 4.9, 3.0, 1.4, 0.2 },
    // ... остальные 148 примеров
};
int[] outputs = new int[] { 0, 0, 0, 1, 1, 1, 2, 2, 2 }; // 3 класса

// Создание и обучение KNN (k=3)
var knn = new KNearestNeighbors(k: 3);
knn.Learn(inputs, outputs);

// Предсказание нового образца
double[] newSample = new double[] { 5.0, 3.3, 1.5, 0.3 };
int predictedClass = knn.Decide(newSample);
Console.WriteLine($"Predicted class: {predictedClass}");

Accord.NET отлично подходит для задач, где требуется тонкая настройка гиперпараметров и работа с классическими алгоритмами. Библи

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