Freigeben über


Bewertung von Machine Learning-Modellen mit PREDICT in Microsoft Fabric

Mit Microsoft Fabric können Sie Machine Learning-Modelle mithilfe der skalierbaren VORHERSAGE-Funktion operationalisieren. Diese Funktion unterstützt die Batchbewertung in jeder Compute-Engine. Sie können Batchvorhersagen direkt aus einem Microsoft Fabric-Notizbuch oder von der Elementseite eines bestimmten ML-Modells generieren.

In diesem Artikel wird erläutert, wie Sie PREDICT anwenden können, indem Sie Code selbst schreiben oder eine Benutzeroberfläche mit Anleitung verwenden, die Batchbewertung für Sie verarbeitet.

Voraussetzungen

Begrenzungen

  • Die VORHERSAGE-Funktion unterstützt derzeit nur die folgenden ML-Modellaromen:
    • CatBoost
    • Keras
    • LightGBM
    • ONNX
    • Prophet
    • PyTorch
    • Sklearn
    • Spark
    • Statsmodels
    • TensorFlow
    • XGBoost
  • PROGNOSE erfordert , dass Sie ML-Modelle im MLflow-Format speichern, wobei ihre Signaturen aufgefüllt sind.
  • PREDICT unterstützt keine ML-Modelle mit Multi-Tensor-Ein- oder Ausgaben.

Aufrufen von PREDICT über ein Notebook

PREDICT unterstützt MLflow-gepackte Modelle in der Microsoft Fabric-Registrierung. Wenn sich in Ihrem Arbeitsbereich bereits ein trainiertes und registriertes ML-Modell befindet, können Sie mit Schritt 2 fortfahren. Andernfalls enthält Schritt 1 Beispielcode, der Sie durch das Trainieren eines logistischen Regressionsmodells führt. Verwenden Sie dieses Modell, um Batchvorhersagen am Ende der Prozedur zu generieren.

  1. Trainieren und Registrieren eines ML-Modells bei MLflow. Im nächsten Codebeispiel wird die MLflow-API verwendet, um ein Machine Learning-Experiment zu erstellen, und startet dann eine MLflow-Ausführung für ein Scikit-learn-Logistik-Regressionsmodell. Die Modellversion wird dann gespeichert und in der Microsoft Fabric-Registrierung registriert. Weitere Informationen zu Trainingsmodellen und zum Nachverfolgen ihrer eigenen Experimente finden Sie in der Schulung von ML-Modellen mit scikit-learn.

    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. Laden von Testdaten als Spark-Dataframe: Um Batchvorhersagen mit dem im vorherigen Schritt trainierten ML-Modell zu generieren, benötigen Sie Testdaten in Form eines Spark-Dataframe. Ersetzen Sie im folgenden Code den Wert für die test-Variable durch Ihre eigenen Daten.

    # You can substitute "test" below with your own data
    test = spark.createDataFrame(data.frame.drop(['target'], axis=1))
    
  3. Erstellen eines MLFlowTransformer-Objekts zum Laden des ML-Modells für Rückschlüsse. Führen Sie die folgenden Aktionen aus, um ein Objekt zum Generieren von MLFlowTransformer Batchvorhersagen zu erstellen:

    • Geben Sie die Spalten des test DataFrames an, die Sie als Eingaben für das Modell benötigen (in diesem Fall alle).
    • Wählen Sie einen Namen für die neue Ausgabespalte aus (in diesem Fall predictions).
    • Geben Sie den richtigen Modellnamen und die Modellversion für die Generierung dieser Vorhersagen an.

    Wenn Sie Ihr eigenes ML-Modell verwenden, ersetzen Sie die Werte für die Eingabespalten, den Namen der Ausgabespalte, den Modellnamen und die Modellversion.

    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. Generieren von Vorhersagen mithilfe der PREDICT-Funktion: Zum Aufrufen der PREDICT-Funktion können Sie die Transformer-API, die Spark SQL-API oder eine benutzerdefinierte PySpark-Funktion (User-defined Function, UDF) verwenden. In den folgenden Abschnitten wird gezeigt, wie mithilfe der verschiedenen Methoden zum Aufrufen der PREDICT-Funktion Batchvorhersagen mit den in den vorherigen Schritten definierten Testdaten und dem ML-Modell generiert werden.

