ML.NET
Тема дорожной карты · .NET / C# Developer
ML.NET — фреймворк машинного обучения от Microsoft, который позволяет .NET-разработчикам строить ML-модели прямо на C# или F#, без перехода на Python. Поддерживает классические задачи (классификация, регрессия, кластеризация, ранжирование, time-series), а также интегрирует ONNX-модели для запуска предобученных моделей из PyTorch/TensorFlow. Главная мотивация — оставить ML-инференс в той же среде, что и основное приложение, без необходимости поддерживать отдельный Python-стек или микросервис.
Как это работает
ML.NET строится вокруг MLContext — точки входа, через которую создаются пайплайны. Пайплайн состоит из двух стадий: трансформации данных (IDataView → нормализация, one-hot, текстовые токенизаторы) и тренер (LightGBM, FastTree, SDCA, LBFGS и др.). Тренировка вызывается Fit(), инференс — Transform() или PredictionEngine<TIn, TOut> для одиночных предсказаний. Готовая модель сериализуется в .zip файл и загружается в продакшене. Под капотом тяжёлые тренеры (LightGBM, ONNX Runtime) вызываются через нативные библиотеки, поэтому скорость близка к Python-аналогам.
Когда применять
ML.NET имеет смысл, когда команда уже работает в .NET-стеке, объёмы данных умеренные (миллионы строк, не миллиарды), и нужен ML-функционал как часть основного приложения — рекомендации в e-commerce, prediction цен, скоринг лидов в CRM, классификация документов. Не подходит для cutting-edge research (Python имеет более широкую экосистему), для глубокого обучения (PyTorch удобнее), для команд без .NET-бекграунда.
Типичные ошибки
Игнорирование Schema приводит к runtime-ошибкам при изменении формата данных, особенно если pipeline хранится сериализованным. Использование PredictionEngine без пула (он не thread-safe) в ASP.NET создаёт race conditions — используйте PredictionEnginePool через DI. Применение Fit() без train/validation split даёт неверные метрики качества и переобучение без диагностики. Сохранение моделей без версионирования делает откат в проде болезненным — храните модели как артефакты с метаданными о версии данных и параметров обучения.