Обнаружение аномалий с помощью 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.



Использованная литература: