教程:使用Model Builder对餐馆卫生违规的严重性进行分类

了解如何使用模型生成器生成多类分类模型,以对运行状况检查期间发现的餐厅违规风险级别进行分类。

本教程中,您将学习如何:

  • 准备和了解数据
  • 创建模型生成器配置文件
  • 选择方案
  • 从数据库加载数据
  • 训练模型
  • 评估模型
  • 使用模型进行预测

先决条件

有关先决条件和安装说明的列表,请访问 Model Builder 安装指南。

模型生成器多类分类概述

此示例创建一个 C# 控制台应用程序,该应用程序使用 Model Builder 生成的机器学习模型对健康违规的风险进行分类。 可以在 dotnet/machinelearning-samples GitHub 存储库中找到本教程的源代码。

创建控制台应用程序

创建名为“RestaurantViolations”的 C# 控制台应用程序 。

准备和了解数据

用于训练和评估机器学习模型的数据集最初来自旧金山公共卫生餐厅安全分数。 为方便起见,数据集已精简为仅包含与训练模型和进行预测相关的列。 请访问以下网站,了解有关 数据集的详细信息。

下载 Restaurant Safety Scores 数据集 并将其解压缩。

数据集中的每一行都包含有关卫生部门检查期间观察到的违规行为的信息,以及对这些违规行为对公共卫生和安全构成的威胁的风险评估。

检查类型 违规描述 RiskCategory
例程 - 未计划 清洁或消毒不足的食物接触表面 中等风险
新所有权 高风险害虫侵扰 高风险
例程 - 未计划 擦布不清洁或正确存储或消毒剂不足 低风险
  • InspectionType:检查的类型。 这既可以是新机构首次检查、例行检查、投诉检查,也可以是许多其他类型。
  • ViolationDescription:检查期间发现的冲突说明。
  • RiskCategory:违规对公共卫生和安全构成的风险严重性。

要预测的列是 label。 执行分类任务时,目标是分配类别(文本或数字)。 在此分类方案中,为冲突的严重性分配低、中等或高风险的值。 因此, RiskCategory 是标签。 features是您提供给模型以预测label的输入。 在这种情况下,InspectionType 和 ViolationDescription 被用作特征或输入来预测 RiskCategory。

创建模型生成器配置文件

首次将模型生成器添加到解决方案时,系统会提示你创建文件 mbconfig 。 该文件 mbconfig 会跟踪模型生成器中所做的一切,以便重新打开会话。

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

选择方案

模型生成器方案屏幕

若要训练模型,请从模型生成器提供的可用机器学习方案列表中选择。 在这种情况下,方案是 数据分类。

  1. 对于此示例,任务是多类分类。 在模型生成器的 “方案 ”步骤中,选择 数据分类 方案。

加载数据

模型生成器接受来自 SQL Server 数据库的数据或本地文件的数据,并可以采用 csv、tsv 或 txt 格式。

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

训练模型

本教程中用于训练问题分类模型的机器学习任务是多类分类。 在模型训练过程中,模型生成器使用不同的多类分类算法和设置训练单独的模型,以查找数据集的性能最佳的模型。

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

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

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

  • 状态显示训练过程的完成状态。
  • “最高准确性”显示截至目前由模型生成器找到的性能最佳的模型的准确性。 更高的准确度意味着模型在测试数据上预测得更正确。
  • 最佳算法显示模型生成器迄今执行的最佳性能算法的名称。
  • 最后一个算法显示模型生成器最近用于训练模型的算法的名称。

训练完成后,mbconfig 文件将包含训练后生成的模型 RestaurantViolationsPrediction.zip,并附带两个 C# 文件。

  • RestaurantViolationsPrediction.consumption.cs:此文件具有一个公共方法,它将加载模型并使用该模型创建一个预测引擎,然后返回预测结果。
  • RestaurantViolationsPrediction.training.cs:此文件包含模型生成器想出用于生成最佳模型的训练管道,包括它使用的任何超参数。

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

评估模型

训练步骤的结果将是一个具有最佳性能的模型。 在模型生成器工具的评估步骤中,在 “最佳模型 ”部分中,将包含 模型条目中 性能最佳的模型使用的算法,以及该模型的 准确度指标。

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

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

(可选)调用模型

此步骤将包含可用于使用模型的项目模板。 此步骤是可选的,可以选择最适合你如何为模型提供服务的方法。

  • 控制台应用
  • 网络应用程序接口

控制台应用

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

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

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

  3. 运行该应用程序。

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

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

网络应用程序接口

将 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}
    

祝贺! 你已成功构建了一个机器学习模型,使用Model Builder对健康违规的风险进行分类。 可以在 dotnet/machinelearning-samples GitHub 存储库中找到本教程的源代码。

其他资源

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