Comment former des modèles avec scikit-learn dans Microsoft Fabric

Scikit-learn (scikit-learn.org) est un cadre d'apprentissage automatique populaire et open source. Il est fréquemment utilisé pour l'apprentissage supervisé et non supervisé. Il fournit également divers outils pour l'ajustement du modèle, le prétraitement des données, la sélection du modèle, l'évaluation du modèle, etc.

Dans cette section, nous allons passer en revue un exemple de la façon dont vous pouvez former et suivre les itérations de votre modèle Scikit-Learn.

Installer scikit-learn

Pour démarrer avec scikit-learn, vous devez vous assurer qu'il est installé dans votre ordinateur portable. Vous pouvez installer ou mettre à niveau la version de scikit-learn sur votre environnement à l'aide de la commande suivante :

%pip install scikit-learn

Ensuite, nous allons créer une expérience d'apprentissage automatique à l'aide de l'API MLFlow. L'API MLflow set_experiment() créera une nouvelle expérience d'apprentissage automatique si elle n'existe pas déjà.

import mlflow

mlflow.set_experiment("sample-sklearn")

Entraîner un modèle scikit-learn

Une fois l'expérience créée, nous allons créer un exemple d'ensemble de données et créer un modèle de régression logistique. Nous allons également démarrer une exécution MLflow et suivre les indicateurs de performance, les paramètres et le modèle de régression logistique final. Une fois que nous aurons généré le modèle final, nous enregistrerons également le modèle résultant pour un suivi supplémentaire.

import mlflow.sklearn
import numpy as np
from sklearn.linear_model import LogisticRegression
from mlflow.models.signature import infer_signature

with mlflow.start_run() as run:

    lr = LogisticRegression()
    X = np.array([-2, -1, 0, 1, 2, 1]).reshape(-1, 1)
    y = np.array([0, 0, 1, 1, 1, 0])
    lr.fit(X, y)
    score = lr.score(X, y)
    signature = infer_signature(X, y)

    print("log_metric.")
    mlflow.log_metric("score", score)

    print("log_params.")
    mlflow.log_param("alpha", "alpha")

    print("log_model.")
    mlflow.sklearn.log_model(lr, "sklearn-model", signature=signature)
    print("Model saved in run_id=%s" % run.info.run_id)

    print("register_model.")
    mlflow.register_model(

        "runs:/{}/sklearn-model".format(run.info.run_id), "sample-sklearn"
    )
    print("All done")

Charger et évaluer le modèle sur un exemple de jeu de données

Une fois le modèle enregistré, il peut également être chargé pour l'inférence. Pour ce faire, nous allons charger le modèle et exécuter l'inférence sur un exemple d'ensemble de données.

# Inference with loading the logged model
from synapse.ml.predict import MLflowTransformer

spark.conf.set("spark.synapse.ml.predict.enabled", "true")

model = MLflowTransformer(
    inputCols=["x"],
    outputCol="prediction",
    modelName="sample-sklearn",
    modelVersion=1,
)

test_spark = spark.createDataFrame(
    data=np.array([-2, -1, 0, 1, 2, 1]).reshape(-1, 1).tolist(), schema=["x"]
)

batch_predictions = model.transform(test_spark)

batch_predictions.show()