教程:使用模型生成器对餐馆卫生违规行为的严重程度进行分类

了解如何使用模型生成器生成一个多级分类模型,以对在卫生检查期间发现的餐馆违规行为的风险级别进行分类。

在本教程中,你将了解:

  • 准备和了解数据
  • 创建 Model Builder 配置文件
  • 选择方案
  • 从数据库加载数据
  • 定型模型
  • 评估模型
  • 使用预测模型

先决条件

有关先决条件和安装说明列表,请访问模型生成器安装指南

模型生成器多级分类概述

此示例会创建一个 C# .NET Core 控制台应用程序,用于通过模型生成器生成的机器学习模型对卫生违规风险进行分类。 有关本教程中的源代码,可以从 dotnet/machinelearning-samples GitHub 存储库中找到。

创建控制台应用程序

  1. 创建一个名为“RestaurantViolations”的 C# .NET Core 控制台应用程序。

准备和了解数据

培训和评估机器学习模型所用的数据集源自旧金山公共卫生部餐馆安全性评分。 为了便于使用,已将此数据集精简为仅包含与模型培训和进行预测相关的列。 如需详细了解此数据集,请访问以下网站。

下载餐馆安全性评分数据集,并将其解压缩。

此数据集中的各个行包含卫生部进行检查时发现的违规行为的相关信息,以及这些违规行为对公共卫生和安全构成威胁的风险评估。

检查类型 违规行为描述 风险类别
常规 - 不定期 未对食物接触面进行充分清洁或消毒 中等风险
新营业场所 高危害虫成群出现 高风险
常规 - 不定期 擦拭布不干净或存放不当或消毒液不足 低风险
  • 检查类型:检查的类型。 它可以是对新场所的首次检查、常规检查、投诉检查,以及其他各种类型的检查。
  • 违规行为描述:对检查期间发现的违规行为的描述。
  • 风险类别:违规行为对公共健康和安全构成风险的严重性。

label 是要预测的列。 执行分类任务时,目标是分配一个类别(文本或数值)。 在此分类方案中,对违规行为的严重性赋值为:低风险、中等风险或高风险。 因此,“风险类别”是标签。 features 是你为模型提供的用来预测 label 的输入。 在此案例中,“检查类型”和“违规行为描述”用作预测“风险类别”的特性或输入。

创建 Model Builder 配置文件

首次将 Model Builder 添加到解决方案时,它会提示你创建一个 mbconfig 文件。 该 mbconfig 文件跟踪你在 Model Builder 中所执行的所有操作,以允许你重新打开会话。

  1. 在“解决方案资源管理器”中,右键单击“RestaurantViolations”项目,然后选择“添加”>“机器学习模型...” 。
  2. mbconfig 项目命名为 RestaurantViolationsPrediction,然后单击“添加”按钮 。

选择方案

模型生成器方案界面

为了训练模型,请从模型生成器提供的可用机器学习方案列表中进行选择。 在本例中,方案为“数据分类”。

  1. 对于此示例,任务为多类分类。 在 Model Builder 的“方案”步骤中,选择“数据分类”方案。

加载数据

Model Builder 可接受来自 SQL Server 数据库或者 csvtsvtxt 格式的本地文件中的数据。

  1. 在 Model Builder 工具的数据步骤中,从数据源类型选择中选择“SQL Server”。
  2. 选择“选择数据源”按钮。
    1. 在“选择数据源”对话框中,选择“Microsoft SQL Server 数据库文件” 。
    2. 取消选中“始终使用此选择”复选框,然后单击“继续” 。
    3. 在“连接属性”对话框中,选择“浏览”,然后选择已下载的“RestaurantScores.mdf”文件。
    4. 选择“确定”。
  3. 从“表”下拉列表中选择“违规行为” 。
  4. 在“要预测的列(标签)”下拉列表中选择“RiskCategory” 。
  5. 保留“高级数据选项”中的默认选择。
  6. 单击“下一步”按钮以移至 Model Builder 中的训练步骤。

定型模型

在本教程中,用于培训问题分类模型的机器学习任务是多级分类。 在模型培训过程中,模型生成器使用不同的多级分类算法和设置来培训各个模型,以便为数据集找到性能最佳的模型。

模型培训所需的时间与数据量成正比。 模型生成器会根据数据源的大小自动选择“训练时间(秒)”的默认值 。

  1. Model Builder 将“训练时间(秒)”的值设置为 60 秒。 通过较长时间段的训练,模型生成器可以在最佳模型的搜索中浏览更多的算法和参数组合。
  2. 单击“开始训练”。

在训练过程中,进度数据显示在训练步骤中的 Training results 部分。

  • “状态”显示训练进程的完成状态。
  • “最高准确性”显示截至目前由模型生成器找到的性能最佳的模型的准确性。 准确性越高,意味着模型对测试数据的预测越准确。
  • “最佳算法”显示截至目前由模型生成器找到的性能最佳的算法的名称。
  • “最新算法”显示模型生成器为了训练模型采用的最新算法名称。

训练完成后,mbconfig 文件将在训练后生成名为 RestaurantViolationsPrediction.zip 的模型和两个 C# 文件:

  • RestaurantViolationsPrediction.consumption.cs:此文件有一个公共方法,该方法将加载模型并使用它创建一个预测引擎并返回预测。
  • RestaurantViolationsPrediction.training.cs:此文件包含 Model Builder 用于构建最佳模型(包括它使用的任何超参数)的训练管道。

单击“下一步”按钮导航到评估步骤。

评估模型

训练步骤的成果将是一个模型,该模型具备最佳的性能。 在 Model Builder 工具的评估步骤中,“最佳模型”部分将包含“模型”项中性能最佳的模型使用的算法,并包含“准确度”中的指标 。

此外,在 Visual Studio 的“输出”窗口中,会有一个包含顶级模型及其指标的汇总表。

本部分还允许你通过执行单个预测来测试模型。 它将提供用于填充值的文本框,你可以单击“预测”按钮从最佳模型中获取预测。 默认情况下,这将由数据集中的随机行填充。

(可选)使用模型

此步骤将包含可用于使用模型的项目模板。 这是一个可选步骤,你可以选择最适合你对如何处理模型的需求的方法。

  • 控制台应用
  • Web API

控制台应用

将控制台应用添加到解决方案时,系统会提示你为该项目命名。

  1. 将控制台项目命名为 RestaurantViolationsPrediction_Console。

  2. 单击“添加到解决方案”以将项目添加到当前的解决方案中。

  3. 运行应用程序。

    该程序生成的输出应类似于下面的代码段:

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

Web API

将 Web API 添加到解决方案时,系统会提示你为该项目命名。

  1. 将 Web 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 存储库中找到。

其他资源

若要详细了解本教程中所述的主题,请访问以下资源: