Учебник. Классификация серьезности санитарных нарушений в ресторанах с помощью Model Builder

Сведения о том, как с помощью построителя моделей создать модель многоклассовой классификации, чтобы определять категорию уровня риска для нарушений, обнаруженных во время санитарных проверок ресторанов.

В этом руководстве вы узнаете, как:

  • Подготовка и анализ данных
  • Создание файла конфигурации Model Builder
  • Выбор сценария
  • загружать данные из базы данных;
  • Обучение модели
  • Оценка модели
  • Использование модели для прогнозирования

Предварительные требования

Список необходимых компонентов и инструкции по установке см. в руководстве по установке построителя моделей.

Обзор многоклассовой классификации в построителе моделей

В этом примере создается консольное приложение .NET Core на языке C#, которое классифицирует риск санитарных нарушений с помощью модели машинного обучения, созданной в построителе моделей. Исходный код примера из этого руководства можно найти в репозитории dotnet/machinelearning-samples на сайте GitHub.

Создание консольного приложение

  1. Создайте консольное приложение .NET Core на C# с именем RestaurantViolations.

Подготовка и анализ данных

Набор данных для обучения и оценки модели машинного обучения создан на основе данных о санитарной безопасности ресторанов от Департамента здравоохранения Сан-Франциско. Для удобства этот набор данных был уплотнен и теперь включает только столбцы, имеющее прямое отношение к обучению модели и прогнозированию. Чтобы узнать больше об этом наборе данных, посетите следующий веб-сайт.

Скачайте набор данных об оценке безопасности ресторанов и распакуйте его.

Каждая строка в наборе данных содержит сведения о нарушениях, обнаруженных при проверке Департаментом здравоохранения, и оценку рисков для общественного здоровья и безопасности, которые связаны с этими нарушениями.

InspectionType ViolationDescription RiskCategory
Routine (плановые) — Unscheduled (внеплановые) Недостаточно очищены или продезинфицированы поверхности, взаимодействующие с продуктами Средний риск
Новый владелец Высокий риск распространения паразитов Высокий риск
Routine (плановые) — Unscheduled (внеплановые) Тряпки для протирки грязные или неправильно хранятся, или недостаточно чистящего средства Низкий риск
  • InspectionType: обозначает тип проверки. Это может быть первичная проверка для нового заведения, плановая проверка, изучение жалобы и многое другое.
  • ViolationDescription: описание нарушения, обнаруженного во время проверки.
  • RiskCategory: серьезность рисков для общественного здоровья и безопасности, которые влечет за собой это нарушение.

label — это столбец, который необходимо спрогнозировать. При выполнении задачи классификации целью является назначение категории (текстовое или числовое значение). В нашем сценарии классификации серьезность (риск) нарушения может быть низкой, средней или высокой. Для этих целей поле RiskCategory имеет формат метки. Признаки (features) содержат входные данные, которые вы передаете в модель для прогнозирования метки (label). В нашем примере признаками (входными данными) выступают InspectionType и ViolationDescription, на основе которых прогнозируется значение RiskCategory.

Создание файла конфигурации Model Builder

При первом добавлении Model Builder в решение вам будет предложено создать файл mbconfig. В файле mbconfig отслеживается все, что вы делаете в Model Builder, что позволяет вам повторно открыть сеанс.

  1. В Обозревателе решений щелкните правой кнопкой мыши проект RestaurantViolations и выберите Добавить>Модель машинного обучения... .
  2. Назовите проект mbconfigRestaurantViolationsPrediction и нажмите кнопку Добавить.

Выбор сценария

Экран сценария построителя моделей

Чтобы обучить модель, выберите один из доступных сценариев машинного обучения в построителе моделей. В нашем примере используется сценарий Классификация данных.

  1. В нашем задании применяется многоклассовая классификация. На этапе Сценарий в построителе моделей выберите сценарий Классификация данных.

Загрузка данных

Построитель моделей принимает данные из базы данных SQL Server или локального файла в формате csv, tsv или txt.

  1. На этапе добавления данных в средстве построителя моделей выберите в списке типов источников данных пункт SQL Server.
  2. Нажмите кнопку Выбрать источник данных.
    1. В диалоговом окне Выбор источника данных выберите Файл базы данных Microsoft SQL Server.
    2. Снимите флажок Всегда использовать этот вариант и щелкните Продолжить.
    3. В диалоговом окне Свойства подключения щелкните Обзор и выберите скачанный файл RestaurantScores.mdf.
    4. Нажмите кнопку OK.
  3. Выберите Нарушения в раскрывающемся списке Таблица.
  4. Выберите вариант RiskCategory в раскрывающемся списке Прогнозируемые столбцы (метка).
  5. Оставьте значения по умолчанию в дополнительных параметрах данных.
  6. Щелкните Следующий шаг, чтобы перейти к следующему шагу обучения в Model Builder.

