Машинное обучение на 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 отлично подходит для задач, где требуется тонкая настройка гиперпараметров и работа с классическими алгоритмами. Библи