PREDICT mit der Transformer-API

Dieser Code ruft die PREDICT-Funktion mit der Transformer-API auf. Wenn Sie Ihr eigenes ML-Modell verwenden, ersetzen Sie die Werte für das Modell und die Testdaten.

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

PREDICT mit der Spark-SQL-API

Dieser Code ruft die VORHERSAGE-Funktion mithilfe der Spark SQL-API auf. Wenn Sie Ihr eigenes ML-Modell verwenden, ersetzen Sie die Werte für model_name, model_version und features durch den Modellnamen, die Modellversion und die Merkmalspalten.

Hinweis

Wenn Sie die Spark SQL-API zum Generieren von Vorhersagen verwenden, müssen Sie dennoch ein MLFlowTransformer Objekt erstellen, wie in Schritt 3 gezeigt.

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 mit einer benutzerdefinierten Funktion

Dieser Code ruft die PREDICT-Funktion mithilfe eines PySpark UDF auf. Wenn Sie Ihr eigenes ML-Modell verwenden, ersetzen Sie die Werte für das Modell und die Features.

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()

Generieren von PREDICT-Code über die Elementseite eines ML-Modells

Auf der Elementseite eines beliebigen ML-Modells können Sie eine der folgenden Optionen auswählen, um die Generierung von Batchvorhersagen für eine bestimmte Modellversion mithilfe der FUNKTION PROGNOSE zu starten:

  • Kopieren Sie eine Codevorlage in ein Notizbuch, und passen Sie die Parameter selbst an.
  • Verwenden Sie eine geführte Benutzeroberfläche, um VORHERSAG-Code zu generieren.

Eine geführte Benutzeroberfläche verwenden

Die geführte Benutzeroberfläche führt Sie durch diese Schritte:

  1. Wählen Sie die Quelldaten für die Bewertung aus.
  2. Ordnen Sie die Daten korrekt ihren ML-Modelleingaben zu.
  3. Geben Sie das Ziel für die Modellausgaben an.
  4. Erstellen Sie ein Notizbuch, das PREDICT zum Generieren und Speichern von Vorhersageergebnissen verwendet.

