共用方式為


使用 Microsoft Fabric 中的 PREDICT 進行機器學習模型評分

Microsoft Fabric 可讓使用者使用可調整的 PREDICT 函式來操作機器學習模型。 此函式支援任何計算引擎中的批次評分。 用戶可以直接從Microsoft網狀架構筆記本或指定 ML 模型的專案頁面產生批次預測。

在本文中,您將瞭解如何自行撰寫程式代碼,或使用可為您處理批次評分的引導式 UI 體驗來套用 PREDICT。

必要條件

限制

  • 目前支援此有限 ML 模型類別集的 PREDICT 函式:
    • CatBoost
    • Keras
    • LightGBM
    • ONNX
    • Prophet
    • PyTorch
    • Sklearn
    • Spark
    • Statsmodels
    • TensorFlow
    • XGBoost
  • PREDICT 會要求您 以 MLflow 格式儲存 ML 模型,並填入其簽章
  • PREDICT 不支援 具有多張量輸入或輸出的 ML 模型

從筆記本呼叫 PREDICT

PREDICT 支援 Microsoft Fabric 登錄中的 MLflow 封裝模型。 如果您的工作區中有已定型且已註冊的 ML 模型,您可以跳至步驟 2。 如果沒有,步驟 1 會提供範例程式碼來引導您定型範例羅吉斯迴歸模型。 您可使用此模型在程序結尾產生批次預測。

  1. 定型 ML 模型,並將其註冊到 MLflow。 下一個程式代碼範例會使用 MLflow API 來建立機器學習實驗,然後針對 scikit-learn 羅吉斯回歸模型啟動 MLflow 執行。 然後,模型版本會在 Microsoft Fabric 登錄中儲存並註冊。 如需定型模型和追蹤您自己的實驗的詳細資訊,請流覽如何使用scikit-learn資源來定型ML模型。

    import mlflow
    import numpy as np 
    from sklearn.linear_model import LogisticRegression 
    from sklearn.datasets import load_diabetes
    from mlflow.models.signature import infer_signature 
    
    mlflow.set_experiment("diabetes-demo")
    with mlflow.start_run() as run:
        lr = LogisticRegression()
        data = load_diabetes(as_frame=True)
        lr.fit(data.data, data.target) 
        signature = infer_signature(data.data, data.target) 
    
        mlflow.sklearn.log_model(
            lr,
            "diabetes-model",
            signature=signature,
            registered_model_name="diabetes-model"
        ) 
    
  2. 將測試資料載入至 Spark DataFrame。 若要使用上一個步驟中定型的 ML 模型產生批次預測,您需要以 Spark DataFrame 的形式測試數據。 在下列程式代碼中,以您自己的數據取代 test 變數值。

    # You can substitute "test" below with your own data
    test = spark.createDataFrame(data.frame.drop(['target'], axis=1))
    
  3. 建立 MLFlowTransformer 物件,載入 ML 模型以進行推斷。 若要建立 MLFlowTransformer 物件來產生批次預測,您必須執行下列動作:

    • test指定您需要作為模型輸入的 DataFrame 資料列(在此案例中,全部都是)
    • 選擇新輸出資料列的名稱(在此案例中為 predictions
    • 提供正確的模型名稱和模型版本來產生這些預測。

    如果您使用自己的 ML 模型,請以輸入資料行、輸出資料行名稱、模型名稱和模型版本取代值。

    from synapse.ml.predict import MLFlowTransformer
    
    # You can substitute values below for your own input columns,
    # output column name, model name, and model version
    model = MLFlowTransformer(
        inputCols=test.columns,
        outputCol='predictions',
        modelName='diabetes-model',
        modelVersion=1
    )
    
  4. 使用 PREDICT 函式產生預測。 若要叫用 PREDICT 函式,請使用轉換器 API、Spark SQL API 或 PySpark 使用者定義函式 (UDF)。 下列各節說明如何使用不同的方法來叫用 PREDICT 函式,利用先前步驟中定義的測試數據和 ML 模型來產生批次預測。

具有轉換器 API 的 PREDICT

此程式代碼會使用轉換器 API 叫用 PREDICT 函式。 如果您使用自己的 ML 模型,請取代模型和測試資料的值。

# You can substitute "model" and "test" below with values  
# for your own model and test data 
model.transform(test).show()

具有 Spark SQL API 的 PREDICT

此程式代碼會使用 Spark SQL API 叫用 PREDICT 函式。 如果您使用自己的 ML 模型,請將、 model_versionfeatures 的值取代為您的model_name模型名稱、模型版本和功能數據行。

注意

使用 Spark SQL API 進行預測產生仍然需要建立 MLFlowTransformer 物件(如步驟 3 所示)。

from pyspark.ml.feature import SQLTransformer 

# You can substitute "model_name," "model_version," and "features" 
# with values for your own model name, model version, and feature columns
model_name = 'diabetes-model'
model_version = 1
features = test.columns

sqlt = SQLTransformer().setStatement( 
    f"SELECT PREDICT('{model_name}/{model_version}', {','.join(features)}) as predictions FROM __THIS__")

# You can substitute "test" below with your own test data
sqlt.transform(test).show()

具有使用者定義函數 的 PREDICT

此程式代碼會使用 PySpark UDF 叫用 PREDICT 函式。 如果您使用自己的 ML 模型,請取代模型和功能的值。

from pyspark.sql.functions import col, pandas_udf, udf, lit

# You can substitute "model" and "features" below with your own values
my_udf = model.to_udf()
features = test.columns

test.withColumn("PREDICT", my_udf(*[col(f) for f in features])).show()

從 ML 模型的項目頁面產生 PREDICT 程式碼

從任何 ML 模型的項目頁面中,您可以使用 PREDICT 函式,選擇下列其中一個選項來啟動特定模型版本的批次預測產生:

  • 將程式代碼範本複製到筆記本,並自行自定義參數
  • 使用引導式 UI 體驗來產生 PREDICT 程式碼

使用引導式 UI 體驗

引導式 UI 體驗會逐步引導您完成下列步驟:

  • 選取源數據以進行評分
  • 將數據正確對應至 ML 模型輸入
  • 指定模型輸出的目的地
  • 建立使用 PREDICT 來產生並儲存預測結果的筆記本

要使用引導式體驗,

  1. 流覽至指定 ML 模型版本的項目頁面。

  2. 從 [ 套用此版本] 下拉式清單中,選取 [ 在精靈中套用此模型]。

    此螢幕快照顯示從其項目頁面套用 ML 模型的提示。

    在 [選取輸入數據表] 步驟中,[套用 ML 模型預測] 視窗隨即開啟。

  3. 從您目前工作區中的 Lakehouse 選取輸入數據表。

    顯示選取 ML 模型預測輸入資料表的螢幕快照。

  4. 選取 [下一步] 以移至 [對應輸入資料行] 步驟。

  5. 將源數據表的數據行名稱對應至 ML 模型的輸入欄位,這些欄位是從模型的簽章提取而來。 您必須為模型的所有必要欄位提供輸入資料列。 此外,源數據行數據類型必須符合模型的預期數據類型。

    提示

    如果輸入數據表數據行的名稱符合 ML 模型簽章中記錄的數據行名稱,精靈會預先填入此對應。

    此螢幕快照顯示對應 ML 模型預測輸入數據行的步驟。

  6. 選取 [下一步] 以移至 [建立輸出資料表] 步驟。

  7. 提供目前工作區所選 Lakehouse 內新資料表的名稱。 此輸出數據表會儲存 ML 模型的輸入值,並將預測值附加至該數據表。 根據預設,輸出數據表會建立在與輸入數據表相同的 Lakehouse 中。 您可以變更目的地湖屋。

    此螢幕快照顯示建立 ML 模型預測輸出資料表的步驟。

  8. 選取 [下一步] 以移至 [對應輸出資料行] 步驟。

  9. 使用提供的文字欄位,為儲存 ML 模型預測的輸出資料表資料行命名。

    此螢幕快照顯示對應 ML 模型預測輸出資料行的步驟。

  10. 選取 [下一步] 以移至 [設定筆記本] 步驟。

  11. 提供執行所產生 PREDICT 程式代碼之新筆記本的名稱。 精靈會在此步驟中顯示所產生的程式碼的預覽。 如有需要,您可以將程式代碼複製到剪貼簿,並將它貼到現有的筆記本中。

    此螢幕快照顯示設定 ML 模型預測筆記本的步驟。

  12. 選取 [下一步] 以移至 [檢閱並完成] 步驟。

  13. 檢閱摘要頁面上的詳細數據,然後選取 [建立筆記本],將新筆記本 及其產生的程式代碼新增至您的工作區。 系統會直接前往該筆記本,您可以在其中執行程式碼來產生和儲存預測。

    顯示 ML 模型預測檢閱和完成步驟的螢幕快照。

使用可自訂的程式碼範本

若要使用程式碼範本來產生批次預測:

  1. 移至指定 ML 模型版本的項目頁面。
  2. 從 [套用此版本] 下拉式清單中選取 [複製要套用的程式碼]。 該選取可讓您複製可自訂的程式碼範本。

您可以將此程式碼範本貼到筆記本中,使用 ML 模型產生批次預測。 若要成功執行程式碼範本,您必須手動取代下列值:

  • <INPUT_TABLE>:提供 ML 模型輸入之資料表的檔案路徑
  • <INPUT_COLS>:輸入資料表中要饋送至 ML 模型的資料行名稱陣列
  • <OUTPUT_COLS>:輸出資料表中儲存預測之新資料行的名稱
  • <MODEL_NAME>:用於產生預測的 ML 模型的名稱
  • <MODEL_VERSION>:用於產生預測的 ML 模型的版本
  • <OUTPUT_TABLE>:儲存預測之資料表的檔案路徑

顯示 ML 模型預測複製程式代碼範本的螢幕快照。

import mlflow 
from synapse.ml.predict import MLFlowTransformer 
 
df = spark.read.format("delta").load( 
    <INPUT_TABLE> # Your input table filepath here
) 
 
model = MLFlowTransformer( 
    inputCols=<INPUT_COLS>, # Your input columns here
    outputCol=<OUTPUT_COLS>, # Your new column name here
    modelName=<MODEL_NAME>, # Your ML model name here
    modelVersion=<MODEL_VERSION> # Your ML model version here
) 
df = model.transform(df) 
 
df.write.format('delta').mode("overwrite").save( 
    <OUTPUT_TABLE> # Your output table filepath here
)