Обнаружение аномалий с помощью ML.NET
Почему бы и нет?
Мы узнали, как использовать ML.NET в предыдущей истории. Итак, теперь мы можем создать API.
Теперь с помощью AutoML API мы создадим простой API обнаружения аномалий.
На самом деле будет два API; один для поезда и один для прогнозируемых значений. Мы пытаемся выяснить, сломано ли производственное устройство по данным датчиков.
В этом проекте используется набор данных AI4I 2020 Predictive Maintenance Dataset. Этот набор данных является синтетическим и отражает реальные данные о профилактическом обслуживании, встречающиеся в отрасли. Он состоит из 10 000 точек данных и 14 столбцов. Это из:
Объяснимый искусственный интеллект для приложений профилактического обслуживания, Стефан Мацка, Третья международная конференция по искусственному интеллекту для промышленности (AI4I 2020), 2020 г. (в печати), размещение в репозитории машинного обучения UCI — Дуа, Д. и Графф, К. (2019). Репозиторий машинного обучения UCI http://archive.ics.uci.edu/ml. Ирвин, Калифорния: Калифорнийский университет, Школа информационных и компьютерных наук.
Давайте посмотрим на данные;
Мы будем иметь дело только со следующими конкретными столбцами:
- ID продукта: идентификатор продукта. Нам нужно это, чтобы определить категорию типа продукта
- Тип: «состоящий из букв L, M или H для низкого (50% всех продуктов), среднего (30%) и высокого (20%) вариантов качества продукта».
- Температура воздуха, температура процесса, скорость вращения, крутящий момент, износ инструмента: значения датчиков
- Сбой машины: указывает на сбой машины как двоичную метку (0,1)
Это будут входные параметры нашей модели и выходные данные; мы пытаемся предсказать метку отказа машины.
Я помещу два API в одно решение с именем AnomalyDetection. Давайте начнем.
Библиотека классов ввода и вывода
Откройте Visual Studio и добавьте библиотеку классов с именем «AnomalyDetection.Common», если установлен флажок в том же каталоге, снимите этот флажок и дайте вашему решению имя «AnomalyDetection», как показано ниже.
Выберите предпочитаемый фреймворк и нажмите «Создать».
Мы создадим два класса, как показано ниже, это будут наши входные и выходные классы.
Когда вы их создаете, ваше решение должно выглядеть так:
Вам необходимо установить пакет nuget «Microsoft.ML» для атрибутов.
API тренажера моделей
Теперь мы можем создать наш API-интерфейс тренера, создать веб-API с именем «AnomalyDetectionTrainerAPI». Вам необходимо установить пакеты nuget ниже:
Добавьте ссылку на проект AnomalyDetection.Common в новый API. Теперь мы можем создать наш класс службы, как показано ниже.
В этой службе; с каждым запросом мы обучаем и сохраняем нашу модель. Он использует AutoML для поиска лучшей модели.
Если мы увеличим время эксперимента, automl пробует гораздо больше алгоритмов и гиперпараметров. Но эффективность нелинейна, она останавливается или замедляется в какой-то момент, поэтому на этот раз подумайте о своем объеме данных и времени. Например, вы не можете экспериментировать каждую минуту для 1 ТБ данных.
После этого мы собираемся создать контроллер и вызывать этот метод обучения, когда нам нужно обучить нашу модель (у вас есть новые данные, или вам могут понадобиться еженедельные оценки).
и не забудьте "ди", добавьте это в Program.cs
builder.Services.AddSingleton<IModelTrainerService, ModelTrainerService>();
Ваш проект должен быть таким:
Теперь с помощью этого API мы можем обучать нашу модель, используя вызовы swagger или http.
API прогнозирования
Время предсказать некоторые значения. Снова добавьте WebApi в решение и дайте ему имя «AnomalyDetectionPredictionAPI». Это проще, чем Trainer API. нам нужен механизм прогнозирования и конечная точка http.
Сначала нам нужно установить несколько пакетов nuget:
Создайте класс, как показано ниже;
Это на самом деле загружает нашу модель только один раз, вы можете создать наблюдатель за файлами или прослушиватель событий, механизм pub/sub и т. д. Но здесь я использовал общие папки.
Этот сервис просто создает механизм прогнозирования и предлагает метод Predict, использующий static PredictEngine.
Мы приближаемся к цели. Измените Program.cs, как показано ниже:
Ваше решение должно выглядеть следующим образом:
Когда придет HTTP-запрос, он предскажет статус ошибки и оценку.
Я выбрал несколько случайных строк и протестировал их. На самом деле он правильно предсказывает, как и ожидалось.
Если вы хотите скачать этот образец и простой проект, вы можете скачать его с github.
Использованная литература: