教學課程:使用 Model Builder 分類餐廳衛生違規的嚴重程度

了解如何使用 Model Builder 建置多類別分類模型,以針對在衛生檢查期間發現的餐廳違規風險等級進行分類。

在本教學課程中,您會了解如何:

  • 準備並了解資料
  • 建立 Model Builder 組態檔
  • 選取情節
  • 從資料庫載入資料
  • 將模型定型
  • 評估模型
  • 使用模型來進行預測

必要條件

如需必要條件和安裝指示清單,請造訪 Model Builder 安裝指南

Model Builder 多類別分類概觀

此範例會建立 C# .NET Core 主控台應用程式,以使用使用模型產生器建置的機器學習模型來分類健康情況違規的風險。 您可以在 dotnet/machinelearning-samples GitHub 存放庫中找到本教學課程的原始程式碼。

建立主控台應用程式

  1. 建立名為 「RestaurantViolations」 的 C# .NET Core 主控台應用程式

準備並了解資料

用來定型和評估機器學習模型的資料集最初來自舊金山市公共衛生局餐廳安全評分。 為方便行事,資料集已濃縮成僅包含與定型模型和進行預測相關的資料行。 請造訪以下網站以深入瞭解資料集

下載餐廳安全評分資料集,並將其解壓縮。

資料集中的每個資料列都包含了在衛生局檢查期間觀察到的違規資訊,以及這些違規行為對公共衛生和安全造成威脅的風險評估。

InspectionType ViolationDescription RiskCategory
常式:未排程 食品接觸表面未充分清潔或消毒 中等風險
新的擁有者 高風險的蟲害 高風險
常式:未排程 抹布不乾淨、未妥善存放或消毒劑不夠用 低風險
  • InspectionType:檢查型別。 這可以是對新餐廳的首次檢查,也可以是例行檢查或投訴檢查,以及許多其他型別的檢查。
  • ViolationDescription:說明在檢查期間發現的違規。
  • RiskCategory:違規對公共衛生和安全造成風險的嚴重程度。

label 是您希望進行預測的資料行。 在執行分類任務時,目標是指派一個類別 (文字或數值)。 在此分類案例中,違規的嚴重程度會被指派為低、中或高風險值。 因此,RiskCategory 屬於標籤。 features 是您提供模型來預測 label 的輸入。 在此情況下,InspectionTypeViolationDescription 會作為特徵或輸入來預測 RiskCategory

建立 Model Builder 組態檔

當第一次將 Model Builder 新增至解決方案時,系統會提示您建立 mbconfig 檔案。 mbconfig 檔案會追蹤您在 Model Builder 中執行的一切動作,讓您可以重新開啟工作階段。

  1. 在 [方案總管] 中,以滑鼠右鍵按一下 RestaurantViolations 專案,然後選取 [新增機器學習模型...]>。
  2. mbconfig 專案命名為 RestaurantViolationsPrediction,然後按一下 [新增] 按鈕。

選取情節

Model Builder 案例畫面

若您要定型模型,請從 Model Builder.提供的可用機器學習案例清單中進行選取。 在此情況下,這個案例屬於資料分類。

  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 中的定型步驟。

將模型定型

本教學課程中用來定型問題分類模型的機器學習工作屬於多類別分類。 在模型定型流程期間,Model Builder 會使用不同的多類別分類演算法和設定來定型不同的模型,為您的資料集找出效能最佳的模型。

定型模型所需要的時間會與資料量成正比。 Model Builder 會根據資料來源的大小自動選取 [要定型的時間 (秒)] 的預設值。

  1. Model Builder 會將 [要定型的時間 (秒)] 的值設定為 60 秒。 定型較長的時間可讓 Model Builder 探索更大量的演算法和參數組合,以搜尋最佳模型。
  2. 按一下 [開始定型]。

在整個定型程序期間,進度資料會顯示在定型步驟的 Training results 區段中。

  • [狀態] 會顯示定型程序的完成狀態。
  • [最佳正確性] 會顯示 Model Builder 到目前為止所找到執行效能最佳模型的正確性。 正確性越高,表示模型針對測試資料的預測越正確。
  • [最佳演算法] 會顯示 Model Builder 到目前為止所執行演算法中效能最佳的演算法名稱。
  • [上一個演算法] 會顯示模型產生器最近一次用來定型模型的演算法名稱。

完成定型之後,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}
    

恭喜! 您已成功建置機器學習模型,以使用 Model Builder 分類健康情況違規的風險。 您可以在 dotnet/machinelearning-samples GitHub 存放庫中找到本教學課程的原始程式碼。

其他資源

若要深入了解此教學課程中提及的主題,請瀏覽下列資源: