Что такое ML.NET?
ML.NET — это бесплатная кроссплатформенная платформа машинного обучения с открытым исходным кодом, созданная корпорацией Майкрософт для платформы разработчиков .NET.
ML.NET
ML.NET — это бесплатная кроссплатформенная платформа машинного обучения с открытым кодом для платформы разработчиков .NET.
ML.NET позволяет обучать, создавать и поставлять пользовательские модели машинного обучения с использованием C# или F# для различных сценариев машинного обучения. ML.NET включает в себя такие функции, как автоматическое машинное обучение (AutoML), и такие инструменты, как ML.NET CLI и Построитель моделей ML.NET, который еще больше упрощает интеграцию машинного обучения в ваши приложения.
ML.NET шаг за шагом
ML.NET выполняет одни и те же основные шаги почти для каждого сценария; он сочетает в себе загрузку данных, преобразования и обучение модели, чтобы упростить создание моделей машинного обучения.
Создать контекст ML.NET
MLContext — это отправная точка для всех операций ML.NET. MLContext
используется для всех аспектов создания и использования модели ML.NET. Концептуально он похож на DbContext
в Entity Framework.
var mlContext = new MLContext();
После создания экземпляра MLContext
можно загрузить и преобразовать данные, выбрать оптимальный алгоритм для задачи машинного обучения, обучить модель. После обучения можно проверить точность модели, сохранить ее на диск и использовать для прогнозирования. Идентификатор MLContext
можно инициализировать из модели, которая ранее была сохранена на диске.
Загрузить данные
Машинное обучение использует известные данные (например, обучающие данные) для поиска закономерностей и прогнозирования новых неизвестных данных.
Входные данные для машинного обучения называются "Функции". Это атрибуты, используемые для прогнозирования. Результат машинного обучения называется "Метка", которая является фактическим прогнозом.
Данные в ML.NET представлены в виде IDataView, что является гибким и эффективным способом описания табличных данных (например, строк и столбцов). Объекты IDataView могут содержать числа, текст, логические значения, векторы и многое другое. Вы можете загружать данные из файлов или из источников потоковой передачи в реальном времени в IDataView.
LoadFromTextFile
позволяет загружать данные из файлов TXT, CSV, TSV и других форматов.
IDataView trainingData = mlContext.Data
.LoadFromTextFile<SentimentInput>(dataPath, separatorChar: ',', hasHeader: true);
LoadFromEnumerable
обеспечивает загрузку из коллекций в памяти, JSON/XML, реляционных и нереляционных баз данных (например, SQL, CosmosDB, MongoDB) и многих других источников данных.
IDataView trainingData = mlContext.Data
.LoadFromEnumerable<SentimentInput>(inMemoryCollection);
Преобразование данных
В большинстве случаев имеющиеся у вас данные не подходят для непосредственного использования для обучения модели машинного обучения. Необработанные данные необходимо предварительно обработать с помощью преобразований данных.
Преобразователи берут данные, выполняют над ними определенную работу и возвращают новые, преобразованные данные.
Имеется встроенный набор преобразований данных для замены отсутствующих значений, преобразования данных, выделения текста и многого другого.
// Convert sentiment text into numeric features
IEstimator<ITransformer> dataTransformPipeline = mlContext.Transforms.Text
.FeaturizeText("Features", "SentimentText");
Выбрать алгоритм
При использовании машинного обучения и ML.NET необходимо выбрать задачу машинного обучения, соответствующую сценарию. ML.NET предлагает более 30 алгоритмов (или тренажеров) для различных задач машинного обучения:
Задача машинного обучения | Алгоритмы |
---|---|
Бинарная классификация (например, анализ настроений) | AveragedPerceptronTrainer, SdcaLogisticRegressionBinaryTrainer |
Мультиклассовая классификация (например, тематическая категоризация) | LightGbmMulticlassTrainer, OneVersusAllTrainer |
Регрессия (например, прогноз цены) | LbfgsPoissonRegressionTrainer, FastTreeRegressionTrainer |
Кластеризация (например, сегментация клиентов) | KMeansTrainer |
Обнаружение аномалий (например, обнаружение всплесков продаж шампуня) | RandomizedPcaTrainer |
Рекомендации (например, кинофильмов) | MatrixFactorizationTrainer |
Ранжирование (например, результатов поиска) | LightGbmRankingTrainer, FastTreeRankingTrainer |
IEstimator<ITransformer> trainer = mlContext.BinaryClassification.Trainers
.AveragedPerceptron(labelColumnName: "Sentiment", featureColumnName: "Features"));
IEstimator<ITransformer> trainingPipeline = dataTransformPipeline.Append(trainer);
Модель обучения
Указанные вами преобразования данных и алгоритмы не выполняются до тех пор, пока вы не вызовете метод Fit()
(из-за подхода ML.NET к отложенной загрузке). Именно в это время происходит обучение модели.
Оценщик принимает данные, обучается на этих данных и создает преобразователь. При обучении на основе моделей данные для обучения поступают на ввод, а обученная модель является выводом. Таким образом, модель — это преобразователь признаков из входных данных в выходные данные прогнозов.
ITransformer model = pipeline.Fit(trainingData);
Оценить модель
ML.NET предлагает оценщиков, которые оценивают производительность вашей модели по различным показателям:
- Точность
- Площадь под кривой (AUC)
- R-Squared
- Среднеквадратичная ошибка (RMSE)
// Make predictions on test data
IDataView predictions = model.Transform(testDataView);
// Evaluate model and return metrics
var metrics = mlContext.BinaryClassification
.Evaluate(predictions, labelColumnName: "Sentiment");
// Print out accuracy metric
Console.WriteLine("Accuracy" + metrics.Accuracy);
Развертывание & использования модели
Вы можете сохранить обученную модель в виде двоичного файла, который затем интегрируется в ваши приложения .NET.
mlContext.Model.Save(model, trainingData, "model.zip");
После сохранения обученной модели ее можно загрузить в другие приложения .NET.
MLContext mlContext = new MLContext();
DataViewSchema predictionPipelineSchema;
ITransformer trainedModel = mlContext.Model.Load("model.zip", out predictionPipelineSchema);
Затем можно воспользоваться загруженной моделью для выполнения прогнозов. Можно использовать Механизм прогнозирования, который представляет собой удобный API, предназначенный для создания одиночных прогнозов, или метод Преобразование, предназначенный для пакетного прогнозирования.
var predEngine = mlContext.Model.CreatePredictionEngine(model);
SentimentInput sampleComment = new SentimentInput{ SentimentText = "This is very rude!" };
SentimentOutput result = predEngine.Predict(sampleComment);
Console.WriteLine(result.Prediction);
Узнайте, как использовать обученную модель машинного обучения
Часто задаваемые вопросы по ML.NET
Для чего используется ML.NET?
ML.NET — это платформа машинного обучения для разработчиков .NET; вы можете использовать ML.NET для интеграции пользовательских моделей машинного обучения в ваши приложения .NET. Вы можете использовать ML.NET для многих сценариев, таких как анализ настроений, прогнозирование цен, рекомендации по продуктам, прогнозирование продаж, классификация изображений, обнаружение объектов и многое другое! Посетите наш репозиторий примеров на GitHub, чтобы узнать больше о том, что можно делать с ML.NET.
В чем разница между ИИ и машинным обучением?
ИИ — это ветвь вычислений, которая включает обучение компьютеров задачам, которые обычно требуют человеческого анализа. Машинное обучение — это подмножество ИИ, в котором компьютеры обучаются и находят закономерности в данных, чтобы затем самостоятельно делать прогнозы на основе новых данных.
Зачем мне ML.NET и чем ML.NET отличается от других предложений Microsoft AI/ML?
Microsoft предлагает множество продуктов и услуг AI и ML, поэтому вот разница между ними:
- ML.NET: Создавайте собственные решения машинного обучения и интегрируйте их в свои приложения .NET.
- Azure Cognitive Services: облачные службы, предоставляющие готовые модели искусственного интеллекта и машинного обучения для добавления в ваши приложения. Включает в себя набор API-интерфейсов для использования различных моделей естественных методов общения с помощью зрения и речи.
- Машинное обучение Azure: комплексная облачная среда для размещения сквозного жизненного цикла модели машинного обучения, включая обучение модели, управление версиями и развертывание, а также управление выпуском в облачном масштабе.
Для каких типов приложений можно развертывать модели ML.NET?
Вы можете использовать ML.NET практически с любым приложением .NET, включая веб-приложения и службы, микросервисы/контейнеры, классические приложения (WPF и WinForms), функции Azure и любые серверные приложения Azure, а также консольные приложения.
Какие фреймворки можно использовать с ML.NET?
ML.NET поддерживается как в .NET, .NET Core (версия 2.0 и выше), так и на .NET Framework (версии 4.6.1 и выше).
Какие архитектуры процессов поддерживает ML.NET?
В настоящее время ML.NET поддерживается в процессах x64 и x86.
Какую ОС можно использовать с ML.NET?
ML.NET совместим со многими платформами, в частности, поддерживается на Windows, Linux и macOS.
Является ли ML.NET бесплатным?
Да! Как и остальная часть платформы .NET, ML.NET на 100 % бесплатна. Дополнительную информацию см. в разделе .NET бесплатен. ML.NET распространяется по лицензии MIT.
Какой лучший язык программирования для ML.NET?
В настоящее время ML.NET поддерживается как для C#, так и для F#.
Как я могу изучить ML.NET?
Вы можете начать работу с ML.NET с помощью этого руководства или ознакомиться с нашим ML.NET docs, чтобы узнать больше.
Как можно установить ML.NET?
Вы можете добавить ML.NET в любой проект .NET, добавив пакет Microsoft.ML NuGet, или начать работу с ML. .NET Model Builder (Windows) или интерфейс командной строки ML.NET (Windows, macOS и Linux).
Готовы приступить?
Наше пошаговое руководство поможет вам запустить ML.NET на вашем компьютере.