メインコンテンツまでスキップ

AutoML Python API を使用して分類モデルをトレーニングする

このサンプルノートブックでは、AutoML Python APIを使用してDatabricks上で分類モデルをトレーニングする方法を示します。UCI Census所得を使用してautoml.classify()呼び出して、個人が年間5万ドル以上稼いでいるかどうかを予測し、最適な試行を使用してPandasとSpark DataFrames両方で推論を実行します。

要件

機械学習のためのDatabricks Runtime 。

Census収入データセット

このデータセットには、1994年の国勢調査データベースからの国勢調査データが含まれています。各行は個人のグループを表しています。目標は、 の年収が5万ドルを超えているかどうかを判断することです。 この分類は、 収入 列に<=50Kまたは>50k値を持つ文字列として表されます。

Python
from pyspark.sql.types import DoubleType, StringType, StructType, StructField

schema = StructType([
StructField("age", DoubleType(), False),
StructField("workclass", StringType(), False),
StructField("fnlwgt", DoubleType(), False),
StructField("education", StringType(), False),
StructField("education_num", DoubleType(), False),
StructField("marital_status", StringType(), False),
StructField("occupation", StringType(), False),
StructField("relationship", StringType(), False),
StructField("race", StringType(), False),
StructField("sex", StringType(), False),
StructField("capital_gain", DoubleType(), False),
StructField("capital_loss", DoubleType(), False),
StructField("hours_per_week", DoubleType(), False),
StructField("native_country", StringType(), False),
StructField("income", StringType(), False)
])
input_df = spark.read.format("csv").schema(schema).load("/databricks-datasets/adult/adult.data")

トレーニングする/テスト分割

Python
train_df, test_df = input_df.randomSplit([0.99, 0.01], seed=42)
display(train_df)

トレーニング

以下のコマンドはAutoMLの実行を開始します。target_col引数には、モデルが予測する対象となる列を指定する必要があります。
実行が完了したら、最適な試用ノートブックへのリンクをクリックして、トレーニングコードを確認できます。このノートブックには重要な機能プロットも含まれています。

Python
from databricks import automl
summary = automl.classify(train_df, target_col="income", timeout_minutes=30)

以下のコマンドは、AutoMLの出力に関する情報を表示します。

Python
help(summary)

推論

AutoMLで学習させたモデルを使って、新しいデータに対する予測を行うことができます。以下の例は、 Pandas DataFramesのデータに対して予測を行う方法、またはSpark DataFramesに対する予測のためにモデルをSpark UDFとして登録する方法を示しています。

Python
model_uri = summary.best_trial.model_path
# model_uri = "<model-uri-from-generated-notebook>"

Pandas データフレーム

Python
import mlflow

# Prepare test dataset
test_pdf = test_df.toPandas()
y_test = test_pdf["income"]
X_test = test_pdf.drop("income", axis=1)

# Run inference using the best model
model = mlflow.pyfunc.load_model(model_uri)
predictions = model.predict(X_test)
test_pdf["income_predicted"] = predictions
display(test_pdf)

Spark DataFrame

Python
predict_udf = mlflow.pyfunc.spark_udf(spark, model_uri=model_uri, result_type="string")
display(test_df.withColumn("income_predicted", predict_udf()))

テスト

最終モデルを使用してホールドアウトテストセットで予測を行い、モデルが本番運用環境でどのように機能するかを推定します。 この図は、正解と不正解の予測の内訳を示しています。

Python
import sklearn.metrics

model = mlflow.sklearn.load_model(model_uri)
sklearn.metrics.plot_confusion_matrix(model, X_test, y_test)

モデルを登録してデプロイする

AutoMLでトレーニングされたモデルは、他のモデルと同様にMLflow Model Registryに登録してデプロイできます。 「ログ、ロード、および登録するMLflowモデル」を参照してください。

トラブルシューティング: No module named pandas.core.indexes.numeric

AutoMLでトレーニングされたモデルをモデルサービングで提供する場合、エラーNo module named pandas.core.indexes.numericが表示されることがあります。これは、 AutoMLで使用されるpandasバージョンがモデルサービング エンドポイント環境のものと異なる場合に発生します。 解決するには:

  1. add-pandas-dependency.py スクリプトをダウンロードしてください。スクリプトは記録済みモデルのrequirements.txtconda.yamlをピン留めpandas==1.5.3に編集します。
  2. スクリプトを編集して、モデルがログに記録されたMLflow実行のrun_idを含めるようにします。
  3. モデルを再登録します。
  4. 新モデル版を提供してください。

サンプルノートブック

AutoML Python API を使用して分類モデルをトレーニングする

ノートブックを新しいタブで開く

次のステップ

AutoML Python API リファレンス