Microsoft Fabric で Scikit-learn を使用してモデルをトレーニングする

この記事では、Scikit-learn モデルのイテレーションをトレーニングおよび追跡する方法を説明します。 Scikit-learn は、教師あり学習と教師なし学習に頻繁に使用される一般的なオープンソースの機械学習フレームワークです。 このフレームワークでは、モデルの調整、データの前処理、モデルの選択、モデルの評価などのツールも用意されています。

前提条件

ノートブック内に scikit-learn をインストールします。 次のコマンドを使用して、自分の環境で Scikit-learn のバージョンをインストールまたはアップグレードできます。

pip install scikit-learn

機械学習の実験を設定する

MLFLow API を使用して機械学習実験を作成できます。 MLflow set_experiment() 関数は、sample-sklearn という名前の新しい機械学習実験を作成します (まだ存在しない場合)。

ノートブックで次のCodeを実行し、実験を作成します:

import mlflow

mlflow.set_experiment("sample-sklearn")

scikit-learn モデルをトレーニングする

実験の設定後、サンプル データセットとロジスティック回帰モデルを作成します。 次のコードでは、MLflow の実行を開始し、メトリック、パラメーター、および最終的なロジスティック回帰モデルを追跡します。 最終的なモデルを生成後、さらに追跡を行うために結果のモデルも保存できます。

ノートブックで次のコードを実行し、サンプル データセットとロジスティック回帰モデルを作成します。

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

サンプル データセットでモデルを読み込んで評価する

モデルを保存したら、推論のためにモデルを読み込むこともできます。

ノートブックで次のコードを実行し、モデルを読み込み、サンプル データセットで推論を実行します。

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