Het gedrag van het model aanpassen voor batchgewijs scoren

Voltooid

Wanneer u een model hebt getraind, wilt u het model gebruiken om nieuwe voorspellingen te genereren. Stel dat u een prognosemodel hebt getraind. Elke week past u het model toe op historische verkoopgegevens om de verkoopprognose van de komende week te genereren.

In Microsoft Fabric kunt u een opgeslagen model gebruiken en toepassen op uw gegevens om de nieuwe voorspellingen te genereren en op te slaan. Het model neemt de nieuwe gegevens als invoer, voert de benodigde transformaties uit en voert de voorspellingen uit.

De informatie over de verwachte invoer en uitvoer van het model wordt opgeslagen in de modelartefacten die tijdens de modeltraining worden gemaakt. Tijdens het bijhouden van uw model met MLflow kunt u het verwachte gedrag van het model wijzigen tijdens het scoren van batches.

Het gedrag van het model aanpassen

Als u een getraind model wilt toepassen op nieuwe gegevens, moet het model weten wat de shape is van de verwachte gegevensinvoer en hoe de voorspellingen moeten worden uitgevoerd. De informatie over verwachte invoer en uitvoer wordt samen met andere metagegevens in het MLmodel bestand opgeslagen.

Wanneer u een machine learning-model bijhoudt met MLflow in Microsoft Fabric, worden de verwachte invoer en uitvoer van het model afgeleid. Met automatische aanmelding van MLflow worden de model map en het MLmodel bestand automatisch voor u gemaakt.

Wanneer u de verwachte invoer of uitvoer van het model wilt wijzigen, kunt u wijzigen hoe het MLmodel bestand wordt gemaakt wanneer het model wordt bijgehouden in de Werkruimte Microsoft Fabric. Het schema van de gegevensinvoer en -uitvoer wordt gedefinieerd in de modelhandtekening.

De modelhandtekening maken

Nadat u een model hebt bijgehouden met MLflow tijdens het trainen van het model, kunt u het MLmodel bestand vinden in de model map, opgeslagen met de uitvoering van het experiment:

Screenshot of the model folder with the MLmodel file selected and opened.

Terwijl u het voorbeeldbestand MLmodel verkent, ziet u dat de verwachte invoer en uitvoer zijn gedefinieerd als tensors. Wanneer u het model via de wizard toepast, wordt slechts één invoerkolom weergegeven, omdat de invoergegevens naar verwachting een matrix zijn.

Screenshot of apply model wizard showing one input column.

Als u wilt wijzigen hoe het model moet worden toegepast, kunt u de verschillende verwachte invoer- en uitvoerkolommen definiëren.

Laten we een voorbeeld bekijken van wanneer u een model traint met scikit-learn en u automatische logboekregistratie van MLflow gebruikt om alle andere parameters en metrische gegevens te registreren. Als u een model handmatig wilt registreren, kunt u instellen log_models=False.

Als u het invoerschema wilt definiëren, gebruikt u de klasse van Schema MLflow. U kunt de verwachte invoerkolommen, hun gegevenstypen en hun namen opgeven. Op dezelfde manier kunt u het uitvoerschema definiëren, dat meestal bestaat uit één kolom die de doelvariabele vertegenwoordigt.

Ten slotte maakt u het modelhandtekeningobject met behulp van de klasse van MLflow ModelSignature .

from sklearn.tree import DecisionTreeRegressor
from mlflow.models.signature import ModelSignature
from mlflow.types.schema import Schema, ColSpec

with mlflow.start_run():
   # Use autologging for all other parameters and metrics
   mlflow.autolog(log_models=False)

   model = DecisionTreeRegressor(max_depth=5)

   # When you fit the model, all other information will be logged 
   model.fit(X_train, y_train)

   # Create the signature manually
   input_schema = Schema([
   ColSpec("integer", "AGE"),
   ColSpec("integer", "SEX"),
   ColSpec("double", "BMI"),
   ColSpec("double", "BP"),
   ColSpec("integer", "S1"),
   ColSpec("double", "S2"),
   ColSpec("double", "S3"),
   ColSpec("double", "S4"),
   ColSpec("double", "S5"),
   ColSpec("integer", "S6"),
   ])

   output_schema = Schema([ColSpec("integer")])

   # Create the signature object
   signature = ModelSignature(inputs=input_schema, outputs=output_schema)

   # Manually log the model
   mlflow.sklearn.log_model(model, "model", signature=signature)

Als gevolg hiervan ziet het MLmodel bestand dat is opgeslagen in de model uitvoermap er als volgt uit:

Screenshot of a customized MLmodel file.

Wanneer u het model via de wizard toepast, kunt u de invoerkolommen duidelijk definiëren en gemakkelijker uitlijnen op de gegevensset waarvoor u voorspellingen wilt genereren.

Screenshot of model wizard for a custom model.

Het model opslaan in de Microsoft Fabric-werkruimte

Nadat u een machine learning-model hebt getraind en bijgehouden met MLflow in Microsoft Fabric, kunt u de inhoud van de uitvoermap in de uitvoering van het model experiment inspecteren. Door het MLmodel bestand specifiek te verkennen, kunt u bepalen of uw model zich gaat gedragen zoals verwacht tijdens het scoren van batches.

Als u een bijgehouden model wilt gebruiken voor het genereren van batchvoorspellingen, moet u het opslaan. Wanneer u een model opslaat in Microsoft Fabric, kunt u het volgende doen:

  • Maak een nieuw model.
  • Voeg een nieuwe versie toe aan een bestaand model.

Als u een model wilt opslaan, moet u de model uitvoermap opgeven, omdat die map alle benodigde informatie bevat over hoe het model zich moet gedragen tijdens het scoren van batches en de modelartefacten zelf. Meestal wordt het getrainde model opgeslagen als een pickle bestand in dezelfde map.

U kunt een model eenvoudig opslaan door te navigeren naar het desbetreffende experiment dat wordt uitgevoerd in de gebruikersinterface.

U kunt ook een model opslaan via code:

# Get the experiment by name
exp = mlflow.get_experiment_by_name(experiment_name)

# List the last experiment run
last_run = mlflow.search_runs(exp.experiment_id, order_by=["start_time DESC"], max_results=1)

# Retrieve the run ID of the last experiment run
last_run_id = last_run.iloc[0]["run_id"]

# Create a path to the model output folder of the last experiment run
model_uri = "runs:/{}/model".format(last_run_id)

# Register or save the model by specifying the model folder and model name
mv = mlflow.register_model(model_uri, "diabetes-model")