Машинное обучение на 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. Также в библиотеке
Обработка изображений на Java: изменение размера и обрезка (resize, crop)
Планировщик задач на Node.js: node-schedule и node-cron
mikro-orm для TypeScript: полное руководство с примерами
Swagger/OpenAPI генерация для JavaScript (Node.js) — инструменты и библиотеки
Криптография в Swift (iOS/macOS): шифрование и хеширование