Обучение модели

Задачей машинного обучения, используемой в этом руководстве для обучения модели классификации проблем, является многоклассовая классификация. В процессе обучения моделей построитель моделей обучает отдельные модели по разным алгоритмам многоклассовой классификации, используя разные параметры, и выбирает среди них оптимальную модель для предоставленного набора данных.

Время, требуемое для обучения модели, пропорционально объему данных. Построитель моделей автоматически выбирает значение по умолчанию для параметра Time to train (seconds) (Время обучения в секундах) в зависимости от размера источника данных.

  1. Model Builder задает для параметра Время обучения (в секундах) значение 60 секунд. Обучение в течение более длительного периода времени позволяет построителю моделей исследовать большее количество алгоритмов и комбинаций параметров, чтобы определить наилучшую модель.
  2. Выберите Начать обучение.

В процессе обучения сведения о ходе выполнения отображаются в разделе Training results шага обучения.

  • "Состояние" — это состояние завершения процесса обучения.
  • Наилучшая точность отображает точность наиболее производительной модели, найденной Model Builder на данный момент. Точность зависит от того, насколько правильный прогноз был сделан моделью на основе тестовых данных.
  • Лучший алгоритм отображает имя наиболее результативного алгоритма, найденного Model Builder до сих пор.
  • Последний алгоритм отображает имя алгоритма, который последний раз использовался построителем моделей для обучения модели.

После завершения обучения файл mbconfig будет содержать созданную модель RestaurantViolationsPrediction.zip, а также будут добавлены два файла C#:

  • RestaurantViolationsPrediction.consumption.cs — этот файл имеет открытый метод, который загружает модель, создает механизм прогнозирования и возвращает прогноз.
  • RestaurantViolationsPrediction.training.cs — этот файл состоит из обучающего конвейера, с помощью которого Model Builder создает лучшую модель, включая используемые гиперпараметры.

Нажмите кнопку Следующий шаг, чтобы перейти к шагу оценки.

Оценка модели

Результат обучения — одна модель с наивысшей точностью. На шаге оценки Model Builder в разделе Лучшая модель будет указан алгоритм, используемый наилучшей моделью в записи Модель, а также метрики для этой модели в записи Точность.

Кроме того, в окне вывода Visual Studio появится сводная таблица, содержащая лучшие модели и их метрики.

Этот раздел также позволит проверить модель, выполнив один прогноз. В нем будут предложены текстовые поля для заполнения значений. Вы можете нажать кнопку Прогноз, чтобы получить прогноз от лучшей модели. По умолчанию это значение будет заполнено случайной записью из вашего набора данных.

(Необязательно.) Использование модели

На этом шаге будут приведены примеры шаблонов проектов, подходящих для использования модели. Этот шаг является необязательным. Вы можете выбрать метод, который наилучшим образом соответствует вашим потребностям в использовании модели.

  • Консольное приложение
  • Веб-интерфейс API

Консольное приложение

При добавлении консольного приложения в решение вам будет предложено присвоить имя проекту.

  1. Назовите консольный проект RestaurantViolationsPrediction_Console.

  2. Нажмите кнопку Добавить в решение, чтобы добавить проект в текущее решение.

  3. Запустите приложение.

    Выходные данные программы должны выглядеть примерно так:

    InspectionType: Routine - Unscheduled
    ViolationDescription: Moderate risk food holding temperature
    
    Predicted RiskCategory: Moderate Risk
    

Веб-интерфейс API

При добавлении веб-API в решение вам будет предложено присвоить имя проекту.

  1. Назовите проект веб-API RestaurantViolationsPrediction_API.

  2. Нажмите кнопку Добавить в решение*, чтобы добавить проект в текущее решение.

  3. Запустите приложение.

  4. Откройте PowerShell и введите следующий код, где PORT — это порт, который прослушивается приложением.

    $body = @{
        InspectionType="Reinspection/Followup"
        ViolationDescription="Inadequately cleaned or sanitized food contact surfaces"
    }
    
    Invoke-RestMethod "https://localhost:<PORT>/predict" -Method Post -Body ($body | ConvertTo-Json) -ContentType "application/json"
    
  5. В случае успешного выполнения результат должен выглядеть, как показано ниже. Выходные данные имеют прогнозируемое значение RiskCategory (Средний риск) и имеют оценки каждой из входных меток (Низкий риск, Высокий риск и Средний риск).

    prediction    score
    ----------    -----
    Moderate Risk {0.055566575, 0.058012854, 0.88642055}
    

Поздравляем! Вы успешно создали модель машинного обучения для классификации риска санитарных нарушений с помощью построителя моделей. Исходный код примера из этого руководства можно найти в репозитории dotnet/machinelearning-samples на сайте GitHub.

Дополнительные ресурсы

Дополнительные сведения см. в следующих статьях: