このノートブック例では、AutoML Python API を使用して Databricks で回帰モデルをトレーニングする方法を示します。 カリフォルニア州の住宅データセットを使用して、 automl.regress() を呼び出して住宅の中央値を予測した後、最適な試用版を使用して、保留されたテスト セットに対して推論を実行します。
Requirements
Machine Learning 8.3 以降の Databricks Runtime。
カリフォルニアの住宅データセット
このデータセットは、国勢調査ブロック グループごとに 1 行を使用して、1990 年の米国国勢調査から派生しました。 ターゲット変数は、カリフォルニア州の地区の住宅の中央値です。
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 に注意してください。 この URI を Cmd 12 の
model_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()))
Test
最終的なモデルを使用して、ホールドアウト テスト セットに対して予測を行い、運用環境の設定でモデルがどのように実行されるかを見積もります。
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");
モデルを登録してデプロイする
MLflow モデル レジストリの他のモデルと同様に、AutoML によってトレーニングされたモデルを登録してデプロイできます。 MLflow モデルのログ記録、読み込み、登録を参照してください。
トラブルシューティング: No module named pandas.core.indexes.numeric
モザイク AI モデル サービスを使用して 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を含むようにスクリプトを編集します。 - モデルを再登録します。
- 新しいモデル バージョンを提供します。