Gehen Sie wie folgt vor, um die geführte Anleitung zu nutzen:

  1. Navigieren Sie zur Elementseite für eine bestimmte ML-Modellversion.

  2. Wählen Sie in der Dropdownliste Diese Version anwenden die Option Dieses Modell im Assistenten anwenden aus.

    Screenshot der Eingabeaufforderung, die ein ML-Modell von der Elementseite aus anwendet.

    Im Schritt „Eingabetabelle auswählen” wird das Fenster „ML-Modellvorhersagen anwenden” geöffnet.

  3. Wählen Sie eine Eingabetabelle aus einem Lakehouse in Ihrem aktuellen Arbeitsbereich aus.

    Screenshot, der die Auswahl einer Eingabetabelle für ML-Modellvorhersagen zeigt.

  4. Klicken Sie auf Weiter, um zum Schritt „Eingabespalten zuordnen“ zu wechseln.

  5. Ordnen Sie Spaltennamen aus der Quelltabelle den Eingabefeldern des ML-Modells zu, die aus der Signatur des Modells abgerufen wurden. Sie müssen eine Eingabespalte für alle erforderlichen Felder des Modells bereitstellen. Außerdem hinaus müssen die Datentypen der Quellspalte den erwarteten Datentypen des Modells entsprechen.

    Tipp

    Der Assistent füllt diese Zuordnung vorab auf, wenn die Spaltennamen der Eingabetabelle mit den Spaltennamen übereinstimmen, die in der ML-Modellsignatur protokolliert wurden.

    Screenshot des Schritts, der Eingabespalten für ML-Modellvorhersagen zuordnet.

  6. Klicken Sie auf Weiter, um zum Schritt „Ausgabetabelle erstellen“ zu wechseln.

  7. Geben Sie einen Namen für eine neue Tabelle im ausgewählten Lakehouse Ihres aktuellen Arbeitsbereichs an. Diese Ausgabetabelle speichert die Eingabewerte Ihres ML-Modells und fügt die Vorhersagewerte an diese Tabelle an. Standardmäßig wird die Ausgabetabelle im selben Lakehouse wie die Eingabetabelle erstellt. Sie können das Ziel-Lakehouse ändern.

    Screenshot des Schritts, der eine Ausgabetabelle für ML-Modellvorhersagen erstellt.

  8. Wählen Sie Weiter, um zum Schritt „Zuordnung der Ausgabespalten“ zu wechseln.

  9. Verwenden Sie die bereitgestellten Textfelder, um die Spalten in der Ausgabetabelle zu benennen, in der die Vorhersagen des ML-Modells gespeichert werden.

    Screenshot des Schritts, der die Ausgabespalten für ML-Modellvorhersagen zuordnet.

  10. Klicken Sie auf Weiter, um zum Schritt „Notebook konfigurieren“ zu wechseln.

  11. Geben Sie einen Namen für ein neues Notebook an, in dem der generierte PREDICT-Code ausgeführt wird. Der Assistent zeigt in diesem Schritt eine Vorschau des generierten Codes an. Sie können den Code in Ihre Zwischenablage kopieren und ihn bei Bedarf in ein vorhandenes Notebook einfügen.

    Screenshot des Schritts, der ein Notebook für ML-Modellvorhersagen konfiguriert.

  12. Klicken Sie auf Weiter, um zum Schritt „Überprüfen und abschließen“ zu wechseln.

  13. Überprüfen Sie die Details auf der Zusammenfassungsseite, und wählen Sie Notebook erstellen aus, um Ihrem Arbeitsbereich das neue Notebook mit dem generierten Code hinzuzufügen. Sie werden direkt zu diesem Notebook weitergeleitet, wo Sie den Code ausführen können, um Vorhersagen zu generieren und zu speichern.

    Screenshot des Schritts zur Überprüfung und zum Abschluss der ML-Modellvorhersagen.

Verwenden einer anpassbaren Codevorlage

Gehen Sie wie folgt vor, um eine Codevorlage zum Generieren von Batchvorhersagen zu verwenden:

  1. Navigieren Sie zur Elementseite für eine bestimmte ML-Modellversion.
  2. Wählen Sie in der Dropdownliste Diese Version anwenden die Option Code zum Anwenden kopieren aus. Die Auswahl kopiert eine anpassbare Codevorlage.

Sie können diese Codevorlage in ein Notebook einfügen, um Batchvorhersagen mit Ihrem ML-Modell zu generieren. Um die Codevorlage erfolgreich auszuführen, ersetzen Sie die folgenden Werte manuell:

  • <INPUT_TABLE>: Der Dateipfad für die Tabelle, die Eingaben für das ML-Modell bereitstellt.
  • <INPUT_COLS>: Ein Array von Spaltennamen aus der Eingabetabelle, um sie dem ML-Modell bereitzustellen.
  • <OUTPUT_COLS>: Ein Name für eine neue Spalte in der Ausgabetabelle, in der Vorhersagen gespeichert werden.
  • <MODEL_NAME>: Der Name des ML-Modells, das zum Generieren von Vorhersagen verwendet werden soll.
  • <MODEL_VERSION>: Die Version des ML-Modells, die zum Generieren von Vorhersagen verwendet werden soll.
  • <OUTPUT_TABLE>: Der Dateipfad für die Tabelle, in der die Vorhersagen gespeichert werden.

Screenshot der Vorlage zum Kopieren von Code für ML-Modellvorhersagen.

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
)