AutoML Python API を使用して回帰モデルをトレーニングする
このサンプルノートブックでは、AutoML Python APIを使用してDatabricks上で回帰モデルをトレーニングする方法を示します。カリフォルニアの住宅データセットを使用して、 automl.regress()を呼び出して住宅価格の中央値を予測し、最良の試行を使用して、保留されたテストセットで推論を実行します。
要件
Databricks Runtime for Machine Learning 8.3以降。
カリフォルニア州の住宅データセット
このデータセットは、1990年の米国国勢調査から抽出されたもので、国勢調査ブロックグループごとに1行のデータを使用しています。目的変数は、カリフォルニア州の各地区における住宅価格の中央値である。
import sklearn
input_pdf = sklearn.datasets.fetch_california_housing(as_frame=True)
display(input_pdf.frame)
トレーニングする/テスト分割
from sklearn.model_selection import train_test_split
train_pdf, test_pdf = train_test_split(input_pdf.frame, test_size=0.01, random_state=42)
display(train_pdf)
トレーニング
以下のコマンドはAutoMLの実行を開始します。target_col引数には、モデルが予測する対象となる列を指定する必要があります。
実行が完了したら、最適な試用ノートブックへのリンクをクリックして、トレーニングコードを確認できます。このノートブックには重要な機能プロットも含まれています。
from databricks import automl
summary = automl.regress(train_pdf, target_col="MedHouseVal", timeout_minutes=30)
以下のコマンドは、AutoMLの出力に関する情報を表示します。
help(summary)
モデルを反復処理する
- 上にリンクされているノートブックと体験を探索してください。
- 最良のトライアルノートブックのメトリクスが良さそうな場合は、直接推論セクションに進んでください。
- 最良の試行で生成されたモデルを改善したい場合は、次の手順に従ってください。
- 最も良い試行結果が得られたノートブックを開き、それを複製してください。
- モデルを改善するために、必要に応じてノートブックを編集してください。例えば、異なるハイパーパラメータを試してみると良いでしょう。
- モデルに満足したら、トレーニングされたモデルのアーティファクトが記録されている URI をメモします。 コマンド12の
model_uri変数にこのURIを割り当ててください。
推論
AutoMLで学習させたモデルを使って、新しいデータに対する予測を行うことができます。以下の例は、 Pandas DataFramesのデータに対して予測を行う方法、またはSpark DataFramesに対する予測のためにモデルをSpark UDFとして登録する方法を示しています。
Pandas データフレーム
model_uri = summary.best_trial.model_path
# model_uri = "<model-uri-from-generated-notebook>"
import mlflow
# Prepare test dataset
y_test = test_pdf["MedHouseVal"]
X_test = test_pdf.drop("MedHouseVal", axis=1)
# Run inference using the best model
model = mlflow.pyfunc.load_model(model_uri)
predictions = model.predict(X_test)
test_pdf["MedHouseVal_predicted"] = predictions
display(test_pdf)
Spark DataFrame
# Prepare the test dataset
test_df = spark.createDataFrame(test_pdf)
predict_udf = mlflow.pyfunc.spark_udf(spark, model_uri=model_uri)
display(test_df.withColumn("MedHouseVal_predicted", predict_udf()))
テスト
最終モデルを使用してホールドアウトテストセットで予測を行い、モデルが本番運用環境でどのように機能するかを推定します。
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# Prepare the dataset
y_pred = test_pdf["MedHouseVal_predicted"]
test = pd.DataFrame({"Predicted":y_pred,"Actual":y_test})
test = test.reset_index()
test = test.drop(["index"], axis=1)
# plot graphs
fig= plt.figure(figsize=(16,8))
plt.plot(test[:50])
plt.legend(["Actual", "Predicted"])
sns.jointplot(x="Actual", y="Predicted", data=test, kind="reg");
モデルを登録してデプロイする
AutoMLでトレーニングされたモデルは、他のモデルと同様にMLflow Model Registryに登録してデプロイできます。 「ログ、ロード、および登録するMLflowモデル」を参照してください。
トラブルシューティング: No module named pandas.core.indexes.numeric
Mosaic AI Model Serving で AutoML でトレーニングされたモデルを提供すると、エラーNo module named pandas.core.indexes.numericが表示される場合があります。これは、 AutoMLで使用されるpandasバージョンがモデルサービング エンドポイント環境のものと異なる場合に発生します。 解決するには:
- add-pandas-dependency.py スクリプトをダウンロードしてください。スクリプトは記録済みモデルの
requirements.txtとconda.yamlをピン留めpandas==1.5.3に編集します。 - スクリプトを編集して、モデルがログに記録されたMLflow実行の
run_idを含めるようにします。 - モデルを再登録します。
- 新モデル版を提供してください。