教學課程:使用回歸與模型產生器預測價格

了解如何使用 ML.NET 模型產生器建置迴歸模型來預測價格。 在本教學課程中您所開發 .NET 主控台應用程式會根據紐約的歷史計程車費用資料來預測計程車費用。

模型建置器價格預測範例可用於任何需要數字預測值的案例。 範例案例包括:房價預測、需求預測及銷售預測。

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

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

必要條件

如需必要條件和安裝指示清單,請瀏覽模型產生器安裝指南

建立主控台應用程式

  1. 建立名為 「TaxiFarePrediction」 的 C# .NET Core 主控台應用程式 。 請確定在 VS 2019 () 未核取相同目錄中的 [放置方案與專案]。

準備並了解資料

  1. 在您專案中建立名為 Data 的目錄來儲存資料集檔案。

  2. 用來定型和評估機器學習模型的資料集,最初是來自 NYC TLC 計程車旅程資料集。

    1. 若要下載該資料集,請瀏覽至 taxi-fare-train.csv 下載連結

    2. 當頁面載入時,以滑鼠右鍵按一下頁面上的任何位置,然後選取 [另存新檔]

    3. 然後使用 [另存新檔] 對話方塊,將檔案儲存於您在上一步所建立的 [Data] 資料夾中。

  3. 在 [方案總管] 中,以滑鼠右鍵按一下 taxi-fare-train.csv 檔案,然後選取 [屬性]。 在 [進階] 底下,將 [複製到輸出目錄] 的值變更為 [有更新時才複製]。

taxi-fare-train.csv 資料集中的每個資料列都包含計程車車程的詳細資料。

  1. 開啟 taxi-fare-train.csv 資料集

    提供的資料集包含下列資料行:

    • vendor_id:計程車廠商的識別碼是一項特徵。
    • rate_code:計程車行程的費率類型是一項特徵。
    • passenger_count:行程的乘客數目是一項特徵。
    • trip_time_in_secs:行程所花費的時間長度。 您想要在行程結束之前預測行程的車資。 那時,您並不知道行程需要多長的時間。 因此,行程時間不是一項特徵,您將從模型中排除這個資料行。
    • trip_distance:行程的距離是一項特徵。
    • payment_type:付款方式 (現金或信用卡) 是一項特徵。
    • fare_amount:計程車車資總計是標籤。

label 是您希望進行預測的資料行。 執行迴歸工作時,目標是預測數值。 在這個價格預測案例中,會預測計程車車程的成本。 因此,fare_amount 為標籤。 所識別 features 則是您提供模型來預測 label 的輸入。 在此情況下,除了 trip_time_in_secs 的其餘資料行會當做特徵或輸入來預測費用金額。

建立 Model Builder 組態檔

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

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

選取情節

Model Builder 情節畫面

若要定型您的模型,您需要從模型產生器所提供的可用機器學習服務案例清單中選取。 在此案例中,案例為 Value prediction

  1. 在模型產生器工具的案例步驟中,選取 [值預測 案例]。

選取環境

Model Builder 可以根據所選取的案例,在不同的環境上執行定型。

  1. Local (CPU)確認已選取專案,然後按一下 [下一步]按鈕。

載入資料

模型建立器接受來自兩個來源的資料:SQL Server 資料庫或 CSV 或 TSV 格式的本機檔案。

  1. 在模型產生器工具的資料步驟中,從資料來源類型選取範圍中選取 [ 檔案 ]。
  2. 選取文字方塊旁的 [流覽] 按鈕,並使用檔案總管流覽並選取[資料] 目錄中的taxi-fare-test.csv
  3. 在 [資料行] 中選擇 [fare_amount],以預測 (標籤) 下拉式清單。
  4. 按一下 [ 進階資料選項] 連結。
  5. 在 [資料行設定] 索引標籤中,選取[trip_time_in_secs] 資料行的 [用途] 下拉式清單,然後選取 [忽略] 以在定型期間將其排除為功能。 按一下 [ 儲存] 按鈕以關閉對話方塊。
  6. 按一下 [ 下一步] 按鈕。

將模型定型

在本教學課程中用來定型價格預測模型的機器學習服務工作是迴歸。 在模型定型程序的期間,模型產生器會使用不同迴歸演算法及設定來定型不同模型以尋找可最佳執行您資料集的模型。

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

  1. 除非您想要訓練較長的時間,否則請將預設值保留為 [時間 (秒 ) 。
  2. 選取 [開始定型]

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

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

完成定型之後,mbconfig 檔案就會在定型之後產生名為 TaxiFarePrediction.zip 的模型,且其中會包含兩個 C# 檔案:

  • TaxiFare.consumption.cs:此檔案具有公用方法,可載入模型並建立具有模型的預測引擎,並傳回預測。
  • TaxiFare.training.cs:此檔案包含模型產生器隨附的定型管線,以建置最佳模型,包括它所使用的任何超參數。

按一下 [下一步] 按鈕以瀏覽至評估步驟。

評估模型

定型步驟之結果將會是具備最佳效能的單一模型。 在 Model Builder 工具的評估步驟中,將會在 [最佳模型] 區段中包含 [模型] 項目中執行效能最佳模型所使用的演算法,並在 [RSquared] 中包含該模型的計量。

此外,在 Visual Studio 的 [輸出] 視窗中,會有包含熱門模型及其計量的摘要資料表。

本節也可以讓您執行單一預測來測試模型。 本節會提供文字輸入框讓您填入值,您可以按一下 [預測] 按鈕以從最佳模型取得預測。 在預設情況下,您資料集中的一個隨機資料列會填入值。

若您不滿意您的正確性計量,可嘗試及改善模型正確性的一些簡單方法為增加定型模型的時間,或是使用更多資料。 否則,請按一下 [下一步 ] 流覽至取用步驟。

(選擇性) 取用模型

此步驟會有專案範本,可供您用來取用模型。 此步驟是選擇性的,您可以選擇最適合您使用模型需求的方法。

  • 主控台應用程式
  • Web API

主控台應用程式

將主控台應用程式新增至方案時,系統會提示您命名專案。

  1. 將主控台專案 命名TaxiFare_Console

  2. 按一下 [新增至解決方案],將專案新增至您目前的解決方案。

  3. 執行應用程式。

    程式所產生的輸出看起來應該會和以下程式碼片段相似:

    Predicted Fare: 15.020833
    

Web API

將 Web API 新增至解決方案時,系統會提示您命名專案。

  1. 將 Web API 專案命名 TaxiFare_API

  2. 按一下 [新增至解決方案],將專案新增至您目前的解決方案。

  3. 執行應用程式。

  4. 開啟 PowerShell 並輸入下列程式碼,其中 PORT 是應用程式正在接聽的連接埠。

    $body = @{
        Vendor_id="CMT"
        Rate_code=1.0
        Passenger_count=1.0
        Trip_distance=3.8
        Payment_type="CRD"
    }
    
    Invoke-RestMethod "https://localhost:<PORT>/predict" -Method Post -Body ($body | ConvertTo-Json) -ContentType "application/json"
    
  5. 如果成功,輸出看起來應該類似下列文字:

    score
    -----
    15.020833
    

後續步驟

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

  • 準備並了解資料
  • 選取情節
  • 載入資料
  • 將模型定型
  • 評估模型
  • 使用模型來進行預測

其他資源

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